2016-09-28 217 views
0

我试图执行使用Pyomo优化,但我在努力定义约束了这样的问题:混合整数规划:约束定义与if语句,包括变量

if Variable 1 > Parameter 
    Variable 2 = Variable 1 - Parameter 
else skip constraint (?) 

if Parameter > Variable 1 
    Variable 3 = Variable 4 -(Parameter - Variable 1) 
else skip constraint (?) 

不知何故工作的呢? 关于跳过限制:我不太确定是否有必要。

基本上,我只想表达变量和参数之间的关系。

我在这里看到类似的东西(Mixed integer programming: variable assignment per condition (if then else)),但我无法将其调整到我的问题。

在此先感谢!

+0

这有点不清楚,你到底在做什么,看起来你缺少一些基础知识。如果要将某个变量约束为某个半边界或取决于另一个值的值,则需要将该约束(将转换为线性方程)始终添加到模型中(否则解算器无法关于这个的原因)。这意味着,你的**跳过约束**没有任何意义。这种伪代码看起来更像是基于约束编程的方法,而不是混合整数编程。分解你的任务:添加二元指标约束和大M值。 – sascha

+0

我基本上刚刚开始使用约束等,所以我想我想一次纳入太多。 谢谢,我会研究你提到的两种方法。 – AWi

+0

从[this]开始(http://download.aimms.com/aimms/download/manuals/AIMMS3OM_LinearProgrammingTricks.pdf)。解释指标约束和大M方法。 – sascha

回答

0

我们对模型的其余部分知之甚少,所以我的答案很可能大有瑕疵。

x1>p => x2=x1-p可以表示为:

y1=x1-p 
-d*M <= y1 <= (1-d)*M 
y1-d*M <= x2 <= y1+d*M 
d in {0,1} 

这里M是一个大常数(我们需要找到良好的价值观,这些大男款)。与其他条件类似。

在几乎所有情况下,我们都可以使用更多的模型其余部分的知识来简化这一过程(大量)。所以在实践中你不会使用我的一般公式。

+0

感谢您的回答。我刚才试图将你的格式应用到实际的代码中,但我没有完全理解big_M的功能。 – AWi

+0

big-M是开启或关闭方程所需的大常量。 –

+0

好吧,清除它。谢谢! – AWi