2013-02-25 85 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