[Schwer bis Masochistisch]: Erzeuger-Verbraucher-Problem

CDW

0
Mitarbeiter
Eingereicht von GrafZahl:
---------------------------------
Schwierigkeitsgrad: Schwer bis Masochistisch
Thema: Erzeuger-Verbraucher-Problem

Aufgabe ist es eine Simulation des folgenden Scenarios zu implementieren:


Es gibt Kunden die an Tankstellen Treibstoff kaufen.
Es gibt Tankstellen die von Zwischenlagern Treibstoff beziehen (per LKW)
Es gibt Zwischenlager die von Rafinerien Treibstoff beziehen (per Zug)

Tankstellen können 1000 Einheiten Lagern
Zwischenlager können 25000 Einheiten Lagern
Refinerien können nach belieben Treibstoff erzeugen

Ein LKW kann 800 Einheiten transportieren
Ein Zug kann 20000 Einheiten transportieren

egal ob tankstelle, lager, rafinerie, zug, lkw oder kunde, jedes objekt hat eine position auf einer 2d karte

kunden fahren der einfachheit halber zufällig zwischen den tankstellen hin und her. an einer tankstelle kaufen sie immer eine einheit treibstoff (alternativ abhänig von der gefahrenen distanz)

fahrzeuge haben geschwindigkeiten (und damit fahrzeiten)

tankstellen brauchen eine logik, die eine geregelte versorgung ermöglicht (wartende kunden sind nach möglichkeit zu vermeiden)

zwischenlager brauchen eine logik, die eine geregelte versorgung ermöglicht (wartende tankstellen sind auch zu vermeiden)

züge und lkw müssen entsprechend den transport übernehmen.

verbleibender tankinhalt eines zug/lkw sollte beachtet werden, falls am ziel mangels freier tanks nicht abgeladen werden kann

es sollte nur eine begrenzte anzahl an zügen / lkw zur verfügung stehen

gesucht ist eine Simulation, die die geforderten details umsetzt, idealer weise in einer Multithread-anwendung.


um die schwierigkeit nach unten hin anzupassen, kann man je nach gewünschter schwierigkeit auf einzelne punkte der anforderungen verzichten, sobald diese probleme machen (für einsteiger evtl beschränkt auf eine einzelne tankstelle, die kunden abfertigt, und alle nase lang von einem lkw beliefert wird)

um die schwierigkeit nach oben anzupassen (*g*) kann man auch nach belieben weitere einschränkungen (aka mehr realismus) fordern...
(verschiedene treibstoffe, zapfsäulen,berufsverkehr,stau,minimale anzahl der transportmittel,...,oder für die masochisten: eine GUI)
-----------------------------------
 
Eine wirklich tolle Aufgabe. Schade, dass sich noch niemand damit richtig befasst zu haben scheint. Ich werde mich dem Problem mal annehmen. So kann ich gleich nen bisschen mit OpenGl versuchen rumzuspielen :D

gudi gudi xpecs
 
Oh mann...
kann mir mal jemand auf die Sprünge helfen?
Ich versuch mich grad an der Aufgabe und hänge bei einer Berechnung:
Und zwar sollen die Fahrzeuge sich ja bewegen. Der Einfachheit halber mach ich das erst mal nur auf gerader Strecke. Und jetzt zum Problem:
Ich habe den Punkt A, an dem befindet sich das Fahrzeug im Moment. Weiterhin habe ich einen Punkt B, der ist das Ziel. Die Koordinaten beider Punkte sind bekannt. (jeweils x und y). Zu guter Letzt habe ich die Geschwindigkeit g.
Innerhalb einer gewissen Zeit muss sich das Fahrzeug also von A zu B hinbewegen, da es die komplette Strecke aber nicht auf einmal zurücklegt muss ein "Zwischenstop" an Punkt C eingelegt werden, dessen Entfernung von A durch g festgelegt wird.
Soweit ist auch alles klar, nur wie berechne ich die Koordinaten von Punkt C???:confused:
 
das läuft auf vektorrechnung hinaus:

einen punkt (x,y) kann man auch als ortsvektor vom koordinatenusrprung zu eben diesem punkt verstehen ...

die differenz von 2 ortsvektoren liefert dir den vektor zwischen den beiden punkten (insbesondere ist die länge des vektors gleich der distanz zwischen den punkten)

nennen wir diesen vektor mal v=(vx,vy) ... seine länge bekommst du über den satz des pythagoras sqrt(vx*vx + vy*vy) ... mit der bekannten geschwindigkeit (strecke/zeit) kannst du für eine gegebene zeit berechnen wie weit sich ein objekt bewegt ... die länge des vektors durch die berechnete zurückgelegte strecke nenne ich mal f ... mit f * v = (f*vx,f*vy) bekommst du nun einen neuen vektor ... der zeigt von deinem abfahrtsort auf den punkt wo sich das objekt in der fraglichen zeit hinbewegt hat ...

