我正在尝试将一个非常简单的LP文件读入GLPK。这个LP文件有4个变量,其中2个是二进制的,看起来GLPK读取这两个二进制变量(HACE_MESAS,HACE_SILLAS)。它记录:
警告:变量HACE_MESAS的下限已重新定义警告:upper 变量HACE_MESAS的绑定重新定义了警告:下限 变量HACE_SILLAS重新定义警告:变量的上限 HACE_SILLAS重新定义
并且它解决得很糟糕,因为将实际值放到这两个变量中:
HACE_MESAS = 0.01
HACE_SILLAS = 0.02
LP文件是这样的:
Maximize
obj: 5 MESAS + 3 SILLAS
Subject To
IloC0: MESAS + 2 SILLAS >= 0
IloC1: MESAS + 2 SILLAS <= 50
IloC2: 2 MESAS + SILLAS >= 0
IloC3: 2 MESAS + SILLAS <= 40
IloC4: MESAS - 1000 HACE_MESAS <= 0
IloC5: SILLAS - 1000 HACE_SILLAS <= 0
IloC6: HACE_MESAS + HACE_SILLAS <= 1
Bounds
MESAS >= 0
SILLAS >= 0
0 <= HACE_MESAS <= 1
0 <= HACE_SILLAS <= 1
Binaries
HACE_MESAS HACE_SILLAS
Generals
MESAS SILLAS
End
谁能告诉我我做得不好?感谢。
答案 0 :(得分:0)
只需删除多余的边界(它们是不必要的,但是因为你看起来有麻烦)
0 <= HACE_MESAS <= 1
0 <= HACE_SILLAS <= 1
也就是说,我运行这个模型:
Maximize
obj: 5 MESAS + 3 SILLAS
Subject To
IloC0: MESAS + 2 SILLAS >= 0
IloC1: MESAS + 2 SILLAS <= 50
IloC2: 2 MESAS + SILLAS >= 0
IloC3: 2 MESAS + SILLAS <= 40
IloC4: MESAS - 1000 HACE_MESAS <= 0
IloC5: SILLAS - 1000 HACE_SILLAS <= 0
IloC6: HACE_MESAS + HACE_SILLAS <= 1
Bounds
MESAS >= 0
SILLAS >= 0
Binaries
HACE_MESAS HACE_SILLAS
Generals
MESAS SILLAS
End
一切都按预期工作:
Problem:
Rows: 7
Columns: 4 (4 integer, 2 binary)
Non-zeros: 14
Status: INTEGER OPTIMAL
Objective: obj = 100 (MAXimum)
No. Row name Activity Lower bound Upper bound
------ ------------ ------------- ------------- -------------
1 IloC0 20 0
2 IloC1 20 50
3 IloC2 40 0
4 IloC3 40 40
5 IloC4 -980 0
6 IloC5 0 0
7 IloC6 1 1
No. Column name Activity Lower bound Upper bound
------ ------------ ------------- ------------- -------------
1 MESAS * 20 0
2 SILLAS * 0 0
3 HACE_MESAS * 1 0 1
4 HACE_SILLAS * 0 0 1
Integer feasibility conditions:
KKT.PE: max.abs.err = 0.00e+00 on row 0
max.rel.err = 0.00e+00 on row 0
High quality
KKT.PB: max.abs.err = 0.00e+00 on row 0
max.rel.err = 0.00e+00 on row 0
High quality
End of output