Устранение синтаксической ошибки SCIP

У меня небольшая проблема, в которой 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

Учитывая .lp, сгенерированный gurobi, я пытаюсь проверить, может ли 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>

У меня следующие вопросы: (а) Есть ли у вас какие-либо представления о том, что это за ошибка и как ее преодолеть?

(b) Допустим, если эта ошибка исправлена, будет ли SCIP автоматически линеаризовать это ограничение? Это выпуклая модель, но не конус второго порядка. Будет ли SCIP ослаблять его с помощью внешнего приближения (или любого другого метода)?

(c) Если нет, если он ограничен форматом, сгенерированным гуроби, порекомендуете ли вы какой-либо язык моделирования, на котором я могу быстро написать его, чтобы SCIP мог решить?


person twfx    schedule 16.02.2015    source источник


Ответы (1)


(а) Проблема заключается в пробеле между «^» и «2». SCIP ожидает, что это будет «^ 2». Я не думаю, что можно добавить пробел между «^» и «2».

(b) Да, линеаризация через внешнее приближение.

(c) AMPL, GAMS, ZIMPL.

person stefan    schedule 16.02.2015
comment
Превосходно! Не уверен, стоит ли мне задать новый вопрос. Можно ли вывести SCIP-линеаризованную модель в LP файл? SCIP + ipopt, кажется, занимает довольно много времени (›1 час) и все еще продолжается, вероятно, мне стоит попробовать с SCIP + gurobi или SCIP + cplex. - person twfx; 16.02.2015
comment
Что ж, SCIP создает линейное ослабление проблемы, а не линейную переформулировку. Если вы запускаете SCIP из его оболочки и прерываете его, например, после корневого узла, то вы можете использовать команду write lp, чтобы записать текущее ослабление LP. С API C используйте функцию SCIPwriteLP (). - person stefan; 19.03.2016