Versuchen, eine einfache lineare Funktion mit Linprog zu minimieren. Die Koeffizienten sind die Elemente von arr2
multipliziert mit -1. Es gibt nur Ungleichheitsbedingungen für jede Variable, wie zum Beispiel -1 < = x1 < = 1, -2 < = x2 < = 2 und so weiter.Python SciPy Linprog Optimierung schlägt fehl mit Status 3
Wenn ein nicht wählen Grenzen in linprog
angeben:
from scipy.optimize import linprog
import numpy as np
import pandas as pd
numdim = 28
arr1 = np.ones(numdim)
arr1 = - arr1
arr2 = np.array([
19.53,
128.97,
3538,
931.8,
0.1825,
150.88,
10315,
0.8109,
3.9475,
3022,
31.77,
10323,
110.93,
220,
2219.5,
119.2,
703.6,
616,
338,
84.67,
151.13,
111.28,
29.515,
29.67,
158800,
167.15,
0.06802,
1179
])
constr_a = []
for i in range(numdim):
constr_default = np.zeros(numdim)
constr_default[i] = 1
constr_a.append(constr_default)
for i in range(numdim):
constr_default = np.zeros(numdim)
constr_default[i] = -1
constr_a.append(constr_default)
constr_a = np.asarray(constr_a)
constr_b = np.arange(1, 2*numdim + 1, 1)
constr_b[numdim:] = constr_b[:numdim]
print linprog(np.transpose(arr1 * arr2), constr_a, constr_b, bounds=(None, None))
ich folgendes Ergebnis:
Spaß: -4.327.476,2887400016 Meldung: ‚Optimierung fehlgeschlagen. Das Problem scheint unbegrenzt zu sein. " Status: 3
habe ich versucht, auf die letzte Zeile zu ändern:
print linprog(np.transpose(arr1 * arr2), constr_a, constr_b, bounds=(-1000, 1000))
die Zahlen als Grenzen festgelegt sind zufällig. Die Ausgabe lautet:
Spaß: -4.327.476,2887400296 Nachricht: 'Optimierung erfolgreich beendet.' Status: 0
, die uns ein etwas anderes Ergebnis und den gewünschten Status gibt. Meine Frage ist, missbrauche ich die Bibliothek und auf welche Weise? Welche Antwort ist richtig? Es wurde erwartet, dass dieser Code funktioniert, ohne den Parameter 'bounds' anzugeben. Ich kann diesen Parameter nicht verwenden, da diese einfachen Einschränkungen für jede Variable eindeutig sind.
Ich benutze Python 2.7 und Scipy 0.17.1. Vielen Dank im Voraus.
Aktl
constr_a
sollte eine Matrix gemäß der Dokumentation (https://docs.scipy.org/doc/scipy/reference/optimize.linprog-simplex.html) und ist eigentlich im Code. Um sicher zu gehen, dass die Syntax korrekt ist, können wir die Anzahl der Dimensionen auf 2:
und dies wird funktionieren.
'constr_a' ist eine Matrix (2n, n), unbekannte Variablen Array ist (n, 1), Matrix-Multiplikation ergibt Array' constr_b', was (2n, 1) ist. Scheint mir, kein Fehler hier. – Inna
@Inna drucken und überprüfen Sie die ersten paar Elemente von 'constr_a' – tihom
Vielen Dank für Ihre Vorschläge. Beantwortet in der Post. – Inna