Die mathematische Lösung zu einem Flash-Spiel

Neue Frage »

Siddhartha Auf diesen Beitrag antworten »
Die mathematische Lösung zu einem Flash-Spiel
Hallo.

Es geht um dieses Flash Spiel.

Wir haben am rechten Ufer anfangs 3 Priester und 3 Teufel.
Ziel ist es alle sechs an das linke Ufer zu bringen indem wir die Fähre nutzen.
Die Fähre kann maximal zwei Personen gleichzeitig tragen und mindestens eine Person muss in ihr sitzen damit sie den Fluss überqueren und auf die jeweils andere Seite fahren kann.
Wenn Anzahl der Priester an einer Seite geringer ist als die Anzahl der Teufel an der Seite, dann sterben die Priester und das Spiel ist verloren.
Gezählt wird jeweils die Bootsbesatzung und die Personen an Land.

Jetzt strebe ich eine mathematische Lösung des Problems an.

Wir starten am rechten Ufer wo 3*x+3*y stehen; mit Priestern als x und den Teufeln als y.
Die Besatzung der Fähre liegt im Bereich [1;2].
Wenn a*x an einer Seite geringer ist als b*y ist das Spiel verloren.(a,b in Z+)

Hat jemand Rat wie ich weiter verfahren kann?
Mazze Auf diesen Beitrag antworten »

Das ist doch ein klassisches Problem der Problemraumsuche. Man definiert sich Zustände und Aktionen und bekommt so einen Zustandsgraphen (später Baum). Was man dann tut ist Suchalgorithmen anzusetzen. Einige wären Breitensuche oder Tiefensuche. Man muss sich dann noch zusätzlich merken in welchen Zuständen man schon war und erhält einen Suchbaum, der dadurch das die Teufel und Priester endlich in Ihrer Anzahl sind, auch endlich wird (wenngleich er sehr groß sein kann). Ich würde aber das Problem direkt für beliebig viele Priester und Teufel lösen, da es der gleiche Algorithmus sein wird Augenzwinkern . Dann kann man natürlich die Bootsgröße auch variabel halten. Ich würde es so machen

Zustand definieren :

Ein Zustand zeichnet sich durch die Anzahl der Teufel/Priester an den Ufern A und B aus und durch die Position des Bootes und deren Fahrer. Also




Dabei drückt B aus, ob der Fahrer ein Teufel oder Priester ist und an welchem Ufer das Boot ist. Man kann ohne Einschränkung annehmen das ein Fahrerwechsel immer an der Seite wo das Boot abfährt statt findet. Das ist nur zur Vereinfachung, man könnte die Fahrer auch wechseln wenn das Boot ankommt, das hat aber für den Problemraum nur eine Umordnung zur Folge, weshalb wir ersteres annehmen. Als nächstes brauchen wir eine Zustandsüberführung , eine Aktion.

Aktionen definieren :

Aktionen überführen einen Zustand in einen Folgezustand. Mit



bezeichne ich die Differenz der Priester/Teufel auf den Seiten, oder anders gesprochen, die Priester die Wir benutzen.





Hierbei musst Du die Übergangsfunktion A natürlich noch einschränken. Es können nicht mehr Teufel verladen werden als da sind usw. Wichtig ist auch ob Du bereits bei der Aktion entscheidest das Du in einen falschen Zustand kommst, oder erst im betreffenden Zustand erkennst das Du einen Schritt zurück musst (eventuel auch mehr). f(x),g(x) drücken den Bootsfahrer aus. Wenn ich den Bootsfahrer wechsle, bekommt eine Seite einen dazu und die andere einen abgezogen. Das ergibt also





Ich bestimme mit einer Aktion also wieviele Teufel, Priester ich verlade. Das ganze wird ein wenig aufgebläht wenn man noch erlaubt das die Passagiere auf dem Boot bleiben dürfen. Das Ganze ist hier natürlich stark formalisiert. Aber prinzipiell ist die Idee immer : Zustände definieren, Zustandsübergänge definieren, Baumsuche. Wichtig ist hier aber wirklich das Du Dir die Zustände merkst in denen Du schon warst, sonst entstehen zykel. Die Frage ist natürlich ob Du schonmal sowas wie Breiten-, oder Tiefensuche behandelt hattest. Aber wie gesagt, das Problem ist klassich dafür.

edit:

Man muss natürlich auch einen Ziel- und Anfangszustand definieren. Sagen wir wir haben n Teufel,m Priester mit m > n und einen Teufel als Fahrer (also n + 1 Teufel), dann ist der Anfagszustand



der Zielzustand (an dem der Algorithmus terminiert)



Hierbei ist es egal wer im Boot am ende sitzt, solange das Boot auf Seite B ist. Delta ist einfach eine Abhängige vom Bootsman und der entsprechenden Gruppe. Man könnte alternativ auch zulassen das keiner im Boot sitzt.
Siddhartha Auf diesen Beitrag antworten »

Solche Berechnungen sind mir völlig fremd...

ich werde mich mal einarbeiten; vielleicht verstehe ich es ja sogar.Augenzwinkern

Danke für die offenbar ausführliche Erklärung.
Mazze Auf diesen Beitrag antworten »

Das Ganze ist nur eine Formalisierung, eines "Systematisch-alle-Möglichkeiten-durchprobieren-Verfahren". Man muss es genau aufschreiben , damit man sich mehr um die implementierung und weniger um die Problemlösung kümmern kann.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »