资源 ;路径 ;位置类型CPLEX(默认)无法提取表达式

资源 ;路径 ;位置类型CPLEX(默认)无法提取表达式,cplex,opl,Cplex,Opl,我得到了这个错误,“CPLEX(默认)无法提取表达式”,但是当我删除了object函数中的log函数时,错误被解决了。我的代码如下: range k=1..4; range n=1..4; //inputs float p[n][k]=...; float M=...; float B=...; //variables dvar boolean w[n]; //objective maximize (sum(k in k) log(sum(n in n)(w[n]*exp((-1*

我得到了这个错误,“CPLEX(默认)无法提取表达式”,但是当我删除了object函数中的log函数时,错误被解决了。我的代码如下:

range k=1..4;
range n=1..4;
//inputs
float p[n][k]=...;
float M=...;
float B=...;


//variables
dvar boolean w[n];
//objective



maximize  (sum(k in  k) log(sum(n in n)(w[n]*exp((-1*p[n][k]))))) ;

//constraints
subject to
{   
  sum (n in n) w[n]<= 2 ;
}
范围k=1..4;
范围n=1..4;
//投入
浮动p[n][k]=。。。;
浮动M=。。。;
浮动B=。。。;
//变数
dvar布尔w[n];
//客观的
最大化(sum(k/k)log(sum(n/n)(w[n]*exp(-1*p[n][k]))));
//约束条件
从属于
{   

sum(n in n)w[n]的确,CPLEX不支持log,但CP可以处理这个问题。 你能补充一下吗

using CP;
在模型的开头?
关于

您应该为循环使用不同的名称,即
sum(k中的k)
应该用另一个名称替换第一个k,因为您已经将第二个k声明为一个范围。例如:
sum(k中的l)

CPLEX仅限于线性表达式,外加一些选定的非线性表达式,如二次函数。我认为不支持“log”。