gecoder-with-gecode 0.7.1-mswin32 → 0.8.0-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +7 -0
- data/README +10 -1
- data/lib/gecode.dll +0 -0
- data/lib/gecoder/bindings/bindings.rb +407 -731
- data/lib/gecoder/interface/binding_changes.rb +1 -1
- data/lib/gecoder/interface/branch.rb +25 -25
- data/lib/gecoder/interface/constraints.rb +47 -4
- data/lib/gecoder/interface/constraints/bool/boolean.rb +18 -16
- data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +13 -11
- data/lib/gecoder/interface/constraints/int/arithmetic.rb +5 -4
- data/lib/gecoder/interface/constraints/int/domain.rb +8 -9
- data/lib/gecoder/interface/constraints/int/linear.rb +10 -8
- data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +4 -4
- data/lib/gecoder/interface/constraints/int_enum/channel.rb +2 -2
- data/lib/gecoder/interface/constraints/int_enum/count.rb +4 -5
- data/lib/gecoder/interface/constraints/int_enum/distinct.rb +7 -2
- data/lib/gecoder/interface/constraints/int_enum/element.rb +2 -2
- data/lib/gecoder/interface/constraints/int_enum/equality.rb +6 -3
- data/lib/gecoder/interface/constraints/int_enum/sort.rb +17 -5
- data/lib/gecoder/interface/constraints/set_enum/distinct.rb +0 -36
- data/lib/gecoder/interface/constraints/set_var_constraints.rb +5 -0
- data/lib/gecoder/interface/model.rb +3 -3
- data/lib/gecoder/interface/search.rb +5 -4
- data/lib/gecoder/version.rb +1 -1
- data/specs/branch.rb +27 -27
- data/specs/constraints/arithmetic.rb +48 -30
- data/specs/constraints/bool_enum.rb +39 -19
- data/specs/constraints/boolean.rb +10 -10
- data/specs/constraints/cardinality.rb +12 -9
- data/specs/constraints/channel.rb +6 -6
- data/specs/constraints/connection.rb +22 -26
- data/specs/constraints/constraint_helper.rb +125 -41
- data/specs/constraints/count.rb +22 -15
- data/specs/constraints/distinct.rb +10 -64
- data/specs/constraints/element.rb +14 -12
- data/specs/constraints/equality.rb +4 -4
- data/specs/constraints/int_domain.rb +8 -7
- data/specs/constraints/int_relation.rb +12 -8
- data/specs/constraints/linear.rb +4 -4
- data/specs/constraints/reification_sugar.rb +22 -4
- data/specs/constraints/selection.rb +2 -2
- data/specs/constraints/set_domain.rb +7 -3
- data/specs/constraints/set_operation.rb +2 -2
- data/specs/constraints/set_relation.rb +2 -6
- data/specs/constraints/sort.rb +20 -16
- data/specs/model.rb +4 -4
- data/tasks/dependencies.txt +21 -0
- data/tasks/distribution.rake +13 -5
- data/vendor/gecode/win32/lib/libgecodeint.dll +0 -0
- data/vendor/gecode/win32/lib/libgecodekernel.dll +0 -0
- data/vendor/gecode/win32/lib/libgecodeminimodel.dll +0 -0
- data/vendor/gecode/win32/lib/libgecodesearch.dll +0 -0
- data/vendor/gecode/win32/lib/libgecodeset.dll +0 -0
- data/vendor/gecode/win32/lib/libgecodesupport.dll +0 -0
- data/vendor/rust/include/rust_checks.hh +2 -1
- data/vendor/rust/include/rust_conversions.hh +2 -2
- data/vendor/rust/rust/attribute.rb +2 -2
- data/vendor/rust/rust/class.rb +2 -2
- data/vendor/rust/rust/cxxclass.rb +0 -2
- data/vendor/rust/rust/function.rb +2 -2
- data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +1 -1
- data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +1 -1
- data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +1 -1
- data/vendor/rust/rust/type.rb +1 -1
- metadata +4 -3
- data/tasks/building.howto +0 -65
@@ -274,7 +274,7 @@ module Gecode
|
|
274
274
|
grow(@next_index + count) # See the design note for more information.
|
275
275
|
|
276
276
|
if cardinality_range.nil?
|
277
|
-
cardinality_range = 0..Gecode::Raw::
|
277
|
+
cardinality_range = 0..Gecode::Raw::SetLimits::CARD
|
278
278
|
end
|
279
279
|
|
280
280
|
params = [@space]
|
@@ -81,44 +81,44 @@ module Gecode
|
|
81
81
|
# Maps the names of the supported variable branch strategies for integer and
|
82
82
|
# booleans to the corresponding constant in Gecode.
|
83
83
|
BRANCH_INT_VAR_CONSTANTS = {
|
84
|
-
:none => Gecode::Raw::
|
85
|
-
:smallest_min => Gecode::Raw::
|
86
|
-
:largest_min => Gecode::Raw::
|
87
|
-
:smallest_max => Gecode::Raw::
|
88
|
-
:largest_max => Gecode::Raw::
|
89
|
-
:smallest_size => Gecode::Raw::
|
90
|
-
:largest_size => Gecode::Raw::
|
91
|
-
:smallest_degree => Gecode::Raw::
|
92
|
-
:largest_degree => Gecode::Raw::
|
93
|
-
:smallest_min_regret => Gecode::Raw::
|
94
|
-
:largest_min_regret => Gecode::Raw::
|
95
|
-
:smallest_max_regret => Gecode::Raw::
|
96
|
-
:largest_max_regret => Gecode::Raw::
|
84
|
+
:none => Gecode::Raw::INT_VAR_NONE,
|
85
|
+
:smallest_min => Gecode::Raw::INT_VAR_MIN_MIN,
|
86
|
+
:largest_min => Gecode::Raw::INT_VAR_MIN_MAX,
|
87
|
+
:smallest_max => Gecode::Raw::INT_VAR_MAX_MIN,
|
88
|
+
:largest_max => Gecode::Raw::INT_VAR_MAX_MAX,
|
89
|
+
:smallest_size => Gecode::Raw::INT_VAR_SIZE_MIN,
|
90
|
+
:largest_size => Gecode::Raw::INT_VAR_SIZE_MAX,
|
91
|
+
:smallest_degree => Gecode::Raw::INT_VAR_DEGREE_MIN,
|
92
|
+
:largest_degree => Gecode::Raw::INT_VAR_DEGREE_MAX,
|
93
|
+
:smallest_min_regret => Gecode::Raw::INT_VAR_REGRET_MIN_MIN,
|
94
|
+
:largest_min_regret => Gecode::Raw::INT_VAR_REGRET_MIN_MAX,
|
95
|
+
:smallest_max_regret => Gecode::Raw::INT_VAR_REGRET_MAX_MIN,
|
96
|
+
:largest_max_regret => Gecode::Raw::INT_VAR_REGRET_MAX_MAX
|
97
97
|
}
|
98
98
|
# Maps the names of the supported variable branch strategies for sets to
|
99
99
|
# the corresponding constant in Gecode.
|
100
100
|
BRANCH_SET_VAR_CONSTANTS = { #:nodoc:
|
101
|
-
:none => Gecode::Raw::
|
102
|
-
:smallest_cardinality => Gecode::Raw::
|
103
|
-
:largest_cardinality => Gecode::Raw::
|
104
|
-
:smallest_unknown => Gecode::Raw::
|
105
|
-
:largest_unknown => Gecode::Raw::
|
101
|
+
:none => Gecode::Raw::SET_VAR_NONE,
|
102
|
+
:smallest_cardinality => Gecode::Raw::SET_VAR_MIN_CARD,
|
103
|
+
:largest_cardinality => Gecode::Raw::SET_VAR_MAX_CARD,
|
104
|
+
:smallest_unknown => Gecode::Raw::SET_VAR_MIN_UNKNOWN_ELEM,
|
105
|
+
:largest_unknown => Gecode::Raw::SET_VAR_MAX_UNKNOWN_ELEM
|
106
106
|
}
|
107
107
|
|
108
108
|
# Maps the names of the supported value branch strategies for integers and
|
109
109
|
# booleans to the corresponding constant in Gecode.
|
110
110
|
BRANCH_INT_VALUE_CONSTANTS = { #:nodoc:
|
111
|
-
:min => Gecode::Raw::
|
112
|
-
:med => Gecode::Raw::
|
113
|
-
:max => Gecode::Raw::
|
114
|
-
:split_min => Gecode::Raw::
|
115
|
-
:split_max => Gecode::Raw::
|
111
|
+
:min => Gecode::Raw::INT_VAL_MIN,
|
112
|
+
:med => Gecode::Raw::INT_VAL_MED,
|
113
|
+
:max => Gecode::Raw::INT_VAL_MAX,
|
114
|
+
:split_min => Gecode::Raw::INT_VAL_SPLIT_MIN,
|
115
|
+
:split_max => Gecode::Raw::INT_VAL_SPLIT_MAX
|
116
116
|
}
|
117
117
|
# Maps the names of the supported value branch strategies for sets to the
|
118
118
|
# corresponding constant in Gecode.
|
119
119
|
BRANCH_SET_VALUE_CONSTANTS = { #:nodoc:
|
120
|
-
:min => Gecode::Raw::
|
121
|
-
:max => Gecode::Raw::
|
120
|
+
:min => Gecode::Raw::SET_VAL_MIN,
|
121
|
+
:max => Gecode::Raw::SET_VAL_MAX
|
122
122
|
}
|
123
123
|
end
|
124
124
|
|
@@ -44,6 +44,14 @@ module Gecode
|
|
44
44
|
:domain => Gecode::Raw::ICL_DOM
|
45
45
|
}
|
46
46
|
|
47
|
+
# Maps the name used in options to the value used in Gecode for
|
48
|
+
# propagation kinds.
|
49
|
+
PROPAGATION_KINDS = {
|
50
|
+
:default => Gecode::Raw::PK_DEF,
|
51
|
+
:speed => Gecode::Raw::PK_SPEED,
|
52
|
+
:memory => Gecode::Raw::PK_MEMORY,
|
53
|
+
}
|
54
|
+
|
47
55
|
# Maps the names of the methods to the corresponding integer relation
|
48
56
|
# type in Gecode.
|
49
57
|
RELATION_TYPES = {
|
@@ -103,9 +111,10 @@ module Gecode
|
|
103
111
|
|
104
112
|
module_function
|
105
113
|
|
106
|
-
# Decodes the common options to constraints: strength and
|
107
|
-
# Returns a hash with up to
|
108
|
-
# should be used for the constraint
|
114
|
+
# Decodes the common options to constraints: strength, kind and
|
115
|
+
# reification. Returns a hash with up to three values. :strength is the
|
116
|
+
# strength that should be used for the constraint, :kind is the
|
117
|
+
# propagation kind that should be used, and :reif is the (bound) boolean
|
109
118
|
# variable that should be used for reification. The decoded options are
|
110
119
|
# removed from the hash (so in general the hash will be consumed in the
|
111
120
|
# process).
|
@@ -120,6 +129,12 @@ module Gecode
|
|
120
129
|
raise ArgumentError, "Unrecognized propagation strength #{strength}."
|
121
130
|
end
|
122
131
|
|
132
|
+
# Propagation kind.
|
133
|
+
kind = options.delete(:kind) || :default
|
134
|
+
unless PROPAGATION_KINDS.include? kind
|
135
|
+
raise ArgumentError, "Unrecognized propagation kind #{kind}."
|
136
|
+
end
|
137
|
+
|
123
138
|
# Reification.
|
124
139
|
reif_var = options.delete(:reify)
|
125
140
|
unless reif_var.nil? or reif_var.kind_of? FreeBoolVar
|
@@ -131,7 +146,11 @@ module Gecode
|
|
131
146
|
raise ArgumentError, 'Unrecognized constraint option: ' +
|
132
147
|
options.keys.first.to_s
|
133
148
|
end
|
134
|
-
return {
|
149
|
+
return {
|
150
|
+
:strength => PROPAGATION_STRENGTHS[strength],
|
151
|
+
:kind => PROPAGATION_KINDS[kind],
|
152
|
+
:reif => reif_var
|
153
|
+
}
|
135
154
|
end
|
136
155
|
|
137
156
|
# Converts the different ways to specify constant sets in the interface
|
@@ -188,6 +207,14 @@ module Gecode
|
|
188
207
|
(expression.kind_of?(Enumerable) && # It's an enum of fixnums.
|
189
208
|
expression.all?{ |e| e.kind_of? Fixnum })
|
190
209
|
end
|
210
|
+
|
211
|
+
# Extracts an array of the values selected for the standard propagation
|
212
|
+
# options (propagation strength and propagation kind) from the hash of
|
213
|
+
# parameters given. The options are returned in the order that they are
|
214
|
+
# given when posting constraints to Gecode.
|
215
|
+
def extract_propagation_options(params)
|
216
|
+
params.values_at(:strength, :kind)
|
217
|
+
end
|
191
218
|
end
|
192
219
|
|
193
220
|
# Describes a constraint expressions. An expression is produced by calling
|
@@ -368,6 +395,13 @@ module Gecode
|
|
368
395
|
constrain_equal(var, params, constrain)
|
369
396
|
end
|
370
397
|
end
|
398
|
+
|
399
|
+
# Gives an array of the values selected for the standard propagation
|
400
|
+
# options (propagation strength and propagation kind) in the order that
|
401
|
+
# they are given when posting constraints to Gecode.
|
402
|
+
def propagation_options
|
403
|
+
Gecode::Constraints::Util::extract_propagation_options(@params)
|
404
|
+
end
|
371
405
|
end
|
372
406
|
|
373
407
|
# Base class for all constraints.
|
@@ -384,6 +418,15 @@ module Gecode
|
|
384
418
|
def post
|
385
419
|
raise NoMethodError, 'Abstract method has not been implemented.'
|
386
420
|
end
|
421
|
+
|
422
|
+
private
|
423
|
+
|
424
|
+
# Gives an array of the values selected for the standard propagation
|
425
|
+
# options (propagation strength and propagation kind) in the order that
|
426
|
+
# they are given when posting constraints to Gecode.
|
427
|
+
def propagation_options
|
428
|
+
Gecode::Constraints::Util::extract_propagation_options(@params)
|
429
|
+
end
|
387
430
|
end
|
388
431
|
end
|
389
432
|
end
|
@@ -126,8 +126,8 @@ module Gecode
|
|
126
126
|
# (b1 & b2).must_not.imply b3
|
127
127
|
class BooleanConstraint < Gecode::Constraints::ReifiableConstraint
|
128
128
|
def post
|
129
|
-
lhs, rhs, negate,
|
130
|
-
:
|
129
|
+
lhs, rhs, negate, reif_var =
|
130
|
+
@params.values_at(:lhs, :rhs, :negate, :reif)
|
131
131
|
space = (lhs.model || rhs.model).active_space
|
132
132
|
|
133
133
|
# TODO: It should be possible to reduce the number of necessary
|
@@ -136,24 +136,25 @@ module Gecode
|
|
136
136
|
|
137
137
|
if rhs.respond_to? :bind
|
138
138
|
if reif_var.nil?
|
139
|
-
Gecode::Raw::
|
139
|
+
Gecode::Raw::rel(space, lhs.bind, Gecode::Raw::BOT_EQV, rhs.bind,
|
140
|
+
(!negate ? 1 : 0), *propagation_options)
|
140
141
|
else
|
141
142
|
if negate
|
142
|
-
Gecode::Raw::
|
143
|
-
|
143
|
+
Gecode::Raw::rel(space, lhs.bind, Gecode::Raw::BOT_XOR, rhs.bind,
|
144
|
+
reif_var.bind, *propagation_options)
|
144
145
|
else
|
145
|
-
Gecode::Raw::
|
146
|
-
|
146
|
+
Gecode::Raw::rel(space, lhs.bind, Gecode::Raw::BOT_EQV, rhs.bind,
|
147
|
+
reif_var.bind, *propagation_options)
|
147
148
|
end
|
148
149
|
end
|
149
150
|
else
|
150
151
|
should_hold = !negate & rhs
|
151
152
|
if reif_var.nil?
|
152
153
|
Gecode::Raw::MiniModel::BoolExpr.new(lhs.bind).post(space,
|
153
|
-
should_hold)
|
154
|
+
should_hold, *propagation_options)
|
154
155
|
else
|
155
|
-
Gecode::Raw::
|
156
|
-
|
156
|
+
Gecode::Raw::rel(space, lhs.bind, Gecode::Raw::BOT_EQV,
|
157
|
+
reif_var.bind, (should_hold ? 1 : 0), *propagation_options)
|
157
158
|
end
|
158
159
|
end
|
159
160
|
end
|
@@ -169,10 +170,10 @@ module Gecode
|
|
169
170
|
# Maps the names of the methods to the corresponding bool constraint in
|
170
171
|
# Gecode.
|
171
172
|
OPERATION_TYPES = {
|
172
|
-
:| =>
|
173
|
-
:& =>
|
174
|
-
:^ =>
|
175
|
-
:implies =>
|
173
|
+
:| => Gecode::Raw::BOT_OR,
|
174
|
+
:& => Gecode::Raw::BOT_AND,
|
175
|
+
:^ => Gecode::Raw::BOT_XOR,
|
176
|
+
:implies => Gecode::Raw::BOT_IMP
|
176
177
|
}
|
177
178
|
|
178
179
|
public
|
@@ -185,8 +186,9 @@ module Gecode
|
|
185
186
|
end
|
186
187
|
ExpressionTree.new(self, expression) do |model, var1, var2|
|
187
188
|
new_var = model.bool_var
|
188
|
-
Gecode::Raw
|
189
|
-
new_var.bind, Gecode::Raw::ICL_DEF
|
189
|
+
Gecode::Raw::rel(model.active_space, var1.bind, #{operation},
|
190
|
+
var2.bind, new_var.bind, Gecode::Raw::ICL_DEF,
|
191
|
+
Gecode::Raw::PK_DEF)
|
190
192
|
new_var
|
191
193
|
end
|
192
194
|
end
|
@@ -36,16 +36,16 @@ module Gecode
|
|
36
36
|
# :strength => :domain)
|
37
37
|
class ConjunctionStub < Gecode::Constraints::Bool::CompositeStub
|
38
38
|
def constrain_equal(variable, params, constrain)
|
39
|
-
enum
|
39
|
+
enum = @params[:lhs]
|
40
40
|
|
41
41
|
@model.add_interaction do
|
42
42
|
if variable.respond_to? :bind
|
43
43
|
bound = variable.bind
|
44
44
|
else
|
45
|
-
bound = variable
|
45
|
+
bound = variable ? 1 : 0
|
46
46
|
end
|
47
|
-
Gecode::Raw::
|
48
|
-
bound,
|
47
|
+
Gecode::Raw::rel(@model.active_space, Gecode::Raw::BOT_AND,
|
48
|
+
enum.to_bool_var_array, bound, *propagation_options)
|
49
49
|
end
|
50
50
|
return variable
|
51
51
|
end
|
@@ -69,15 +69,17 @@ module Gecode
|
|
69
69
|
# :strength => :domain)
|
70
70
|
class DisjunctionStub < Gecode::Constraints::Bool::CompositeStub
|
71
71
|
def constrain_equal(variable, params, constrain)
|
72
|
-
enum
|
72
|
+
enum = @params[:lhs]
|
73
73
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
74
|
+
@model.add_interaction do
|
75
|
+
if variable.respond_to? :bind
|
76
|
+
bound = variable.bind
|
77
|
+
else
|
78
|
+
bound = variable ? 1 : 0
|
79
|
+
end
|
80
|
+
Gecode::Raw::rel(@model.active_space, Gecode::Raw::BOT_OR,
|
81
|
+
enum.to_bool_var_array, bound, *propagation_options)
|
78
82
|
end
|
79
|
-
Gecode::Raw::bool_or(@model.active_space, enum.to_bool_var_array,
|
80
|
-
bound, strength)
|
81
83
|
end
|
82
84
|
end
|
83
85
|
end
|
@@ -33,13 +33,14 @@ module Gecode::Constraints::Int::Arithmetic #:nodoc:
|
|
33
33
|
# x.abs.must_be.in(5..7, :reify => bool, :strength => :value)
|
34
34
|
class AbsExpressionStub < Gecode::Constraints::Int::CompositeStub
|
35
35
|
def constrain_equal(variable, params, constrain)
|
36
|
-
lhs
|
36
|
+
lhs = @params[:lhs]
|
37
37
|
if constrain
|
38
38
|
bounds = [lhs.min.abs, lhs.max.abs]
|
39
39
|
variable.must_be.in bounds.min..bounds.max
|
40
40
|
end
|
41
41
|
|
42
|
-
Gecode::Raw::abs(@model.active_space, lhs.bind, variable.bind,
|
42
|
+
Gecode::Raw::abs(@model.active_space, lhs.bind, variable.bind,
|
43
|
+
*propagation_options)
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -56,7 +57,7 @@ module Gecode::Constraints::Int::Arithmetic #:nodoc:
|
|
56
57
|
# (x*y).must_be.less_than(17, :reify => bool, :strength => :domain)
|
57
58
|
class MultExpressionStub < Gecode::Constraints::Int::CompositeStub
|
58
59
|
def constrain_equal(variable, params, constrain)
|
59
|
-
lhs, lhs2
|
60
|
+
lhs, lhs2 = @params.values_at(:lhs, :var)
|
60
61
|
if constrain
|
61
62
|
a_min = lhs.min; a_max = lhs.max
|
62
63
|
b_min = lhs2.min; b_max = lhs2.max
|
@@ -65,7 +66,7 @@ module Gecode::Constraints::Int::Arithmetic #:nodoc:
|
|
65
66
|
end
|
66
67
|
|
67
68
|
Gecode::Raw::mult(@model.active_space, lhs.bind, lhs2.bind,
|
68
|
-
variable.bind,
|
69
|
+
variable.bind, *propagation_options)
|
69
70
|
end
|
70
71
|
end
|
71
72
|
end
|
@@ -34,12 +34,13 @@ module Gecode::Constraints::Int
|
|
34
34
|
# x.must_not_be.in(-5...5, :reify => bool, :strength => :value)
|
35
35
|
class RangeDomainConstraint < Gecode::Constraints::ReifiableConstraint
|
36
36
|
def post
|
37
|
-
var, domain, reif_var
|
38
|
-
|
37
|
+
var, domain, reif_var = @params.values_at(:lhs, :domain, :reif)
|
38
|
+
|
39
39
|
(params = []) << var.bind
|
40
40
|
params << domain.first << domain.last
|
41
41
|
params << reif_var.bind if reif_var.respond_to? :bind
|
42
|
-
params
|
42
|
+
params.concat propagation_options
|
43
|
+
|
43
44
|
Gecode::Raw::dom(@model.active_space, *params)
|
44
45
|
end
|
45
46
|
negate_using_reification
|
@@ -61,16 +62,14 @@ module Gecode::Constraints::Int
|
|
61
62
|
# x.must_not_be.in(-[5,6,7,17], :reify => bool, :strength => :value)
|
62
63
|
class EnumDomainConstraint < Gecode::Constraints::ReifiableConstraint
|
63
64
|
def post
|
64
|
-
|
65
|
-
|
66
|
-
var, domain, reif_var, strength = @params.values_at(:lhs, :domain,
|
67
|
-
:reif, :strength)
|
65
|
+
var, domain, reif_var = @params.values_at(:lhs, :domain, :reif)
|
68
66
|
|
69
67
|
(params = []) << var.bind
|
70
68
|
params << Gecode::Constraints::Util.constant_set_to_int_set(domain)
|
71
69
|
params << reif_var.bind if reif_var.respond_to? :bind
|
72
|
-
params
|
73
|
-
|
70
|
+
params.concat propagation_options
|
71
|
+
|
72
|
+
Gecode::Raw::dom(@model.active_space, *params)
|
74
73
|
end
|
75
74
|
negate_using_reification
|
76
75
|
end
|
@@ -141,8 +141,8 @@ module Gecode
|
|
141
141
|
# (x + y)*10.must_not_be.greater_than(x*3, :reify => bool, :strength => :domain)
|
142
142
|
class LinearConstraint < Gecode::Constraints::ReifiableConstraint
|
143
143
|
def post
|
144
|
-
lhs, rhs, relation_type, reif_var
|
145
|
-
:rhs, :relation_type, :reif
|
144
|
+
lhs, rhs, relation_type, reif_var =
|
145
|
+
@params.values_at(:lhs, :rhs, :relation_type, :reif)
|
146
146
|
reif_var = reif_var.bind if reif_var.respond_to? :bind
|
147
147
|
if rhs.respond_to? :to_minimodel_lin_exp
|
148
148
|
rhs = rhs.to_minimodel_lin_exp
|
@@ -152,9 +152,11 @@ module Gecode
|
|
152
152
|
|
153
153
|
final_exp = (lhs.to_minimodel_lin_exp - rhs)
|
154
154
|
if reif_var.nil?
|
155
|
-
final_exp.post(@model.active_space, relation_type,
|
155
|
+
final_exp.post(@model.active_space, relation_type,
|
156
|
+
*propagation_options)
|
156
157
|
else
|
157
|
-
final_exp.post(@model.active_space, relation_type, reif_var
|
158
|
+
final_exp.post(@model.active_space, relation_type, reif_var,
|
159
|
+
*propagation_options)
|
158
160
|
end
|
159
161
|
end
|
160
162
|
end
|
@@ -199,16 +201,16 @@ module Gecode
|
|
199
201
|
class SimpleRelationConstraint < Gecode::Constraints::ReifiableConstraint
|
200
202
|
def post
|
201
203
|
# Fetch the parameters to Gecode.
|
202
|
-
lhs, relation, rhs, reif_var
|
203
|
-
:relation_type, :element, :reif
|
204
|
+
lhs, relation, rhs, reif_var =
|
205
|
+
@params.values_at(:lhs, :relation_type, :element, :reif)
|
204
206
|
|
205
207
|
rhs = rhs.bind if rhs.respond_to? :bind
|
206
208
|
if reif_var.nil?
|
207
209
|
Gecode::Raw::rel(@model.active_space, lhs.bind, relation, rhs,
|
208
|
-
|
210
|
+
*propagation_options)
|
209
211
|
else
|
210
212
|
Gecode::Raw::rel(@model.active_space, lhs.bind, relation, rhs,
|
211
|
-
reif_var.bind,
|
213
|
+
reif_var.bind, *propagation_options)
|
212
214
|
end
|
213
215
|
end
|
214
216
|
end
|
@@ -33,13 +33,13 @@ module Gecode::Constraints::IntEnum::Arithmetic #:nodoc:
|
|
33
33
|
# :strength => :domain)
|
34
34
|
class MaxExpressionStub < Gecode::Constraints::Int::CompositeStub
|
35
35
|
def constrain_equal(variable, params, constrain)
|
36
|
-
enum
|
36
|
+
enum = @params[:lhs]
|
37
37
|
if constrain
|
38
38
|
variable.must_be.in enum.domain_range
|
39
39
|
end
|
40
40
|
|
41
41
|
Gecode::Raw::max(@model.active_space, enum.to_int_var_array,
|
42
|
-
variable.bind,
|
42
|
+
variable.bind, *propagation_options)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -60,13 +60,13 @@ module Gecode::Constraints::IntEnum::Arithmetic #:nodoc:
|
|
60
60
|
# :strength => :domain)
|
61
61
|
class MinExpressionStub < Gecode::Constraints::Int::CompositeStub
|
62
62
|
def constrain_equal(variable, params, constrain)
|
63
|
-
enum
|
63
|
+
enum = @params[:lhs]
|
64
64
|
if constrain
|
65
65
|
variable.must_be.in enum.domain_range
|
66
66
|
end
|
67
67
|
|
68
68
|
Gecode::Raw::min(@model.active_space, enum.to_int_var_array,
|
69
|
-
variable.bind,
|
69
|
+
variable.bind, *propagation_options)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
end
|
@@ -83,13 +83,13 @@ module Gecode::Constraints::IntEnum
|
|
83
83
|
# set_enum.must.channel int_enum
|
84
84
|
class ChannelConstraint < Gecode::Constraints::Constraint
|
85
85
|
def post
|
86
|
-
lhs, rhs
|
86
|
+
lhs, rhs = @params.values_at(:lhs, :rhs)
|
87
87
|
|
88
88
|
lhs = lhs.to_int_var_array
|
89
89
|
if rhs.respond_to? :to_int_var_array
|
90
90
|
# Int var array.
|
91
91
|
Gecode::Raw::channel(@model.active_space, lhs, rhs.to_int_var_array,
|
92
|
-
|
92
|
+
*propagation_options)
|
93
93
|
else
|
94
94
|
# Set var array, no strength.
|
95
95
|
Gecode::Raw::channel(@model.active_space, lhs, rhs.to_set_var_array)
|