2013-02-25 84 views
0

我正在尝试将一个非常简单的LP文件读入GLPK。这个LP文件有4个变量,其中2个是二进制的,似乎GLPK严重读取这2个二进制变量(HACE_MESAS,HACE_SILLAS)。它记录:用GLPK读取二进制变量的LP文件

警告:下界可变HACE_MESAS的重新定义的警告:上 绑定变量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 <= 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 
+0

是的,但是如果你看到解决方案:HACE_MESAS和HACE_SILLAS有实际的解决方案,而不仅仅是0或1. HACE_MESAS = 0.01 HACE_SILLAS = 0.02 – user2107157 2013-02-25 13:47:48

+0

@ user2107157我已经更新了我的答案:** everything **是整数。请检查我所做的事情,并尝试在您的机器上重现我的步骤。 – Ali 2013-02-25 14:35:54