17 using System.Collections.
Generic;
25 Solver solver = GetSolver(vars);
26 return solver.MakeAllDifferent(vars);
32 Solver solver = GetSolver(vars);
33 return solver.MakeAllowedAssignments(vars, tuples);
38 Solver solver = GetSolver(vars);
39 return solver.MakeSum(vars);
44 Solver solver = GetSolver(cts);
45 IntVar[] vars =
new IntVar[cts.Length];
46 for (
int i = 0; i < cts.Length; ++i)
48 vars[i] = cts[i].
Var();
50 return solver.MakeSum(vars);
54 Solver solver = GetSolver(exprs);
55 IntVar[] vars =
new IntVar[exprs.Length];
56 for (
int i = 0; i < exprs.Length; ++i)
58 vars[i] = exprs[i].Var();
60 return solver.MakeSum(vars);
66 Solver solver = GetSolver(vars);
67 return solver.MakeScalProd(vars, coefs);
73 Solver solver = GetSolver(vars);
74 return solver.MakeScalProd(vars, coefs);
78 private static Solver GetSolver(IntVar[] vars)
80 if (vars ==
null || vars.Length <= 0)
81 throw new ArgumentException(
"Array <vars> cannot be null or empty");
83 return vars[0].solver();
86 private static Solver GetSolver(IntExpr[] expressions)
88 if (expressions ==
null || expressions.Length <= 0)
89 throw new ArgumentException(
"Array <expr> cannot be null or empty");
91 return expressions[0].solver();
93 private static Solver GetSolver(IConstraintWithStatus[] cts)
95 if (cts ==
null || cts.Length <= 0)
96 throw new ArgumentException(
"Array <cts> cannot be null or empty");
98 return cts[0].solver();
101 return index.solver().MakeElement(array, index.Var());
106 Solver solver = GetSolver(vars);
107 return solver.MakeMin(vars);
112 Solver solver = GetSolver(vars);
113 return solver.MakeMax(vars);
118 Solver solver = GetSolver(vars);
119 return solver.MakeCount(vars, value, count);
126 Solver solver = GetSolver(vars);
127 return solver.MakeCount(vars, value, count.Var());
133 Solver solver = GetSolver(vars);
134 return solver.MakeDistribute(vars, values, cards);
140 Solver solver = GetSolver(vars);
141 return solver.MakeDistribute(vars, values, cards);
146 Solver solver = GetSolver(vars);
147 return solver.MakeDistribute(vars, cards);
154 Solver solver = GetSolver(vars);
155 return solver.MakeDistribute(vars, card_min, card_max, card_size);
158 IntTupleSet transitions,
160 long[] final_states) {
161 Solver solver = GetSolver(vars);
162 return solver.MakeTransitionConstraint(vars,
168 IntTupleSet transitions,
170 int[] final_states) {
171 Solver solver = GetSolver(vars);
172 return solver.MakeTransitionConstraint(vars,
179 public static IntVar[]
Flatten(
this IntVar[,] vars)
181 int rows = vars.GetLength(0);
182 int cols = vars.GetLength(1);
183 IntVar[] flat =
new IntVar[cols * rows];
184 for(
int i = 0; i < rows; i++) {
185 for(
int j = 0; j < cols; j++) {
186 flat[i * cols + j] = vars[i, j];
195 public partial class IntVarVector: IDisposable, System.Collections.IEnumerable
197 , System.Collections.Generic.IList<IntVar>
203 foreach (IntVar element
in inVal) {
211 var outVal=
new IntVar[inVal.Count];
212 inVal.CopyTo(outVal);
219 , System.Collections.Generic.IList<SearchMonitor>
225 foreach (SearchMonitor element
in inVal) {
233 var outVal=
new SearchMonitor[inVal.Count];
234 inVal.CopyTo(outVal);
241 , System.Collections.Generic.IList<DecisionBuilder>
247 foreach (DecisionBuilder element
in inVal) {
255 var outVal=
new DecisionBuilder[inVal.Count];
256 inVal.CopyTo(outVal);
263 , System.Collections.Generic.IList<IntervalVar>
269 foreach (IntervalVar element
in inVal) {
277 var outVal=
new IntervalVar[inVal.Count];
278 inVal.CopyTo(outVal);
285 , System.Collections.Generic.IList<SequenceVar>
291 foreach (SequenceVar element
in inVal) {
299 var outVal=
new SequenceVar[inVal.Count];
300 inVal.CopyTo(outVal);
307 , System.Collections.Generic.IList<LocalSearchOperator>
313 foreach (LocalSearchOperator element
in inVal) {
321 var outVal=
new LocalSearchOperator[inVal.Count];
322 inVal.CopyTo(outVal);
329 , System.Collections.Generic.IList<LocalSearchFilter>
335 foreach (LocalSearchFilter element
in inVal) {
343 var outVal=
new LocalSearchFilter[inVal.Count];
344 inVal.CopyTo(outVal);
351 , System.Collections.Generic.IList<SymmetryBreaker>
357 foreach (SymmetryBreaker element
in inVal) {
365 var outVal=
new SymmetryBreaker[inVal.Count];
366 inVal.CopyTo(outVal);