使用CPLEX解析程序的条件语句

时间:2013-05-10 17:27:03

标签: optimization ampl content-delivery-network

是否可以在AMPL条件语句中使用,例如“if(...)then ...”?下面是我试图做的。

subject to c1a {k in K, o in O, n in N: n!=t[k,o]}:
sum{e in E}
   (a[n,e]*x[e,k,o]) -
sum{e in E}
   (b[n,e]*x[e,k,o]) =
            (if (r[n,k]==1 and f[n,o]==1) 
                then d[k,o]*(1-f[k,o])
                else 0);

我的评论回复给我的错误如下:

CPLEX 11.2.0: Constraint _scon[1] is not convex quadratic since it is an equality constraint.

你有什么想法来解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

如果条件(if-then-elseif之间的表达式)不包含变量,则可以对CPLEX使用then表达式。 CPLEX还支持所谓的“指标约束”(有关详细信息,请参阅here),它使用蕴涵运算符(==>)并且与if-then-else有些类似,但允许条件中的变量。 / p>

关于您的示例,不清楚哪些名称对应于变量以及哪些名称对应于约束,但错误表明问题不是由if-then-else引起的,而是因为您在不受支持的形式中存在二次约束CPLEX(有关接受表单的信息,请参阅ILOG AMPL CPLEX System User's Guide第33页的二次约束一节)。

答案 1 :(得分:1)

你可以改变你的求解器cplex只处理凸和二次约束,它默认用于Ampl分辨率,所以你可以尝试重新加载你的mod和dat文件,然后选择另一个求解器如下:

ampl: option solver " ipopt";
ampl: solve;

ampl: option solver " couenne";
ampl: solve;