2017-03-29 13 views
0

Erstens, sry für den schlechten Titel dieser Frage Ich kenne einfach keinen besseren. Wenn du einen besseren hast => Sag es mir!Ungleichungen als Python-Parameter

Also mein Problem ist, dass ich einen Simplexlöser in Python selbst schreiben möchte, um zu verstehen, wie sie funktionieren.

Deshalb würde ich so etwas in meinem Programm haben mag:

m.addConstr(x[0] <= 7) 

, die im Grunde eine Einschränkung zu meinem Modell m hinzufügen sollen. Das funktioniert in Gurobi, was einfach wunderbar ist, weil es so einfach zu lesen ist. Das Problem ist, dass x[0] ein Objekt sein muss, wo ich selbst definieren kann, was passieren soll, wenn es eine Ungleichheit oder Gleichheit oder was auch immer gibt, oder?

Ich bin froh, herauszufinden, die meisten Dinge von mir selbst würde nur gerne eine Idee bekommen, wie das funktioniert.

Antwort

1

Es sieht so aus, als ob Sie die Vergleichsoperatoren aller Objekte, mit denen Sie arbeiten, überladen möchten. Also, wenn Foo die Klasse von x[0] in Ihrem Beispiel ist, dann könnte man es so schreiben:

class Foo: 
    def __gt__(self, other): 
     # construct and return some kind of constraint object 

    def __lt__(self, other): 
     # likewise 

Diese speziellen Methoden (__gt__, __ge__, __lt__, __le__, __ne__ und __eq__) für den linken genannt Objekt in einer Vergleichsbeziehung. Also, wenn Sie x > y haben, dann wird die __gt__ Methode auf x mit y als Argument aufgerufen.

1

Ich denke nicht, dass es Ihre erste Sorge sein sollte, mit einer eleganten Eingabesyntax zu kommen. Sie sollten den Simplex-Algorithmus zuerst implementieren.

Ich schlage vor, behandeln Sie die Eingabe durch einen Parser für die beiden Standardformate für die lineare Programmierung Probleme beim Schreiben: .lp und .mps

Wenn Sie noch wissen wollen, wie die richtigen Ausdruck zu implementieren in Python Handhabung empfehle ich Sie haben Ein Blick auf PySCIPOpt, da dies genau das tut, was Sie wollen, und Sie können den gesamten Quellcode inspizieren.

+0

Ich denke darüber nach, die meisten Sachen in Python inline zu machen, wie es normalerweise in Gurobi gemacht wird. Dann hast du viel Freiheit. Ich werde mir die .lp-Syntax ansehen. Danke für die Links! – Wikunia

Verwandte Themen