natürlich bekommst du damit ein neues problem: wann ist das objekt an seinem ziel angekommen, und wie verhinderst du, dass es sich über das ziel hinaus bewegt ... aber ich denke dafür findest du eine lösung ;)
 
Danke, ich denke da kann ich was mit anfangen...
Ich hab irgendwie befürchtet, das ich da mit Vectoren rechnen muss, bin da aber auf keinen grünen Zweig gekommen (Schule ist dann doch schon ein paar Tage her...)

Zu dem anderen Problem:
Ich glaub, da lass ich mir per Überprüfung der neuen Position was einfallen.
Bin ja mal gespannt, wo das noch hinführt.

Jetzt verdrehe ich mein Hirn erst mal mit Vektoren ;-)


edit:
Break hab wohl irgendwo nen gravierenden Denkfehler - nix geht. Werd das erst mal auf Eis legen und später mal noch mal versuchen...
 
Zuletzt bearbeitet:
Offene Fragen

Vorneweg: interesting!

Noch ein paar Gedanken:
Die Geschwindigkeiten könnte man definieren. So fährt z.B. ein Tankwagen mit 80, ein normaler Kunde mit 100, ein Zug mit 160 durch die Gegend.

Darauf folgt, dass man dem Koordinatensystem einen Massstab zuweisen muss. Beispiel, geht man von 0,0 nach 0,1 ist das ein Kilometer.

Falls abhängig von gefahrener Distanz (Kunde): Dann müsste man die maxmiale Kapazität eines Kunden und dessen Verbrauch definieren. Ein Kunde fasst 10 Einheiten, pro Einheit fährt er 50km, was 500 km pro Tank ausmacht?

Die Relationen zwischen Koordinatensystem, Massstag, Geschwindigkeit, Verbrauch und Fassungsvermögen von Treibstoff ist ziemlich mühsam. Darauf achten, dass die Werte dieser Attribute sich nicht beissen. Also, dass ein Kunde seinen Tank nicht nach einem Kilometer verbraucht oder der Massstab so angelegt ist, dass ein Kunde seinen Tank immer leerfährt, ohne eine andere Tankstelle überhaupt jemals erreichen zu können.

Es soll zwar eine begrenzte Anzahl Züge und LKW's zur Verfügung stellen, aber in welchem Verhältnis zu den Kunden? Ist natürlich von diversen Faktoren (Anz Tankstellen/Zwischenlager/etc, Koordinaten, etc).

grüsse
slowy
 
naja ... da die geschwindigkeiten relative aussagen untereinander zulassen (ein lkw ist 0,8 mal so schnell wie ein kunde) braucht man das maß an dieser stelle noch nicht zwingend, wohl aber wenn es um die erreichbaren orte im bezug auf den tankinhalt geht ...



wen das ganze abschreckt, weil man "einfach keinen anfang findet", oder wer für den anfang eine anregung sucht ... ich hätte hier ein VS2010 c# projekt ...
 
klingt sehr intressant!!

so ein ähnliches beispiel habe ich mir vor kurzem auch mal überlegt,... aber noch nicht damit begonnen (es wurde in meinem kopf auch immer komplexer und komplexer,... da ging es einfach nur um eine verkehrssimulation welche stoßzeiten, reiseverkehr, baustellen auf der autobahn unfälle, etc,... durch "zufall" (naja halt irgendwie nach irgendwelchen statistiken z.b. die chance dass bei dieser kreuzung ein unfall entsteht beträgt 0.001% etc.) würde das dann alles gesteuert werden.

naja und irgendwie hab ich dann nie damit angefangen :)

aber ich werd mich dann bald mal drann setzen das erzeuger-verbraucher-problem zu lösen... (obwohl ich eigentlich noch ziemlicher anfänger bin)

dann bis bald :)

lg lukas
 
Vielen Dank für die Aufgabe.
Damit habe ich auf den nächsten Bahnfahrten auf jeden Fall was zu tun.

Soll es Straßen/Schienen geben oder fahren die Fahrzeuge einfach kreuz und quer?
 
Vielen dank für die Aufgabe
bin noch ein anfänger und deswegen wollte ich eure meinung hören...
für verbesserungen bin ich offen

edit: auf ENTER lässt sich ein Menü öffnen, mit dem man leichter Autos, Züge, usw. verfolgen kann.
 
Zuletzt bearbeitet:
Nicht schlecht, leider ist mein Mauszeiger im Programm nicht zu sehen, so dass ich die Steuerkonsole nicht bedienen kann :(
kannst du das ändern?
 
hat noch jemand diese probleme?
weil bei mir ist der mauszeiger zu sehen und ich kann auch alles bedienen
auch an einem anderen pc getestet...
 
Also bei mir geht es...nur sehr groß, man muss sehr weit scrollen um mehr als nur eine Tankstelle oder so zu sehen. Zoom funktion?

Aber respekt scheint ja super zu funktioniere!
 
die karten größe kann im nachhinein noch verändert werden... einfach die datei mit win rar oder ähnlichem öffenen und die Einstellungen.txt datei bearbeiten...
 
Zurück
Oben