【问题标题】:CPLEX C++ Quadratic objective functionCPLEX C++ 二次目标函数
【发布时间】:2014-10-15 23:38:49
【问题描述】:

我刚开始使用 cplex 及其 c++ API,当我尝试编写一个简单的二次程序时遇到了这种不寻常的情况。

IloEnv   env;
IloNumVarArray x(env, 3, 0, IloInfinity, ILOINT);
IloModel model(env);
IloExpr obj(env);

obj= x[0]*x[1] ;

model.add(IloMaximize(env, obj - 120*x[2] ));

model.add(x[0] <= 200);
model.add(x[1] >= 4500);
model.add(x[1] <= 5500);
model.add(x[2] >= 100);
model.add(x[2] <= 300);

Cplex 解决并为我提供以下解决方案:x[0] = 200, x[1] = 5500 & x[2] = 100。这对我来说似乎完全合理。但是,当我对如何制定 iloexpr 进行以下更改时,上述代码不起作用:

obj= x[0]*x[1] - 120*x[2];
model.add(IloMaximize(env, obj ));

解决它,我得到 x[0] = 0, x[1] = 4500, x[2] = 300。实际上,目标值 = 36000 这对我来说没有意义。

有人知道我的表述有什么问题吗?谢谢!

【问题讨论】:

    标签: visual-c++ mathematical-optimization cplex


    【解决方案1】:

    您的最大化目标不是凹的。事实上,它既不是凹的也不是凸的。 Cplex 仅支持最大化凹函数或线性函数。 Cplex 不会验证您的目标函数是否在其范围内。它将这留给建模者的责任,部分原因是它在计算上几乎与实际计算最佳解决方案一样难以验证。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2019-02-09
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2019-01-15
      • 2020-08-26
      • 1970-01-01
      相关资源
      最近更新 更多