2017-10-30 3 views
1

Ich mache ein Projekt mit CPLEX Solver, auf Netbeans mit Java. Wir haben mehrere Optimierungsprobleme zu lösen, ich habe eine von ihnen bereits gelöst, indem ich in Java alle Beschränkungen, Ziele und Variablen ohne Verwendung von AMPL codiert habe. Einige Leute in meinem Team möchten jedoch AMPL verwenden.
Da ich also nicht das gesamte AMPL-Buch lesen möchte, um die Antwort zu finden, gibt es einen offensichtlichen Grund, AMPL lieber zu verwenden, als alle Beschränkungen "manuell" zu codieren? Kann AMPL außerdem in Netbeans integriert werden? Ich habe keine Dokumentation darüber gefunden. Ist AMPL nützlich, wenn die Constraints "flexibel" sein müssen (ich meine, wir können die genaue Anzahl der Constraints nicht voraussehen, es hängt von den vom Benutzer festgelegten Parametern ab, Modularität ist ein wichtiger Faktor ...)Was ist der offensichtliche Vorteil der Verwendung von AMPL?

Ich bin wirklich neugierig, bald darüber zu hören!

Vielen Dank für Hilfe

Antwort

2

AMPL eine algebraische Modellierungssprache ist und unter Angabe von diesem Link:

Ein Vorteil von AMPL die Ähnlichkeit ihrer Syntax der mathematischen Notation von Optimierungsproblemen ist.

Zum Beispiel können Sie dadurch Gruppen von Beschränkungen definieren, ohne vorher die Dimensionen des Modells zu kennen. Und vielleicht können Sie Ihr Modell schneller ändern. (Sie müssen darüber nachdenken, wie oft Sie das tun werden.)

Allerdings könnte man argumentieren, dass der "offensichtliche Vorteil" von AMPL ist, dass es Dutzende verschiedener Löser unterstützt. Sie können Ihr Modell erstellen und es mit CPLEX lösen, aber dann entscheiden, dass Sie einen anderen Solver verwenden möchten (z. B. Gurobi, Xpress usw.). Auf der AMPL Solvers Webseite haben sie die folgende Empfehlung:

Wir empfehlen Ihnen dann alternative Löser zu testen, um zu bestimmen, welche den besten Kompromiss aus Preis und Leistung für Ihre Bedürfnisse bietet.

Die AMPL API Webseite sagt, dass es ein Java-API ist, so dass zulassen, sollten Sie es in einem Netbeans-Projekt gehören, aber ich habe keine Erfahrung damit.

Am Ende des Tages könnte man auch argumentieren, dass diese "Vorteile" Geschmackssache sind. Die Verwendung der CPLEX Java API direkt, wie Sie es bereits getan haben, ist sicherlich eine gültige Lösung, wenn sie Ihren Anforderungen entspricht. Es ermöglicht Ihnen möglicherweise, das Modell effizienter zu erstellen, lösungsspezifische/erweiterte Funktionen zu verwenden, die von AMPL möglicherweise nicht unterstützt werden, und eine feinere Kontrolle über die Modellformulierung zu erhalten.

+0

Vielen Dank für Ihre Antwort! Eigentlich muss ich Cplex benutzen, weil es obligatorisch ist. Ist AMPL so schwer zu lernen? – MysteryGuy

+1

Auch wenn Sie CPLEX * now * verwenden müssen, ist es für die Zukunft wertvoll, zu wissen, wie man auf eine solver-unabhängige Weise schreibt. AMPL (und die anderen Modellierungssprachen wie OPL, MPL usw.) sind nicht schwer zu erlernen, und ihre Verwendung gibt Ihnen eine andere Perspektive auf Ihre Modellformulierung (en). – TimChippingtonDerrick

2

Stimme völlig mit allem überein, was Rkersh sagt. Beachten Sie auch, dass Sie Ihr Modell niemals so schreiben sollten, dass Details Ihrer Problemgrößen festgeschrieben werden, unabhängig davon, ob Sie in einer algebraischen Modellierungssprache oder über eine der direkteren APIs schreiben.

Auch mit einer Modellierungssprache zu arbeiten gibt Ihnen eine zusätzliche Ebene/Ebene der Abstraktion, die helfen kann, insbesondere beim Teilen oder Erklären Ihres Modells an andere, vergleichen mit einer Reihe von Standard-Problemtypen etc., aber ich bevorzuge mehr Schrauben und Muttern 'Gefühl' der Arbeit mit den direkteren APIs, und fast nie brauchen (oder haben Zeit & Budget), um meine Modelle so tief zu formulieren.

3

Sie haben gerade ein Optimierungsmodell programmiert, um die Produktion von Widgets Ihres Unternehmens zu optimieren. Ihre Firma hat einen wirklich guten Deal mit $ SOLVER1 bekommen, also benutzen Sie das.

In den nächsten zehn Jahren verbessern und erweitern Sie dieses Modell, wenn Ihre Chefs neue Anforderungen an Sie stellen. Am Ende dieser Zeit haben Sie möglicherweise Zehntausende von Zeilen mit Optimierungscode als Teil eines Systems, das für Ihre Unternehmensabläufe von entscheidender Bedeutung ist.

