【发布时间】:2014-12-14 03:03:17
【问题描述】:
我正在做一个优化项目,为此我正在使用 AMPL 和 CPLEX。 我的问题有点简单,但如果不使用一些额外的“无用”变量,我就无法做到。
所以假设我有以下代码:
set A:= a b c;
set B:= 1 2 3;
var x{A,B} binary;
现在我想在 2 个条件下处理一个约束,例如:
if x[a,1] = 1 and x[a,2] = 1 then (some constraint).
很遗憾,CPLEX 不允许我使用该语法:
s.t const: x[a,1] = 1 and x[a,2] = 1 ==> (some constraint)
它说“逻辑约束 _slogcon[1] 不是指标约束。
现在我的做法是引入一个新变量。
var dummyVar{A,A,B,B} binary;
如果 x[a,1] = 1 和 x[a,2] = 1,则此变量等于 1。
subject to condition: 2*dummyVar[a,a,1,2] <= x[a,1] + x[a,2]
我的问题在于我正在使用的大型模型。就我而言,这个 dummyVar 不仅仅是一个小集合,它包含一组集合。当 AMPL 处理代码(将其转换为由 CPLEX 读取)时,由于内存不足而崩溃。
有什么简单的方法可以写出类似的东西
s.t const: x[a,1] = 1 and x[a,2] = 1 ==> (some constraint)
不引入任何额外的变量?提前致谢。
【问题讨论】:
标签: optimization conditional-statements mathematical-optimization cplex ampl