【问题标题】:Solving SCIP syntax error解决 SCIP 语法错误
【发布时间】:2015-02-16 08:33:46
【问题描述】:

我有一个小问题,其中 gurobi 返回错误,因为 Q 矩阵不是半正定 (PSD)。

Minimize
  CAV_TDiff_LK_0_0 + CAV_TDiff_LK_0_1 + 0 TC_l_0_0 + 0 TC_lz1_0_1
Subject To
 CSTR_T_LK_0_1: CDV_T_EPS_L_0 + 7.8133169096884169e+006 C_l_0 - CAV_T_LK_0_1 + 319573.9014647137 TC_l_0_1 = 0
 CSTR_T_l_z1_LK_0_0: T_lz1_0_0 = 24.7593615199
 CSTR_T_l_z1_LK_0_1: - 1.3992339234055925e+007 C_lz1_0 - T_lz1_0_0 + T_lz1_0_1 + 159786.9507323569 TC_lz1_0_0 = 0
 CSTR_TDiff_LK_TEPGEqT_0_0: CAV_TDiff_LK_0_0 + CAV_T_LK_0_0   >= 24.7593615199
 CSTR_TDiff_LK_TEPGEqT_0_1: CAV_TDiff_LK_0_1 + CAV_T_LK_0_1   >= 24.4491708299
 CSTR_TDiff_LK_TGEqTEP_0_0: CAV_TDiff_LK_0_0 - CAV_T_LK_0_0   >= -24.7593615199
 CSTR_TDiff_LK_TGEqTEP_0_1: CAV_TDiff_LK_0_1 - CAV_T_LK_0_1   >= -24.4491708299
 CSTR_C_l_T_l_z1_LK_0_0: 3.888e+007 TC_l_0_0 + [ - 40 C_l_0 * TC_l_0_0  + 0.025 T_lz1_0_0 ^ 2 - 972000 T_lz1_0_0 * TC_l_0_0 ] <= 0
 CSTR_C_l_T_l_z1_LK_0_1: 3.888e+007 TC_l_0_1 + [ - 40 C_l_0 * TC_l_0_1  + 0.025 T_lz1_0_1 ^ 2 - 972000 T_lz1_0_1 * TC_l_0_1 ] <= 0
 CSTR_C_l_z1_T_l_z1_LK_0_0: 7.4210304e+007 TC_lz1_0_0 + [ - 40 C_lz1_0 * TC_l_0_0 + 0.025 T_lz1_0_0 ^ 2 - 1.8552576000000001e+006 T_lz1_0_0 * TC_lz1_0_0 ] <= 0
 CSTR_C_l_z1_T_l_z1_LK_0_1: 7.4210304e+007 TC_lz1_0_1 + [ - 40 C_lz1_0 * TC_l_0_1 + 0.025 T_lz1_0_1 ^ 2 - 1.8552576000000001e+006 T_lz1_0_1 * TC_lz1_0_1 ] <= 0
Bounds
End

鉴于 gurobi 生成的“.lp”,我尝试检查 SCIP 是否可以解决此模型。我正在使用带有预编译二进制文件的“scip-3.1.0.win.x86_64.msvc.opt.spx.ld”版本。不幸的是,SCIP 返回

[src\scip\reader_lp.c:147] ERROR: Syntax error in line 18 ('972000'): two consecutive values.
  input:    + 0.025 T_lz1_0_0 ^ 2 - 972000 T_lz1_0_0 * TC_l_0_0 ] <= 0
                                     ^
[src\scip\reader_lp.c:3307] ERROR: Error <-2> in function call error reading file <myfile.lp>

我的问题是, (a) 你知道这个错误是什么以及如何克服它吗?

(b) 假设这个错误得到修复,SCIP 会自动线性化这个约束吗?这是一个凸模型,但不是二阶锥体。 SCIP 会用外近似(或任何其他方法)来放松它吗?

(c) 如果不是,如果受到 gurobi 生成格式的限制,您会推荐任何我可以快速编写以便 SCIP 解决的建模语言吗?

【问题讨论】:

    标签: scip


    【解决方案1】:

    (a) 问题是'^' 和'2' 之间的空格。 SCIP 预计这是“^2”。我不认为在 '^' 和 '2' 之间添加空格也是允许的。

    (b) 是的,通过外近似进行线性化。

    (c) AMPL、GAMS、ZIMPL。

    【讨论】:

    • 太棒了!不确定我是否应该开始一个新问题。是否可以将 SCIP 线性化模型输出到 LP 文件? SCIP+ipopt 似乎需要很长时间(>1 小时)并且仍在继续,也许我应该尝试使用 SCIP+gurobi 或 SCIP+cplex。
    • 好吧,SCIP 创建了问题的线性松弛,而不是线性重新表述。如果你从它的 shell 运行 SCIP 并中断它,例如,在根节点之后,那么你可以使用“write lp”命令写出当前的 LP 松弛。对于 C API,使用函数 SCIPwriteLP()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多