Sie können für einige eine Variable und eine lineare Gleichheit hinzufügen . Dann entspricht das ursprüngliche Problem der Maximierung von im neuen System.yy=cTx+c0c0y
Mit Ausnahme der Bedingung . Hier kommt ins . Wir müssen groß machen, dass wir für ein realisierbares ( und hold) . In diesem Fall spielt es keine Rolle, dass Nicht-Negativität Teile des realisierbaren Raums abschneidet. Der optimale Wert ist immer noch der gleiche.y≥0c0c0xAx=bx≥0cTx+c0≥0
Wie wählt man also ? Ich bin kein Experte für lineare Optimierung. Ist es einfacher, ein machbares finden, als eines, das die Zielfunktion maximiert? Wenn ja, können wir als .c0x0c0−cTx0
Wenn die angegebenen Koeffizienten rational sind, gibt es einen anderen Weg. Stellen wir zunächst fest, dass das Polytop von machbarem Eckpunkte hat (es sei denn, es ist leer): Sei ein Punkt in einer minimaldimensionalen Grenzzelle des Polytops. Nehmen Sie im Widerspruch an, dass die Dimension dieser Zelle . Dann gibt es einen anderen Punkt in derselben Zelle. Da die Zelle eine minimale Abmessung hat, ist sie unbegrenzt, so dass Punkte der Form in derselben Zelle und somit im Polytop liegen. Da , haben einige solcher negative Koordinaten, was der Polytopbedingung widerspricht .xp≥1qr=p+t(q−p)q−p≠0rr≥0
Machen Sie nun alle Koeffizienten von und ganzzahlig, indem Sie mit dem gemeinsamen Nenner multiplizieren. Sei die Dimension (die Länge des Vektors ) und sei der maximale Absolutwert eines beliebigen Koeffizienten von , oder . Dann können wir die Koordinaten eines beliebigen Scheitelpunkts des realisierbaren Polytops durch binden . Wählen Sie also .AbncMAbcn!⋅Mnc0:=n⋅n!⋅Mn+1
[BEARBEITEN]
Noch ein anderer Ansatz, falls Sie bereit sind, das Orakel mehrmals anzurufen: Versuchen Sie zunächst das Obige mit . Wenn Sie eine Lösung oder die Antwort "unbegrenzt" erhalten, geht es Ihnen gut. Wenn die Antwort "unlösbar" ist, müssen Sie herausfinden, ob es Lösungen mit negativer Zielfunktion gibt. Setzen Sie daher und maximieren Sie stattdessen . Wenn Sie eine Lösung erhalten, können Sie diese als . Wenn Sie wieder "unlösbar" werden, sind Sie auch fertig. Der letzte Fall ist die Antwort "unbegrenzt". Dann müssen Sie immer größere ausprobieren (verwenden Sie für einige Orakelaufrufe eine schnell wachsende Funktion; die Ackermann-Funktion kann dies tun), bis Sie eine Lösung erhalten.c0=0z=−cTzx0c0