我可以获得IloNumVarArray的值吗?关于目标函数的定义

Can i get the value of IloNumVarArray? about definition of objective function

本文关键字:目标 定义 函数 于目标 IloNumVarArray 我可以      更新时间:2023-10-16

我正在使用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"的值吗?

根据定义,决策变量的值直到求解后才知道,因此(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_ppositive只出现在目标函数中,如果pp[i]为正,它将取pp[i]的值,如果pp[i]为负,则取0的值。