假设我想仅使用AND语句和子句重写A< = MAX(B,100)。 < =表示更小或相等。 A和B是变量。有可能吗?
我似乎无法在这个人为的例子中使用微软解决方案基础的OR,这是我在工作中遇到的问题的简化:
决定x =新决定(Domain.Real,“x”); model.AddDecisions(X);
Decision y = new Decision(Domain.Real, "y");
model.AddDecisions(y);
// Add a constraint
// x <= MAX(y,200);
model.AddConstraints("zero", x + Math.Sin(44) == 33.2);
model.AddConstraints("one", y + x == 5);
model.AddConstraints("three", x <= -y);
model.AddConstraints("four", x <= 200);
// Solve the problem
context.Solve();
// Display the results
Console.WriteLine("x: {0}", x);
Console.WriteLine("y: {0}", y);
答案 0 :(得分:0)
由于不允许使用MAX,请尝试“NOT(x&gt; a)和NOT(x&gt; 100)”。
答案 1 :(得分:0)
这会有效吗?
答案 2 :(得分:0)
B
是非否定的吗?然后MAX
是无穷大范数,因为你允许乘法,你可以近似:
A*A*A*A*A*A <= B*B*B*B*B*B + 100*100*100*100*100*100
如果六范数对于无穷大范数不够好,则添加更多项。
此外,可以调整链接的解决方案,甚至不需要MIP:
A <= B + M1
A <= 100 + M2
M1*M2 <= 0