这段代码出了什么问题?:
SolverContext sc = SolverContext.GetContext();
Model m = sc.CreateModel();
m.AddDecision(new Decision(Domain.IntegerNonnegative, "a"));
m.AddDecision(new Decision(Domain.IntegerNonnegative, "b"));
m.AddConstraint(null, "a < 2");
m.AddConstraint(null, "b == If[a == 2, 2, 1]");
var sol = sc.Solve();
Console.WriteLine(sol.GetReport());
解算器冻结,不会给出任何结果。我正在和If
操作员一起玩,试图看看它是如何工作的,但似乎没有按照我的预期行事。不确定我是否以正确的方式使用它(我想说,如果a
等于2
,则b
必须等于2
,否则1
)。
我也试过
m.AddConstraint(null, "If[a == 2, b == 2, b == 1]");
具有相同的结果。
答案 0 :(得分:2)
似乎应用于此问题的解算器受Decision
域范围的阻碍。如果将域限制为例如整数范围[0,10]:
m.AddDecision(new Decision(Domain.IntegerRange(0, 10), "a"));
m.AddDecision(new Decision(Domain.IntegerRange(0, 10), "b"));
可以很快地生成问题的可行解决方案。换句话说,约束b == If[a == 2, 2, 1]
完全有效。
a < 2
,而在第二个约束测试条件a == 2
中,这有点奇怪。但我认为你现在处于试验阶段......