Могу ли я получить значение IloNumVarArray? об определении целевой функции

Я использую CPLEX, чтобы решить MIP. Моя цель — минимизировать сумму значений решений, которые являются положительными. Поэтому мне нужно судить о значении решения, когда я определяю целевую функцию.
например:

    IloNumVarArray pp(env);
for (int i=0;i<N;i++)
{
pp.add(IloNumVar(env, -50.0, 50.0));
}
IloExpr obj(env);
for (int in=0;in<N;in++)
{
if (pp[in]>0)   ///error:this expression is wrong, how to judge the value? ///
obj+=pp[in];
}
model.add(IloMinimize(env, obj));
obj.end();

как я могу правильно выразить это? Могу ли я получить значение «pp» при определении целевой функции?

1

Решение

По определению, значение переменной решения неизвестно до тех пор, пока вы не выполните решение, поэтому (pp [i]> 0) возвращает объект IloRange, а не логическое значение, поэтому вы получаете ошибку во время компиляции.

Чтобы минимизировать положительные части переменной pp [i], вам нужно определить вторую переменную, которая отлична от нуля, но больше, чем pp [i].

IloNumVarArray pp(env, N, -50, 50, ILOFLOAT);
IloNumVarArray pp_positive(env, N, 0, IloInfinity, ILOFLOAT);
for (int i=0; i<N; ++i)
{
model.add(pp[i] - pp_positive[i] <= 0);
}
model.add(IloMinimize(env, IloSum(pp_postiive));

Поскольку pp_positive появляется только в целевой функции, он примет значение pp [i], если pp [i] положительно, и значение 0, если pp [i] отрицательно.

1

Другие решения

Других решений пока нет …