gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:58 26 4
gpt4 key购买 nike

我正在使用 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 对象而不是 bool 值,因此您会遇到编译时错误。

要最小化变量 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]的值,如果pp[i]为负则取0。

关于c++ - 我可以获得 IloNumVarArray 的值吗?关于目标函数的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16147906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com