Powerbuilder ist ein sehr nützliches 4G Entwicklungswerkzeug, wenn es darum geht, sehr schnell eine Client/Server Datenbankanwendung auf die grüne Wiese zu stellen. In dieser Disziplin ist Powerbuilder mein persönlicher Favorit unter den unzähligen Entwicklungstools, welche es heute auf dem Markt gibt. Viele Tools kommen und gehen und schnell war man in einer Sackgasse, wenn man sich für das falsche Tool entschieden hat. Eine Konstante über die letzten Jahrzehnte hat hier stets Powerbuilder eingenommen. Heute soll es um das Spezialthema Linear Programm gehen. In vielen Bereichen des täglichen Lebens spielen Optimierungsaufgaben eine wichtige Rolle. Fragen der besten Ressourcenverwendung, Optimierungsaufgaben im Bereich der Logistik (wie Traveling Salesman Problem), Optimierung des Personaleinsatzes usw. stehen im Fokus. Eine Lösungsmöglichkeit für diese Themen ist Linear Programming, was auch mittels Powerbuilder keine unlösbare Aufgabe ist.

Linear Programming

Linear Programming ist eine Optimierungstechnik, um ein alltägliches Problem mit einem mathematischen Modell zu beschreiben. Die Aufgabe wird durch ein Gleichungssystem beschrieben, welches mehrere hunderte bzw. tausende Variablen hat. Jede lineare bzw. nicht lineare Gleichung definiert eine bestimmte Bedingung im System. Über eine sogenannte „Objective Function“ (auch als Minimierungs- oder Maximierungsfunktion bezeichnet) wird das Optimierungsziel festgelegt. Zum Beispiel die kürzeste Strecke durch einen Graphen oder Maximierung einer bestimmten Nutzen-Funktion, usw.

Implementierung mit Powerbuilder

Powerbuilder bietet hierfür keine Out of the Box Lösung an. Das heißt, man muss ein externes Modul einbinden, welches die gewünschte Funktionalität bietet. In Powerbuilder ist das relativ einfach, da hier die Implementierung über externe Funktionen durchgeführt werden kann. Grundsätzlich führen bekanntlich viele Wege nach Rom, so hat man eher die Qual der Wahl, welchen Optimierer man in Powerbuilder einsetzen möchte. Da gibt es einerseits die Lösung über den Excel Optimierer, also die Anbindung über ein OLE Objekt, oder man besorgt sich eine DLL wo man mittels API auf den Optimierer zugreifen kann. Am Markt gibt es hierfür viele Anbieter, vom lizenzpflichtigen Optimierer bis zu einer Open Source Lösung.

Einsatz LP Solve

Eine kostengünstige Variante ist der Einsatz von lp_solve, welcher hier herunter geladen werden kann. Lp_solve ist gratis und unter der GNU Lesser General Public License erhältlich.

Die Basisfunktionen von lp_solve sind wie folgt:

  • Es handelt sich um einen Mixed Integer Linear Programming Solver.
  • Der Modellgröße sind nach oben keine Grenzen gesetzt
  • Unterstützung von MPS und LP Datei Formaten
  • Die Modelle können auch In-Memory aufgebaut werden (ohne Filezugriff)
  • Unterstützung von Integer Variablen und Semi-continous Variablen
  • Umfangreiches API und Vieles mehr …

Es gibt zwei Wege wie diese Library in Powerbuilder eingebunden werden kann.

  • Über das API – sprich über externe Funktionen.
  • Über eine File Schnittstelle.

Setzt man das API ein, so muss man in Powerbuilder dieses API in den externen Funktionen deklarieren. Anschließend kann man diese Funktionen im Powerscript wie jede andere Funktion verwenden.

Für Solver hat sich ein Standard Fileformat etabliert. So kann das Modell in einem MPS Format gespeichert werden bzw. auch das LP Format wird unterstützt. Über einen Commandline Aufruf kann dieses Modell anschließend gelöst werden.

Zusammenfassend kann gesagt werden, dass Powerbuilder keine Grenzen gesetzt sind. Third Party Tools zur Lösung von Spezialthemen, wie hier die Optimierung mittels Linear Programming, können einfach und ohne großen Aufwand eingebunden werden. Stehen sie vor ähnlichen Herausforderungen und brauchen Unterstützung, dann nehmen Sie einfach mit uns Kontakt auf.

Vertiefende Literatur und Informationen zum Thema Lineare Programmierung finden Sie hier.

Dipl.-Ing. Markus Haidinger MBA
Letzte Artikel von Dipl.-Ing. Markus Haidinger MBA (Alle anzeigen)
Du musst angemeldet sein, um einen Kommentar abzugeben.