在CPLEX OPL中,如何求解由多个连续决策变量的乘积组成的目标函数?
我想用CPLEX OPL解决下面的问题。不过,我在求解时遇到了一个错误,因为目标函数不是凸的。如何求解这个问题以获得全局最优解?
int T = 4;
range TRange = 1..T;
int ncs=2;
range crange=1..ncs;
int nv=3;
range vrange=1..nv;
dvar float+ x[TRange][vrange][crange];
dvar float+ y[TRange][crange];
dvar float+ w[TRange][crange];
dvar float+ s[TRange][crange];
minimize sum(t in TRange, c in crange, v in vrange)(x[t][v][c]*y[t][c]+s[t][c]*w[t][c]);
subject to{
forall(t in TRange, c in crange, v in vrange){
0<=x[t][v][c]<=50;
1.2*w[t][c]<=y[t][c];
y[t][c]<=2.5*w[t][c];
1.1 <= w[t][c]<=3.3;
0<=s[t][c]<=300;
}
}
解决方案
你可以写出下面这个模型,它可以正常工作。
execute
{
cplex.optimalitytarget=3;
}
int T = 4;
range TRange = 1..T;
int ncs=2;
range crange=1..ncs;
int nv=3;
range vrange=1..nv;
dvar float+ x[TRange][vrange][crange];
dvar float+ y[TRange][crange];
dvar float+ w[TRange][crange];
dvar float+ s[TRange][crange];
minimize sum(t in TRange, c in crange, v in vrange)(x[t][v][c]*y[t][c]+s[t][c]*w[t][c]);
subject to{
forall(t in TRange, c in crange, v in vrange){
0<=x[t][v][c]<=50;
1.2*w[t][c]<=y[t][c];
y[t][c]<=2.5*w[t][c];
1.1 <= w[t][c]<=3.3;
0<=s[t][c]<=300;
}
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。