module Gecode::Set::SetOperand
A SetOperand is a combination of operands on which the constraints defined in SetConstraintReceiver can be placed.
Set operands can be created either by using Gecode::Mixin#set_var et al, or by using properties that produce set operands. The operands, no matter how they were created, all respond to the properties defined by SetOperand.
Examples ¶ ↑
Produces a single set operand (more specifically a SetVar), with greatest lower bound {0} and least upper bound {0, 1, 2}, inside a problem formulation, using Gecode::Mixin#set_var:
set_operand = set_var(0, 0..2)
Uses the #union property to
produce a new set operand representing the union between
set_operand1
and set_operand2
:
new_set_operand = set_operand1.union(set_operand2)
Uses the SetEnumOperand#union property to produce a new set operand
representing the union of the set operands in the enumeration
set_enum
:
new_set_operand = set_enum.union
Uses the SetEnumOperand#[] property to produce a new set operand
representing the set operand at the index decided by
int_operand
(which can change during search) in the
enumeration set_enum
:
new_set_operand = set_enum[int_operand]
Public Instance Methods
Produces a new SetOperand representing the
disjoint union between this operand and
set_operand_or_constant_set
. The disjoint union is the union
of the disjoint parts of the sets.
Examples ¶ ↑
# The disjoint union between +set1+ and +set2+. set1.disjoint_union set2 # The disjoint union between +set+ and {1, 3, 5}. set.disjoint_union [1,3,5]
# File lib/gecoder/interface/constraints/set/operation.rb, line 28 def disjoint_union(set_operand_or_constant_set) set_operation(:disjoint_union, set_operand_or_constant_set) end
Produces a SetElementsOperand on which relation constraints can be placed that constrain all elements in the set.
Examples ¶ ↑
# The elements of +set+. set.elements
# File lib/gecoder/interface/constraints/set_elements_constraints.rb, line 91 def elements Gecode::SetElements::SetElementsOperand.new(self) end
Produces a new SetOperand representing the
intersection between this operand and
set_operand_or_constant_set
.
Examples ¶ ↑
# The intersection between +set1+ and +set2+. set1.intersection set2 # The intersection between +set+ and {1, 3, 5}. set.intersection [1,3,5]
# File lib/gecoder/interface/constraints/set/operation.rb, line 42 def intersection(set_operand_or_constant_set) set_operation(:intersection, set_operand_or_constant_set) end
Produces a new SetOperand representing this
operand minus set_operand_or_constant_set
.
Examples ¶ ↑
# +set1+ minus +set2+. set1.minus set2 # +set+ minus {1, 3, 5}. set.minus [1,3,5]
# File lib/gecoder/interface/constraints/set/operation.rb, line 56 def minus(set_operand_or_constant_set) set_operation(:minus, set_operand_or_constant_set) end
Produces an IntOperand representing the sum of the values in the set. One of the following options may also be given:
- :weights
-
Produces the weighted sum using the specified hash of weights. The hash should map each value to that value’s weight.
- :substitutions
-
Produces the sum of the set with all elements replaced according to the hash.
Elements not included in the weights or substitutions hash are removed from the upper bound of the set.
Examples ¶ ↑
# The sum of +set+. set.sum # The sum of +set+ with primes < 10 given twice the weight. set.sum(:weights => {2 => 2, 3 => 2, 5 => 2, 7 => 2}) # The sum of +set+ with odd values in [1,6] being counted as 1. set.sum(:substitutions => {1 => 1, 3 => 1, 5 => 1})
# File lib/gecoder/interface/constraints/set/connection.rb, line 44 def sum(options = {:weights => weights = Hash.new(1)}) if options.empty? or options.keys.size > 1 raise ArgumentError, 'At most one of the options :weights and ' + ':substitutions may be specified.' end case options.keys.first when :substitutions subs = options[:substitutions] when :weights weights = options[:weights] subs = Hash.new do |hash, key| if weights[key].nil? hash[key] = nil else hash[key] = key * weights[key] end end else raise ArgumentError, "Unrecognized option #{options.keys.first}." end Connection::SetSumOperand.new(@model, self, subs) end
Produces a new SetOperand representing the
union between this operand and set_operand_or_constant_set
.
Examples ¶ ↑
# The union between +set1+ and +set2+. set1.union set2 # The union between +set+ and {1, 3, 5}. set.union [1,3,5]
# File lib/gecoder/interface/constraints/set/operation.rb, line 13 def union(set_operand_or_constant_set) set_operation(:union, set_operand_or_constant_set) end