Поддерживает ли Cplex использование ln или экспоненциальной функции для переменной решения?

Я пытаюсь написать ограничения с помощью функций ln и exp, но получил сообщение об ошибке, что Cplex не может извлечь выражение.

forall (t in time)
   Gw_C["Mxr"] == 20523 + 17954 * ln(maxl(pbefore[t]));

  Ed_c ["RC"]== 0.0422* exp(0.1046* (maxl(pbefore[t])));
   
   Gw_C["RC"] == 3590* pow((maxl(pbefore[t]), 0.6776);

Есть ли другой способ кодировать эти ограничения на cplex? Спасибо


person Mahmoud Amin    schedule 15.10.2020    source источник


Ответы (1)


Вы можете использовать exp и log, если полагаетесь на программирование ограничений в CPLEX:

using CP;

int scale=1000;

dvar int scalex in 1..10000;
dexpr float x=scalex/scale;

maximize x;

subject to
{
  exp(x)<=100;
}

execute
{
  writeln("x=",x);
}

отлично работает и дает:

x=4.605

Но с математическим программированием в CPLEX вы не можете так использовать exp.

Что вы можете сделать вместо этого, выполнив линеаризацию.

person Alex Fleischer    schedule 15.10.2020
comment
Большое спасибо, Алекс - person Mahmoud Amin; 17.10.2020