Linear programming AMPL中的条件约束

Linear programming AMPL中的条件约束,linear-programming,ampl,Linear Programming,Ampl,我正在尝试使用AMPL多次运行单个模型。所有变量和参数都有一个时间维度,因为它们的值随着模型的每次迭代而变化 为了能够迭代地解决问题,我使用问题语句定义了模型 problem MIQP_Complex_CR{t in T}: Dev, {i in A} dx[i,t], {i in A} dy[i,t], {i in A} uarg[i,t], {i in A} larg[i,t],{(i,j) in

我正在尝试使用AMPL多次运行单个模型。所有变量和参数都有一个时间维度,因为它们的值随着模型的每次迭代而变化

为了能够迭代地解决问题,我使用问题语句定义了模型

problem MIQP_Complex_CR{t in T}: Dev,
                       {i in A} dx[i,t], {i in A} dy[i,t], {i in A} uarg[i,t], 
                       {i in A} larg[i,t],{(i,j) in P} vrx[i,j,t], 
                       {(i,j) in P} vry[i,j,t], {(i,j) in P} z[i,j,t], 
                       {(i,j) in P} bin11[i,j,t], {(i,j) in P} bin12[i,j,t],
                       {(i,j) in P} bin311[i,j,t], {(i,j) in P} bin312[i,j,t], 
                       {(i,j) in P} bin321[i,j,t], {(i,j) in P} bin322[i,j,t], 
                       {(i,j) in P} bin331[i,j,t], {(i,j) in P} bin332[i,j,t], 
                       {(i,j) in P} bin341[i,j,t], {(i,j) in P} bin342[i,j,t],                  
                       {(i,j) in P} cvrx[i,j,t], {(i,j) in P} cvry[i,j,t];
有一组数字1..n。集P是A中i小于j的有序as i,j的简单成员。有一些约束(如上面的
bin311
)只有在变量满足某些条件时才被激活。因此,每个约束将仅为某些变量调用。比如说,

s.t. bin342{(i,j) in P, t in T : xrRoll[i,j,t] < 0 and yrRoll[i,j,t] < 0} : -2*a[i,j,t]*vrx[i,j,t] + vry[i,j,t]*(c[i,j,t] + sqrt(c[i,j,t]**2 - 4*a[i,j,t]*b[i,j,t])) <= z[i,j,t]*Mbin342[i,j,t];

s.t.bin342{(i,j)in P,t in t:xroll[i,j,t]<0和yrRoll[i,j,t]<0}:-2*a[i,j,t]*vrx[i,j,t]+vry[i,j,t]*(c[i,j,t]+sqrt(c[i,j,t]**2-4*a[i,j,t]*b[i,j,t]*b[i,j,t])早些时候,我通过设置t=0而不是使用循环来检查代码的一次迭代隔离迭代并进一步缩小问题的原因。事实证明,“binxyz”约束中的某些部分,如[i,j,t]没有被Find and Replace函数识别为[i,j,t]。我觉得我错过了一些非常简单的东西,但我不知道它是什么。我对代码做了一些更改,现在它可以工作了。代替编写问题MIQP_Complex_CR{t in t}:Dev,{i in A}dx[i,t],{i in A}dy[i,t]。。。如果我简单地把问题MIQP_Complex_CR{t写成t}:Dev,dx,dy,。。这样就不会再有错误了。我现在可以扩展代码来执行多次迭代,并且每次都有一个目标值。我仍然将此作为评论发布,因为我不知道为什么会发生这种情况。答案必须提供一些解释。