В задаче оптимизации с непрерывными переменными я использовал 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?