我是一名使用 CPLEX 学习优化的学生。 我创建了一个简单的逐步示例,但我对结果有一些疑问。
dvar float x;
dvar float y;
dexpr float z= piecewise {0->0; 10->0; 0->10; 5->10; 0->20; 5->20; 0} (1,10) x;
dexpr float goal = y+z;
minimize goal;
subject to {
9<=x;
x<=18;
4<=y;
y<=10;
}
在上面的公式中,我预计 x 和 y 分别为 9 和 4,解得到的预期结果为 14。 (当 x 为 9 时,z 变为 10,因此 y+z=4+10=14。) 但是,为什么决策变量将 x 显示为 10,而目标显示为 19?
非常感谢您的回复。谢谢你。
你的分段是不连续的,这意味着对于 10,结果是 10 或 15
dvar float x;
dvar float y;
dvar float z;
dvar float goal;
pwlFunction f=piecewise {0->0; 10->0; 0->10; 5->10; 0->20; 5->20; 0} (1,10);
minimize goal;
subject to {
z== f(x);
goal== y+z;
9<=x;
x<=18;
4<=y;
y<=10;
}
execute
{
writeln(z);
writeln(f(x));
}
为了删除此选择,您可以做的是写入
(x==10) => (z==15);
然后
dvar float x;
dvar float y;
dvar float z;
dvar float goal;
pwlFunction f=piecewise {0->0; 10->0; 0->10; 5->10; 0->20; 5->20; 0} (1,10);
minimize goal;
subject to {
z== f(x);
goal== y+z;
9<=x;
x<=18;
4<=y;
y<=10;
(x==10) => (z==15);
}
execute
{
writeln(z);
writeln(f(x));
}
给予
10
10
你得到x=9