【问题标题】:CPLEX OPL Error 5002: Constraint not convex continues even setting optimalitytarget=3CPLEX OPL 错误 5002:即使设置最佳性目标 = 3,约束不凸仍然继续
【发布时间】:2021-01-31 12:43:58
【问题描述】:

我对 CPLEX Optimization Studio 有疑问。我想解决以下二次约束问题,但我得到'CPLEX Error 5002:'qconstraint1' is not convex.->'。最初我认为这是因为优化目标没有自动设置为 3,但即使我明确设置,错误仍然存​​在。一个有趣的事实是,这个问题在 AMPL 或 MATLAB 环境中都能正常解决。

我该如何解决这个问题?

/*********************************************
 * OPL 12.10.0.0 Model
 * Author: johnm
 * Creation Date: Oct 16, 2020 at 6:29:33 PM
 *********************************************/
execute{
  cplex.optimalitytarget=3;
}
range R=1..6;
dvar float x[R];

minimize x[1] + x[2] + x[3] + x[4] + x[5] + x[6];
subject to{
  constraint1: x[1] +  x[2] + x[5] == 8;
  constraint2: x[3] + x[5] + x[6] == 10;
  qconstraint1: -x[1]^2 + x[2]^2 + x[3]^2 <= 0;
  qconstraint2: -x[4]^2 + x[5]^2 <= 0;
  bound_x1:   x[1] >= 0;
  bound_x4:   x[4] >= 0;
  bound_x6:   x[6] >= 0;
}  

【问题讨论】:

    标签: cplex opl


    【解决方案1】:
    execute{
      cplex.optimalitytarget=3;
    }
    range R=1..6;
    dvar float x[R] in 0..100;
    
    minimize x[1] + x[2] + x[3] + x[4] + x[5] + x[6];
    subject to{
      constraint1: x[1] +  x[2] + x[5] == 8;
      constraint2: x[3] + x[5] + x[6] == 10;
      qconstraint1: x[1]^2 - x[2]^2 - x[3]^2 >= 0;
      qconstraint2: -x[4]^2 + x[5]^2 <= 0;
      bound_x1:   x[1] >= 0;
      bound_x4:   x[4] >= 0;
      bound_x6:   x[6] >= 0;
    } 
    

    工作正常

    【讨论】:

    • 非常感谢。声明“dvar float x[R] in 0..100”解决了这个问题,但重要的是表明这个声明不允许负变量,当我用 AMPL 解决同样的问题时,我得到一个负变量:CPLEX 12.10.0.0 :版本标识符:12.10.0.0 | 2019-11-26 | 843d4de2ae 最优解;目标 18 5 次障碍迭代 无依据。 x1 = 4.94145 x2 = -0.00182345 x3 = 1.37674 x4 = 3.06037 x5 = 3.06037 x6 = 5.56289
    猜你喜欢
    • 2019-07-19
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多