Sha256: a7c7d39136e8e4764dd48775fe12cae67ab65ffccf31f5f5ddb0ca2ef7bb1496
Contents?: true
Size: 1.08 KB
Versions: 3
Compression:
Stored size: 1.08 KB
Contents
module Ravensat module Claw def self.alo(bool_vars) bool_vars.reduce(:|) end def self.pairwise_amo(bool_vars) bool_vars.combination(2).map do |e| e.map(&:~@).reduce(:|) end.reduce(:&) end # NOTE: Klieber, W. and Kwon, G.: Efficient CNF Encoding for Selecting 1 from N Objects (2007). def self.commander_amo(bool_vars) m = bool_vars.size / 2 commander_variables = [] formula = Ravensat::InitialNode.new bool_vars.each_slice(2) do |g| c = Ravensat::VarNode.new subset = g << ~c formula &= pairwise_amo(subset) formula &= alo(subset) commander_variables << c end if m < 6 formula &= pairwise_amo(commander_variables) else formula &= commander_amo(commander_variables) end end def self.all_different(*int_vars) int_vars.combination(2).map do |int_var| int_var.reduce(:!=) end.reduce(:&) end def self.all_only_one(*int_vars) int_vars.map(&:only_one).reduce(:&) end # alias :amo :pairwise_amo end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ravensat-1.0.3 | lib/ravensat/claw.rb |
ravensat-1.0.2 | lib/ravensat/claw.rb |
ravensat-1.0.1 | lib/ravensat/claw.rb |