CPLEX 中的函数最多只能求解二次问题。如果一个成本函数是二次的,并且它应该乘以一个承诺向量,那么它就变成了一个三阶方程。很多论文都解释了如何将二次函数转换为阶梯函数,数学方法很容易理解。但是我不知道如何将传输的函数放入 Cplex 中的 cplexmiqp() 中,因为系数矩阵很难确定。谁能告诉我如何将这个问题实现到 cplex 函数中,如果可能的话,一个示例程序会很有帮助!谢谢!
问问题
1296 次
1 回答
0
您不要将成本与二进制变量相乘。相反,您使用逻辑含义对其进行建模。
不要写 d*P^2 其中 d 是二进制且 P 是连续变量,而是引入一个新变量,我们称其为 B。如果 d 为 0,则 B 应为零,否则应等于 P。你的新目标是 B^2。唯一剩下的就是对逻辑进行建模
d = 0 implies B = 0
d = 1 implies B = P
这通常使用 big-M 技术完成。如果你知道 P 是非负的,并且从上面限制为 100,你可以把它写成
0 <= B <= 100*d
-100*(1-d) <= P-B <= 100*(1-d)
我可以提供的唯一示例代码是基于 MATLAB 的建模层 YALMIP 中的一个示例,可用于连接 cplex http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Examples.UnitCommitment
于 2013-11-05T14:36:21.847 回答