Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

[Schwer bis Masochistisch]: Erzeuger-Verbraucher-Problem

Diskussion: [Schwer bis Masochistisch]: Erzeuger-Verbraucher-Problem im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Eingereicht von GrafZahl: --------------------------------- Schwierigkeitsgrad: Schwer bis Masochistisch Thema: Erzeuger-Verbraucher-Problem Aufgabe ist es eine Simulation des folgenden Scenarios zu ...

Like Tree1Likes
  • 1 Post By HoelShare

Antwort
Alt 21.10.10, 19:17   #1 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard [Schwer bis Masochistisch]: Erzeuger-Verbraucher-Problem

Anzeige

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)
-----------------------------------

__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 28.12.10, 16:01   #2 (permalink)
 
Registriert seit: 04.12.08
xpecs Leistung: Facit NTK
Likes: 0
Standard

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

gudi gudi xpecs
xpecs ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 10.01.11, 22:37   #3 (permalink)
 
Registriert seit: 02.09.10
DarkMozart Leistung: Facit NTK
Likes: 0
Standard

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???
DarkMozart ist offline   Mit Zitat antworten
Alt 11.01.11, 00:02   #4 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

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
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 11.01.11, 00:15   #5 (permalink)
 
Registriert seit: 02.09.10
DarkMozart Leistung: Facit NTK
Likes: 0
Standard

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...

Geändert von DarkMozart (19.01.11 um 00:52 Uhr)
DarkMozart ist offline   Mit Zitat antworten
Alt 22.02.11, 15:20   #6 (permalink)
 
Registriert seit: 22.02.11
slowfly Leistung: Facit NTK
Likes: 0
Standard 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
slowfly ist offline   Mit Zitat antworten
Alt 22.02.11, 18:41   #7 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

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 ...
Angehängte Dateien
Dateityp: zip TankstellenSimuBeispiel.zip (137,6 KB, 32x aufgerufen)
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 08.07.11, 16:32   #8 (permalink)
 
Registriert seit: 08.07.11
_Sakul_ Leistung: Facit NTK
Likes: 0
Standard

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
_Sakul_ ist offline   Mit Zitat antworten
Alt 10.10.11, 16:26   #9 (permalink)
 
Benutzerbild von Sleepprogger
 
Registriert seit: 17.10.09
Sleepprogger Leistung: Facit NTK
Likes: 10
Standard

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?
Sleepprogger ist offline   Mit Zitat antworten
Alt 10.10.11, 22:34   #10 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

das bleibt wohl deinem wunsch nach mehr oder weniger realismus überlassen ...
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 31.10.11, 12:37   #11 (permalink)
 
Registriert seit: 28.10.11
HoelShare Leistung: Facit NTK
Likes: 1
Standard

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.
Angehängte Dateien
Dateityp: zip Erzeuger_Verbraucher.zip (53,3 KB, 33x aufgerufen)
3X!_d0S likes this.

Geändert von HoelShare (03.11.11 um 09:29 Uhr)
HoelShare ist offline   Mit Zitat antworten
Alt 11.11.11, 19:49   #12 (permalink)
 
Registriert seit: 20.08.11
Stiepen Leistung: Facit NTK
Likes: 0
Standard

Nicht schlecht, leider ist mein Mauszeiger im Programm nicht zu sehen, so dass ich die Steuerkonsole nicht bedienen kann
kannst du das ändern?
Stiepen ist offline   Mit Zitat antworten
Alt 19.11.11, 18:17   #13 (permalink)
 
Registriert seit: 28.10.11
HoelShare Leistung: Facit NTK
Likes: 1
Standard

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...
HoelShare ist offline   Mit Zitat antworten
Alt 19.11.11, 22:27   #14 (permalink)
Senior Member
 
Benutzerbild von Chakky
 
Registriert seit: 28.10.03
Chakky Leistung: 8086
Chakky eine Nachricht über ICQ schicken
Likes: 110
Standard

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!
__________________
cu
Chakky

we are dreaming in digital
we are living in realtime
we are thinking in binary
we are talking in IP
welcome to our world
Chakky ist offline   Mit Zitat antworten
Alt 20.11.11, 21:34   #15 (permalink)
 
Registriert seit: 28.10.11
HoelShare Leistung: Facit NTK
Likes: 1
Standard

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...
HoelShare ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » [Schwer bis Masochistisch]: Erzeuger-Verbraucher-Problem
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61