Переменные решения с помощью 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;
}