0

我正在尝试将一个非常简单的 LP 文件读入 GLPK。这个 LP 文件有 4 个变量,其中 2 个是二进制的,看起来 GLPK 对这 2 个二进制变量(HACE_MESAS、HACE_SILLAS)的读取很差。它记录:

警告:重新定义变量 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

谁能告诉我我做错了什么?谢谢。

4

1 回答 1

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
于 2013-02-25T13:06:00.983 回答