Das ursprüngliche Lizenzgeschäft Ihres Unternehmens ist abgelaufen, und die Hersteller von $ SOLVER1 haben die Lizenzgebühren massiv erhöht, so dass Sie jetzt mehrere Hunderttausend Lizenzkosten pro Jahr zahlen.

Währenddessen haben die Boffins einer Konkurrenzfirma gerade eine neue Version von $ SOLVER2 veröffentlicht. Es hat ausgefallene neue Algorithmen, die das Widget-Optimierungsproblem um 20% schneller lösen und bessere Lösungen als $ SOLVER1 finden können. Es kostet nicht mehr als $ SOLVER1 und die Leistung ist besser.

Inzwischen hat die Open-Source-Community $ FREESOLVER veröffentlicht. Es ist vielleicht nicht ganz so mächtig wie die Top-kommerziellen Optionen, aber es ist so gut wie $ SOLVER1 vor zehn Jahren war, und wenn Sie nicht $ 100k/Jahr für die Lizenzierung zahlen würden, könnten Sie eine Menge Server-Zeit mieten, um nachzuholen dafür.

... also, haben Sie Ihr Optimierungsmodell auf einer Plattform geschrieben, auf der Sie zu einem neuen Solver wechseln und diese Möglichkeiten nutzen können, ohne Code im Wert von zehn Jahren löschen zu müssen?

Es gibt große Vorteile, Solver schnell und einfach wechseln zu können. Ich kenne eine Firma, die drei verschiedene Löser für ihre Arbeit verwendet: Sie versuchen zwei verschiedene Open-Source-Löser, die beide in der Cloud laufen, und wenn keiner von ihnen eine adäquate Lösung finden kann, dann werfen sie ihn auf einen teuren Löser mit klügerem Algorithmen. Die Open-Source-Solver behandeln 90% ihrer Probleme, so dass sie für die letzten 10% nur den kommerziellen Solver verwenden müssen, was ihnen erhebliche Einsparungen bei ihren Lizenzkosten ermöglicht.

Eine Option, die ich bei meiner Arbeit diskutiert habe, ist die Verwendung eines kommerziellen Solvers für unternehmenskritische Arbeiten und Open-Source-Alternativen für Anwendungen wie Schulungen oder Prototypen im kleinen Maßstab, wo wir nicht dieselben Anforderungen haben. Auf diese Weise können wir die Anzahl gleichzeitiger Benutzer minimieren, die wir für den kommerziellen Solver lizenzieren müssen.

(Und ja, es ist immer noch ein Thema von Lock-in mit der Plattform, sondern Plattformen wie AMPL sind deutlich billiger als ein High-End-kommerziellen Solver.)

+0

Dieses Szenario ist * SO * wahr. Vor genau diesem Thema * wieder * genau dort, wo ich gerade sitze. – TimChippingtonDerrick

+0

Eigentlich ist es für ein akademisches Projekt ... – MysteryGuy

+1

@MysteryGuy Akademische Projekte sind ein einfacher Modus: Ihre Ziele sind klar definiert, sie werden sich kaum ändern, und Sie müssen sich keine Gedanken darüber machen, wie wartbar Ihr Code ist. Es klingt, als ob Sie einen reibungslosen Weg zur Weitergabe dieses Projekts haben, indem Sie nur das verwenden, was Sie bereits wissen. Aber der wahre Sinn des Studiums besteht nicht darin, Aufgaben zu vergeben, indem Sie das verwenden, was Sie bereits wissen; es ist, * neue * Dinge zu lernen, die im späteren Leben nützlich sein werden. IME, der Wechsel von "Dingen, die für Uni-Aufgaben arbeiten" zu "Dingen, die am Arbeitsplatz arbeiten", war ein großer Teil der beruflichen Entwicklung. –

