https://www.get-in-it.de/coding-challenge
Da die Problemstellung direkt an das Rucksackproblem erinnert, wurde als Anlehnung an dieses ein Algorithmus mit dynamischer Programmierung gewählt. Dieser sollte im vergleich zu greedy Lösungen die Teilprobleme besser Lösen. Es werden bewusst die Laster nacheinander beladen. Dies kann zwar dazu führen, dass die Kombination der optimalen Teillösungen nicht die optimale gesamtlösung darstellt, bietet jedoch eine gute Näherung und lässt ohne modifikation das Hinzufügen weiterer Laster zu.
Optimale Verteilung der Hardware (inkl. Gesamtnutzen) findet sich im Repository unter resultIterative10.json
.
Diese Datei wurde aufgrund von Speicherplatz Limitierungen auf während der Berechnung auf 10 Gramm gerundet.
Eine genauere Berechnung kann erfolgen, indem in der Klasse Main Zeile 9 ein kommentiert wird.
Die beste von mir errechnete Ladeliste erreicht einen Gesamtwert von 73394
.
- Die zu verladenden Items und verfügbaren Trucks können im
data
Ordner verändert werden. Dieser muss sich zum Ausführungszeitpunkt im aktuellen Verzeichnis befinden - in der neusten Pipeline des Repository kann die vollständige jar als Artefakt runter geladen werden (anlegen des data Ordners im selben Verzeichnis notwendig).
- diese jar muss sich zum Zeitpunkt der Ausführung im selben Verzeichnis befinden, wie der data Ordner mit den json Dateien für die Items und Trucks Alternativ kann auch:
- mittels maven sollten die Lifecycle Methoden
clean
undinstall
ausgeführt werden- (dies kann z.B. über die intellij IDE über den maven Reiter geschehen)
- in intellij kann es auch erforderlich sein über
Project Structure
die Project SDK auszuwählen (java 13 wurde zum Erstellen verwendet)
- Nun kann die Anwendung über die
Main
Klasse insrc/main/java/coding/challenge
gestated werden.