CPLEX OPL, использующий переменную решения как float в алгоритме программирования ограничений - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь запустить следующий код, но в dvar float есть ошибка +

using CP;
int rows=3;
int columns=3;
range para=1..rows*columns;
float model1[para]=...;
dvar float+ model0[para];
maximize 
sum(p in para) model0[p]*(lg(model0[p]/model1[p]));
  subject to{
    c1:
    sum(p in para)
    model0[p]==3.0;    
    }

1 Ответ

0 голосов
/ 11 октября 2019

Переменные решения с помощью CPOptimizer не могут быть плавающими.

Как видно из примера floatexpr.mod, вы можете использовать dexpr с плавающей точкой для использования десятичных значений, вычисленных из целочисленных переменных решения.

В вашем случае:

using CP;

execute
{
cp.param.timelimit=10;
}

int scale=1000;
int rows=3;
int columns=3;
range para=1..rows*columns;
float model1[p in para]=p/10;

dvar int+ scalemodel0[para];
dexpr  float model0[p in para]=scalemodel0[p]/scale;
maximize 
sum(p in para) model0[p]*(lg(model0[p]/model1[p]));
  subject to{
    c1:
    sum(p in para)
    model0[p]==3.0;    
    } 
...