【问题标题】:GLPK optimization problem with continuous variables always return zero具有连续变量的 GLPK 优化问题总是返回零
【发布时间】:2019-03-22 11:38:09
【问题描述】:

在连续变量的优化问题中,我使用 GLPK for python(pymprog 模块)。结果出乎我的意料。

begin('optimzer')

X = var('X', 5)
k = par('k', [1, 1, 1, 1, 1])

0 <= X[0] <= 100
100 <= X[1] <= 200
400 <= X[2] <= 500
400 <= X[3] <= 500
400 <= X[4] <= 500

sum(k[i]*X[i] for i in range(len(k))) >= 150
minimize(sum(k[i]*X[i] for i in range(len((k)))), 'Profit')

solve()
save(mip='_save.mip')

结果是这样的

Problem:    optimzer
Rows:       1
Columns:    5 (0 integer, 0 binary)
Non-zeros:  5
Status:     INTEGER UNDEFINED
Objective:  Profit = 0 (MINimum)

   No.   Row name        Activity     Lower bound   Upper bound
------ ------------    ------------- ------------- -------------
     1 R1                          0           150               

   No. Column name       Activity     Lower bound   Upper bound
------ ------------    ------------- ------------- -------------
     1 X[0]                        0             0           100 
     2 X[1]                        0           100           200 
     3 X[2]                        0           400           500 
     4 X[3]                        0           400           500 
     5 X[4]                        0           400           500 

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 = 4.00e+02 on column 3
        max.rel.err = 9.98e-01 on column 3
        SOLUTION IS INFEASIBLE

End of output

如果我使用连续变量,为什么状态为 INTEGER UNDEFINED?

在应该 >= 150 的给定约束下,利润如何为 0?

【问题讨论】:

    标签: python optimization linear-programming glpk


    【解决方案1】:

    这并不是真正的 MIP 模型,而是纯 LP 模型(glpk 似乎有所区别)。您可以通过以下方式保存 LP 解决方案:

    save(sol='_save.sol')
    

    这将显示:

    Problem:    optimzer
    Rows:       1
    Columns:    5
    Non-zeros:  5
    Status:     OPTIMAL
    Objective:  Profit = 1300 (MINimum)
    
       No.   Row name   St   Activity     Lower bound   Upper bound    Marginal
    ------ ------------ -- ------------- ------------- ------------- -------------
         1 R1           B           1300           150
    
       No. Column name  St   Activity     Lower bound   Upper bound    Marginal
    ------ ------------ -- ------------- ------------- ------------- -------------
         1 X[0]         NL             0             0           100             1
         2 X[1]         NL           100           100           200             1
         3 X[2]         NL           400           400           500             1
         4 X[3]         NL           400           400           500             1
         5 X[4]         NL           400           400           500             1
    
    Karush-Kuhn-Tucker optimality 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
    
    KKT.DE: max.abs.err = 0.00e+00 on column 0
            max.rel.err = 0.00e+00 on column 0
            High quality
    
    KKT.DB: max.abs.err = 0.00e+00 on row 0
            max.rel.err = 0.00e+00 on row 0
            High quality
    
    End of output
    

    似乎save(mip='_save.mip') 仅在模型中至少存在一个离散变量时才有效。

    【讨论】:

    • 感谢有关 MIP 的提示。我认为 M(ixed) 代表混合整数和浮点数。但我不明白 GLPK 的答案:答案不应该是 X[1] = 150 和所有其他 X[n] = 0,结果 R1 = 150?我要求最小化利润
    • 显然您提出的解决方案违反了下限,因此不可行。
    • 抱歉,我之前做过不同范围的测试,但我的想法仍然是他们
    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2021-08-10
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多