Lineare Programmierung mit scipy.optimieren.linprog
Habe ich einfach mal die einfache lineare Programmierung problem mit scipy.optimieren.linprog:
1*x[1] + 2x[2] -> max
1*x[1] + 0*x[2] <= 5
0*x[1] + 1*x[2] <= 5
1*x[1] + 0*x[2] >= 1
0*x[1] + 1*x[2] >= 1
1*x[1] + 1*x[2] <= 6
Bekam und das sehr merkwürdige Ergebnis, ich erwartet, dass x[1] 1 und x[2] 5, aber:
>>> print optimize.linprog([1, 2], A_ub=[[1, 1]], b_ub=[6], bounds=(1, 5), method='simplex')
status: 0
slack: array([ 4., 4., 4., 0., 0.])
success: True
fun: 3.0
x: array([ 1., 1.])
message: 'Optimization terminated successfully.'
nit: 2
Kann mir jemand erklären, warum ich dieses seltsame Ergebnis?
- Nun, es ist nicht merkwürdig, mehr, sobald man erkennt, dass
linprog
tatsächlich minimiert 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
optimize.linprog
immer minimiert Ihre target-Funktion. Wenn Sie möchten, zu maximieren, verwenden Sie stattdessen, dassmax(f(x)) == -min(-f(x))
Dadurch erhalten Sie das erwartete Ergebnis mit dem Wert
-f(x) = -11.0