Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.01.2015, 17:41

Logistik in Tile-Based Game - Transportaufgaben verteilen

Hallo miteinander...

...mein Spielchen schreitet in der Entwicklung gut voran, nun stoße ich auf ein paar interessante Herausforderungen.

Und zwar geht es um die Logistik. Ähnlich wie in vielen Strategiespielen bei denen Gebäude gebaut und Waren produziert werden, müssen Rohstoffe an und Produkte abtransportiert werden. In meinem Spiel sind bereits Produzenten und Verbraucher sowie eine Wegfindung implementiert. Prinzipiell hätte ich schon Ideen für einen Lösungsansatz, aber evtl. gibt es ja eine allgemeine ausgereifte Vorgehensweise für derartige Aufgaben.

In meinem Fall sind folgende Faktoren zu berücksichtigen:

1. Jedes Gebäude kann gleichzeitig 1 oder mehrere erzeugen oder benötigen.
2. Für jeden erzeugten oder benötigten Warentyp hat das Gebäude ein kleines lokales Lager.
3. die Transporter (Gabelstapler o.Ä.) können eine bestimmte Menge einer Ware transportieren, theoretisch auch verschiedene Waren gleichzeitig.

Meine Überlegung war bisher ein Gebäude beim Unterschreiten eines Mindestbestandes an Rohstoffen eine Anforderung senden zu lassen. Eine Programmklasse (ich nenne sie mal Disponent) sammelt diese Anfragen und ermittelt den besten Lieferanten oder den entsprechenden Lagerplatz.

Ist dieser Ansatz eurer Meinung nach korrekt, oder gibt es elegantere Lösungsansätze oder bereits eine allgemein gültige Lösung?

Hier die Projektbeschreibung

CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

2

03.01.2015, 18:23

Weil es eine Wirtschaftssimulation sein soll, denke ich, dass du das so real wie möglich machen musst! Da finde ich diene Idee schon ganz gut. Ich wäre noch für Zeitverzögerung - die Leute sind nicht so schnell. ;)

EDIT: Was dir noch fehlt ist eine Lagerverwaltung: Die Gebäudelager müssen bei der Anfrage angeben, wie viel sie brauchen. Je mehr sie Lagern, desto teurer wird das und je weniger sie Lagern, desto schneller gibt es Engpässe. Heutzutage wird sowas ja aus dem Verbrauch berechnet - das wäre ein realistischer Ansatz. Auch da musst du dir überlegen, ob das Programm sofort "perfekt" berechnet oder es mehrere Anfragen braucht, bis die korrekte Anfragemenge herausgefunden wurde.
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

3

03.01.2015, 22:18

Bei solchen Fragestellungen endet man recht schnell bei Optimierungsproblemen, die sich nur kniffelig lösen lassen (d.h. die optimale Lösung zu finden ist selbst mit den besten Algorithmen extrem rechenaufwändig).
Aber du brauchst ja gar keine optimale Lösung. Vielleicht kann ja auch der Spieler ein Teil des Optimierens übernehmen, als Spielelement quasi.
Ich finde auch eigentlich das System gut, dass Anno benutzt: Die weiterverarbeitenden Betriebe (Schmied) haben pro Gebäude je einen Typen, der Rohstoffe aus der nächstgelegenen Quelle holt. Das macht er einfach nacheinander, bzw. wie die Rohstoffe gerade gebraucht werden. Die Lagerhäuser haben eine feste Anzahl an Karren, die Güter von Produzenten abholen. Wenn irgendwo etwas auf Lager ist, wird ein Karren losgeschickt und holt den Kram ab, wenn mehrere Produzenten Waren fertig haben, wird geschaut, wessen Lager voller ist. Man kann dabei noch ein wenig mit den Grenzwerten spielen, z.b. kann fertige Nahrung sofort abgeholt werden, Eisen ist aber ein Produkt das typischerweise von einem anderen Produzenten, der sich vermutlich in der Nähe befindet, benötigt wird, also lässt man es zunächst dort. Erst wenn das Lager fast voll ist, kann man davon ausgehen, dass es nicht so schnell von Produzenten abgeholt wird, wie es produziert wird, also wird es ins Lager gebracht. Man hat also durch eine sehr sehr einfache Abfrage ein relativ elegantes Verhalten. Natürlich kann es ab und zu sein, dass die Karren quatsch machen, aber in einer gut eingespielten Produktion funktioniert es eigentlich immer nach der Startphase reibungslos.
Lieber dumm fragen, als dumm bleiben!

4

04.01.2015, 19:23

Danke, das sind sehr interessante Ansätze!

Hab auch schon ein Konzept im Kopf und werde euch mitteilen wenn es fertig ist.!

5

06.01.2015, 10:47

Logistik soweit fertig

Oki, habe das Konzept nun fertig und implementiert:

Ich habe mich doch für die Variante mit den Optimiertungsproblemen entschieden. Den Anspruch auf die perfekte Lösung habe ich nicht, aber der Algorithmus liefert sehr vernünftige und nachvollziehbare Entscheidungen. Ich bin da folgendermaßen vorgegangen:

1. Ein Gebäude checkt regelmäßig den Lagerbestand seiner Rohstoffe und Produkte.
2. Bei weniger als 20% Rohstoffe oder mehr als 80% Produkte im Lager (die Grenzwerte lasse ich evtl. auch vom Spieler ändern), wird eine Transportanfrage verschickt und ein Flag gesetzt.
3. Die Disponent-Klasse sucht dann einen Abnehmer mit freiem Lager, bzw. Lieferanten, Rohstofflager für die entsprechende Ware.
3. Es wird der Transporter (bei mir Gabelstapler) mit den wenigsten Aufträgen in der Warteschlange gesucht.
4. Ein Auftrag wird erstellt (Klasse mit Start-Zielobjekt, Warentyp, Menge) und dem Gabelstapler hinzugefügt
5. Der Gabelstapler findet dank Dijkstra und Hilfe der Forumskollegen seinen Weg und erfüllt seinen Auftrag.

Auf meiner Testmap funktioniert das schon ganz gut. Wird natürlich interessant zu sehen, wie sich der Mechanismus schlägt, wenn eine Vielzahl von Gebäuden und Staplern unterwegs sind.

Jonathan hat sicher recht damit, dass man da noch viel optimieren kann, aber das sehe ich als Raum für Verbesserung und nicht als Problem. Künftig werde ich wohl auch noch die Entfernungen berücksichtigen, damit möglichst kurze Wege zurück gelegt werden. Hauptsache ist erstmal, dass die Waren überhaupt da ankommen wo sie gebraucht werden.

Sobald der Warenkreislauf grundlegend funktioniert, werde ich auch mal eine Alpha-Version zum Ausprobieren hochladen.... :-)

Werbeanzeige