Weiterentwicklung meines Codes aus der Bachelorarbeit - soll später nicht BLIP sondern ILP und MILP lösen können
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jochen@homeland e6c6589d07 Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
Instances Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
src Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
.gitignore ungetestet. versuch, glpk aus den namen zu entfernen. weniger print blöcke. versuch der löschung des bounded buffers mit delete am ende von distributor. 4 years ago
Makefile Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
README.md Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
Screenshot.jpg Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
farmer.cfg Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
farmer.cpp Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago
index.html beim worker muss nun zusätzlich die größe des zur verfügung gestellten RAM in MB angegeben werden. Log, html-Monitor und Debug-Modus zeigen nun in prozent die benutzte menge des speicherts der worker an. Debug, also MOREINFO, sowie html seite zeigt zusätzlich info zur objectiv direction, eingelesenes dateiformat und größe der MAtrix an (incl. anzahl der non-zero einträge). 3 years ago
worker.cpp Sachen bzgl. include und libs speziell für Hochschule sind rausgenommen. Wrapper mit nur 3 funktionen für mac und windows ist entfernt. Viele kaum genutzte dateien und scripte sind entfernt. In Config Datei muss nun logging-intervall eingegeben werden. Readme mit kleiner Doku und BSD-2 Lizenz ist beigefügt sowie ein screenshot. -DSEEMORE gibt es nicht mehr, denn farmer loggt auf stderr mit und server für monitoring ist nun default. silent und daemon funktion der worker ist entfernt, weil selten benutzt. Worker sind still per default. 3 years ago

README.md

Bachlorarbeit Plus

Dieses Programm ist eine Weiterentwicklung meines Codes aus der Bachelorarbeit. Die OR-Instanzen von Chu-And-Beasley sind damit weiterhin lösbar - mal schneller und mal auch leider langsamer. Primär tut dieser Code bei binären Rucksack Problemen die dem Capital Budgeting Problemen entsprechen (BIP).

Das Logging ist sehr umfangreich und stellt immer nur eine Momentaufnahme dar.

Screenshot des HTML-Client mit dem man Farmer und Worker beobachten kann.

Die Config Datei

So könnte eine farmer.cfg Datei aussehen:

2 
5000 
6 
1.05 
20.6 
50.0 
500 
3000 
127.0.0.1 61001 
127.0.0.1 61002 
127.0.0.1 61003 
127.0.0.1 61004 

Die erste Zeile gibt an, wie viele Worker, die am Dateiende aufgelistet sind, genommen werden sollen. In diesem Beispiel sind es zwei: der Worker mit Port 61001 und der mit 61002.

Die zweite Zeile gibt in ms an, wie lange jeder Job auf einem Worker laufen darf. Die Zeit für das Lösen des vorangestellten Simplex-Verfahrens ist hier nicht enthalten.

Die dritte Zeile gibt an, bis zu wie viele Variablen bzw. Projekte vorbelegt werden sollen, sollte das Zeitlimit auf dem Worker überschritten werden.

Die vierte Zeile sollte man besser auf 1.0 stellen. Dieser Wert ist ein Faktor, mit dem bei jeder Überschreitung des Zeitlimits das Zeitlimit verändert wird. Streng genommen kann man so das Limit mit einem Wert kleiner 1 auch herunter setzten.

Die beiden nächsten Werte sind Prozentangaben, ab welcher Vorbelegung die Jobs via Tiefensuche abgearbeitet werden sollen bzw. ab wann die Zeitbeschränkung aufgehoben wird und ein Presolver eingesetzt werden darf.

Die Zeile mit der 500 bedeutet, dass im 500ms Tackt der Farmer die Worker nach neuen, bisher besten Lösungen abfragt und seine bekannte bisher beste Lösung dem Worker mitteilt. Dieser Update- oder Sync-Intervall erfagt auch die Speichernutzung des Workers, um dies mit loggen zu können.

Die 3000 bedeutet, dass alle 3 Sekunden eine Logginginfo auf stderr ausgegeben wird. Erst am ende gibt der Farmer das Ergebnis auf stdout aus. Dieser Intervall wird auch für das Informieren des HTML-Client genommen. In dem HTML-Client ist via Polling 1000ms eingestellt, um die Logging-Infos ab zu fragen. Auch hier werden dann trotzdem nur die Infos, die alle 3s aufgezeichnet werden, übertragen.

GANZ WICHTIG: hinter jeder Zeile sollte ein LEERFELD sein! Manche Editoren neigen dazu, dieses Leerfeld zu entfernen. Ohne dieses Leerfeld hatte ich Probleme.

Beispiel: Aufruf der Worker

Starten von 8 Workern, mit je 800MB, die diese zum allokieren von Speicher nutzen dürfen:

./worker 61001 800 &
./worker 61002 800 &
./worker 61003 800 &
./worker 61004 800 &

Beispiel: Aufruf des Farmers

./farmer Instances/OR10x100-0.50_4.dat.cplex farmer.cfg

Kompilieren

make idl
make

Aufräumen

make clean-idl
make clean

Veränderungen gegenüber Bachelorarbeit

  • die Dateien der Problem-Instanzen werden nur noch im cplex oder den beiden MIPLIB-Dateiformaten eingelesen
  • Die Worker, und nicht mehr der Farmer, erzeugen die neuen Jobs
  • Das retten einer bisher besten Schranke nach einer Zeitüberschreitung bei einem Worker wurde entfernt. Es war so langsam, dass es keine Geschwindigkeitsvorteile hatte.
  • Es werden je Vorbelegung die Jobs mit höherer Simplexlösung bevorzugt
  • Code vereinfacht
    • Bounded Buffer durch etwas schlankeres ersetzt
    • Worker nicht mehr als Daemon startbar
    • kein Wrapper für Windows und Mac mehr drin (prinzipiell ist Code aber weiterhin leicht portierbar)
    • kein static linking mehr drin
  • bei Workern ist beim Starten in MB ein limit an zu geben, wann dieser abbrechen soll/darf
  • Logging des Speicherverbrauchs der Worker (in %)
  • Config-Datei für Farmer
  • es kann in Prozent angegeben werden, ab wie viel Vorbelegung keine Breitensuche, sondern eine Tiefensuche gestartet werden soll
  • mit einer Prozentangabe bzgl. der Vorbelegung kann man das Zeitlimit der worker auf unendlich stellen. In dem Fall setzt auch erst der Presolver ein.
  • Alles wurde von INT und BOOL auf DOUBLE gestellt, um möglichst nahe an die Funktionen von glpk zu kommen, die Double Werte erwarten.
  • Optimierung der Daten bzgl. dünn besetzter Matrizen
  • Vorbelegung geschieht nicht mehr durch Binäres Array, sondern es werden nicht-ganzzahlen Werte der Simplex-Lösung auf- bzw. abgerundet
  • Projekte werden nicht mehr nach Profitdichte sortiert
  • Datenstruktur bei thrift-Übertragung für glpk verallgemeinert
  • farmer ist mit einem thrift-Server bestückt, der Logging-Infos an einen html-Client sendet

Issues

  • IP und MIP scheint noch nicht korrekt verarbeitet zu werden
  • Mit Minimierungsproblemen noch nicht hinreichend getestet
  • zu langsam bzw. nicht für alle MIPLIB Probleme brauchbar
  • kein dynamisches bzw. inteligentes Job Balancing

Licence

Copyright © 2016, Jochen Peters (Krefeld) All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.