2
  • Auch GPL Mittel " allgemeine "noch neuere und neuere GPLs, die zum Leben erwachen, so ist eine gegebene GPL für einige Aufgaben" allgemeiner "als andere ... :-) Theoretisch sollte das Schreiben eines Compilers, der für Pascal oder Perl am effizientesten ist, eigentlich keine Rolle spielen Du könntest in welcher Sprache auch immer schreiben und dennoch solltest du nicht an Expressivität oder Effizienz einbüßen (zB für C#, das jetzt in Java in der gleichen Liga ist, schreibt MS einen besseren Compiler als das Opensource-Äquivalent).
  • Menschen sind spezialisiert - deshalb sind wir so weit gekommen :-). Es ist nicht anders, wenn es darum geht, eine gegebene Aufgabe zu erfüllen, ein Geschäftsproblem in ein mathematisches Modell (alias Modellierung) umzuwandeln. Die ganze Idee eine gegebene Modellierungsschicht ist, dass
    • A. Sie die äussersten Expressivität für diese spezielle Aufgabe hat (auch bekannt als mathematische Modellierung)
    • B.es erzwingt einige bewährte Methoden, um zu modellieren, was bei GPL nicht "erzwungen" ist (1. Sie können es tun, 2. es wird Ihnen als solches vermarktet = Flexibilität). Z.B. AMPL, GAMS, andere mischen deklarativen Code (alias Model-Code) und prozeduralen Code (alias flow-control-like), was keine gute Praxis ist. Auf der anderen Seite z.B. Trennung von Daten und ein abstraktes Modell wird zu allen Modellierungssprachen, aber interessanterweise sehr langsam ...
    • C. durch no.A Sie können den Code effizienter als sonst beibehalten (im Gegensatz zu API-Modellierung - ich habe Kunden, die sie sagen wandte sich an modelinglanguage, weil API-Modellierung eine Haftung für schnelle Modellumgestaltung ist.
    • D. in der Theorie könnten Sie Solver unabhängig sein.
    • Wenn Sie sich umsehen versuchen alle Modellierungssprachen no.C außer OPL (das ist aus historischen Gründen) zu halten. Aber selbst im Falle von OPL, erhalten Sie Constraint-Programmierung und Constraint-basierte Planung (neben Mathe-Programmierung), was mit AMPL/GAMS Sie nicht, aber solverindividuell sind sie ...
    • die $ Solver1 und $ Solver2 + $ Freesolver Vergleich ist ein bisschen aus 4 Gründen gebrochen
    • A. opensolvers sind immer noch sehr weit weg von kommerziellen Löser in Bezug auf Leistung, wenn es um große/komplexe Probleme kommt (wahrscheinlich LP ist die Ausnahme) - Ich habe Kunden - die schnellsten Verkäufe aller Zeiten in meinem Gedächtnis - als sie nach ihrer "Free-Ride" kommerzielle Löser testeten.
    • B. während in der Tat das in Zusammenhang mit $ Solver1 und $ Solver2 beschriebene Szenario plausibel erscheint ($ Solver1, der Amtsinhaber wird mit der Zeit immer teurer), konnten wir genau andersherum Zeuge werden, wo der $ Solver2 (ein Neuling) hat seine Preise tatsächlich 4x in 7 Jahren erhöht und in einigen Fällen sogar verdoppelt, während sich $ Solver1 (der etablierte Anbieter) nicht verändert hat.
    • C. Ein Vermischen von Modellierungsfunktionen und Solvern ist ein Fehler. Die ganze Idee ist, dass jemand Modelle in APIs schreibt. Das ist die Methode, um mehr an einen Löser zu denken als an Modellierungssprachen. Zumindest, wenn die Ungarn sagen, "was Sie an der Gewohnheit gewinnen, verlieren Sie es auf der Fähre", mit anderen Worten, "Freiheit (dh Flexibilität) kommt mit verantwortungsvoll zu verwenden"
    • D. Besitz eines Lösers für die Entwicklung ist NICHTS teuer, dh ein Unternehmen kann eine große Anzahl von Solvern verwalten (für weniger als 10k $ kann ein Unternehmen +4 Solver für die Entwicklung haben), um zu testen, welches das schnellste für ein bestimmtes Modell ist und dann das am besten geeignete für den Einsatz.
  • Solver ist nur ein Teil des Puzzles. Z.B. Ich habe einen Kunden, der unterschiedliche Datenquellen hat und es dauert 8 Stunden, um ein Modell und 4 Stunden zu erstellen, um es zu lösen. Würde dieser Client eine effizientere Datenverarbeitungs-Suite begrüßen oder würde er darauf bestehen, dass der Solver schneller sein sollte? Modellierer sind in den meisten Fällen zu isoliert vom Geschäft, und während ein bestimmtes Modell in ihren Köpfen perfekt ist, ist es zweitrangig, wie es von Daten bevölkert wird, aber es macht oder bricht eine gute Leistung.
  • Ich bezeuge, dass API Modellierer Modellierungssprachen bewegt, nicht umgekehrt aus verschiedenen Gründen ...
  • aber wie jemand oben schrieb, gibt es viele „Geschmack im Spiel“, so ist schließlich, wenn Sie das Gefühl, komfortabler mit einem bestimmten Ansatz, dann kann niemand es dir vorwerfen, so zu wählen ... :-) Schließlich ist es sehr schwierig, den/einen anderen Ansatz zu vergleichen, da es in einem gegebenen Fall fast nie da ist ... also was schließlich zählt ist Geschwindigkeit von Business-Problem zu einem Modell, das

puh :-) schnell im gegebenen Anwendungskontext zu lösen, war es lange ... aber ich habe alle meine Schüsse ... :-)

+0

Ja, die High-End-kommerzielle Solver im Allgemeinen übertreffen offene Solver mit einem erheblichen Vorsprung, aber ich bin mir nicht sicher, wie dies ein Gegenargument zu dem Beispiel, das ich gab. Für viele Probleme sind die offenen Solver immer noch gut genug, und für eine Organisation, die eine Mischung aus einfachen und harten Problemen mit demselben Modell hat, kann die einfache Lösung eines freien Solvers eine erhebliche Kostenreduktion bedeuten. –

Verwandte Themen