Задача оптимизации GLPK с непрерывными переменными всегда возвращает ноль - PullRequest
0 голосов
/ 22 марта 2019

В задаче оптимизации с непрерывными переменными я использовал GLPK для 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 НЕ УКАЗАН, если я работаю с непрерывными переменными?

Как прибыль может быть 0 с заданным ограничением, которое должно быть> = 150?

1 Ответ

0 голосов
/ 23 марта 2019

Это на самом деле не модель MIP, а модель чистого LP (похоже, что glpk делает различие).Вы можете сохранить решение LP:

...