在CPLEX OPL中,如何求解由多个连续决策变量的乘积组成的目标函数?

编程语言 2026-07-07

我想用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章