Optimization 使用CPLEX可调用库时如何将lp更改为mip
我已经使用CPLEX可调用库(在VS2010中)解决了一个lp问题。lp如下所示:Optimization 使用CPLEX可调用库时如何将lp更改为mip,optimization,linear-programming,cplex,integer-programming,Optimization,Linear Programming,Cplex,Integer Programming,我已经使用CPLEX可调用库(在VS2010中)解决了一个lp问题。lp如下所示: Maximize obj: x1 + 2 x2 + 3 x3 Subject To c1: - x1 + x2 + x3 <= 20 c2: x1 - 3 x2 + x3 <= 30 Bounds 0 <= x1 <= 40 End 在代码中,没有将任何决策变量声明为整数。这就是为什么当你试图使用MIP解算器解决问题时,cplex会抱怨。您正在进行
Maximize
obj: x1 + 2 x2 + 3 x3
Subject To
c1: - x1 + x2 + x3 <= 20
c2: x1 - 3 x2 + x3 <= 30
Bounds
0 <= x1 <= 40
End
在代码中,没有将任何决策变量声明为整数。这就是为什么当你试图使用MIP解算器解决问题时,cplex会抱怨。您正在进行逐列建模,并且CPXaddcols没有变量类型的参数,但是您可以使用或。因为您的决策变量的边界都大于1,所以您要查找的是“I”变量类型,而不是二进制的“B”
char *ctype;
ctype = (char *) malloc(cur_numcols * sizeof(char);
for (j = 0; j < cur_numcols; j++) {
ctype[j] = 'I';
}
status = CPXcopyctype(env, lp, ctype);
/* verify status */
status = CPXmipopt (env, lp);
/* verify status */
char*ctype;
ctype=(char*)malloc(cur_numcols*sizeof(char);
对于(j=0;j
char *ctype;
ctype = (char *) malloc(cur_numcols * sizeof(char);
for (j = 0; j < cur_numcols; j++) {
ctype[j] = 'I';
}
status = CPXcopyctype(env, lp, ctype);
/* verify status */
status = CPXmipopt (env, lp);
/* verify status */