AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Monopoly-Simulator
Thema durchsuchen
Ansicht
Themen-Optionen

Monopoly-Simulator

Ein Thema von Gravitar · begonnen am 26. Nov 2013 · letzter Beitrag vom 2. Dez 2013
Antwort Antwort
Seite 4 von 4   « Erste     234   
Gravitar
Registriert seit: 8. Okt 2006
Nachdem ich letztens mit meinem Sohn so ein Spiel rund um das Kaufen von Immobilien gespielt habe, kam die Frage auf, welche Straßen mann eigentlich vorrangig kaufen sollte.

Also ran an Delphi und einen Simulator gebaut. Dieser betrachtet das Brett inkl. aller Ereignis- und Gemeinschaftskarten und würfelt sich so durch die Runden. Je Feld wird ein Zähler erhöht, sobald die Spielfigur dieses Feld erreicht. Wenn durch eine Karte ein anderes Ziel angesteuert werden muss, werden auch die Zähler für Ziel Nr. 1 (Ereignis- oder Gemeinschaftskarte) und Ziel Nr. 2 (z.B. gehe 3 Felder zurück) hochgezählt.

Als Ergebnis kommt dann eine Top-Down-Liste aller kaufbaren Felder heraus. Die %-Werte zeigen an, wie weit sich das jeweilige Feld vom statistischen Mittel entfernt hat.

Mal sehen, ob mir diese Erkenntnisse beim nächsten Spiel helfen

Die Datei enthält die EXE und die Sourcen. EXE einfach irgendwohin kopieren. Läuft ohne Installation.

Update Version 2:

Hier ein Update mit folgenden Erweiterungen:

- Farben der Felder werden jetzt in den Ergebnissen angezeigt
- Die Simulationsergebnisse können jetzt zusätzlich nach "Farben" gruppiert werden. Dadurch kann man erkennen, wie Wahrscheinlich das Landen auf mindestens einem der zusammengehörigen Felder ist.
- Die Bezeichnung der Felder und die Farben sind in 2 CSV-Dateien ausgelagert, die bei Systemstart eingelesen werden.

Fehlerbereinigung:
- Das Feld "Los" wurde in der alten Version falsch gezählt.

Viel Spass beim testen/ausprobieren/anwenden (Weihnachtszeit ist ja auch immer Spielzeit!)
Angehängte Dateien
Dateityp: zip MarkowUndDerImmobilienhaiSimulator.zip (247,5 KB, 49x aufgerufen)
Dateityp: zip MarkowUndDerImmobilienhai,V2.zip (264,5 KB, 31x aufgerufen)

Geändert von Gravitar (25. Sep 2014 um 15:37 Uhr) Grund: Das Risiko gehe ich ein
 
Gravitar

 
Delphi 7 Enterprise
 
#31
  Alt 28. Nov 2013, 08:01
Mhm,

der Ubuntu-Disclaimer gefällt mir eigentlich sehr gut. Vielleicht sollte ich ihn in den Startbeitrag aufnehmen. In etwa so:

Disclaimer: In case you are either 1) a complete idiot; or 2) a lawyer; or 3) both, please be aware that this program is not affiliated with or approved by Hasbro Inc. This program analyze only the probability of .......
  Mit Zitat antworten Zitat
Horst_
 
#32
  Alt 28. Nov 2013, 10:22
Hallo,

ich habe, wie oben im Edit geschrieben,extrem viele Gefängnisaufenthalte festgestellt. Die 137 % rühren daher, dass nicht zwischen Aufenthalt und Besuch unterschieden wird und Los ist unterrepräsentiert, obwohl es doch auch zwei Karten "Rücke vor bis auf Los gibt", wie auch " Gehe in das Gefängnis,...".O.K. Das Feld 30 gehe in das Gefängnis wirkt ja auch.

Ich sollte die neue Version laden...

Gruß Horst
Edit:
Die Strassennamen hätte man aber auch ändern müssen, oder nicht.
Monopoly ist doch schon so lange im Markt, sind da nich schon einige Schutzfristen überschritten, Patente gelten auch nicht ewig.

Geändert von Horst_ (28. Nov 2013 um 10:28 Uhr)
  Mit Zitat antworten Zitat
Gravitar

 
Delphi 7 Enterprise
 
#33
  Alt 28. Nov 2013, 10:45
Hallo Horst,

Hallo,

ich habe, wie oben im Edit geschrieben,extrem viele Gefängnisaufenthalte festgestellt. Die 137 % rühren daher, dass nicht zwischen Aufenthalt und Besuch unterschieden wird
Ja, das ist korrekt. Für die Entscheidung, welche Straßen man vorrangig kaufen sollte, spielt dies auf keine Rolle. Trotzdem gibt es 2 Karten mit "gehe in das Gefängnis" und das Feld 30. Das scheint in Kombination mit der Häufigkeit der Wurfverteilung (7 deutlich wahrscheinlicher als 12 oder 2) zu diesem Ergebnis zu führen.



und Los ist unterrepräsentiert, obwohl es doch auch zwei Karten "Rücke vor bis auf Los gibt",
Die Karten, "Rücke vor bis auf Los" werden auch berücksichtigt. Trotzdem landet man relativ selten auf Los.


Ich sollte die neue Version laden...
Auf jeden Fall . Da habe ich zwar nur den Straßennamen "Eisenstraße" angepasst, aber ansonsten ist alles gleich geblieben.

Aber wie gesagt, vielleicht steckt ja doch noch ein Logikfehler drin....

Die Strassennamen hätte man aber auch ändern müssen, oder nicht.
Also hier vertraue ich einfach auf den gesunden Menschenverstand. Ansonsten müßten sich einige Städte ja auf Prozesse einrichten, die einfach mal ihre Straßen "Parkallee" genannt haben. Oder die Serie "Boardwalk Empire", oder oder oder..

Gruß, Andreas
  Mit Zitat antworten Zitat
Horst_
 
#34
  Alt 28. Nov 2013, 12:56
Hallo,

ich habe das Programm etwas umgestaltet.
Ich zähle jetzt innerhalb und zu guter Letzt bestimme ich Gesamtzahl der Schritte, die wesentlich höher als anz=10^8 ist.
Es war doch schon seltsam, dass man eine weit größere Menge an Straßen mit positiver Abweichung hatte, die überhaupt nicht durch negative Abweichung kompensiert wurden.
Hier sind ab der 15.ten Straße negative Werte, schließlich muss das Gefängnis kompensiert werden.
Das sieht doch besser aus, mit Los weit vorne ( aber ob es stimmt ? ) :
Code:
Straße          Anzahl    prozetualer Anteil
  10 Gefängnis   5.952.244   120,42
  24 Opernplatz   3.178.155   17,69
   0 Los   3.084.935   14,24
  19 Berliner Straße   3.061.491   13,37
  17 Gemeinschaftsfeld   2.974.650   10,16
  18 Wiener Straße   2.940.227   8,88
   5 Südbahnhof   2.901.115   7,43
  15 Westbahnhof   2.868.585   6,23
  20 Frei Parken   2.858.976   5,87
  16 Münchener Straße   2.826.467   4,67
  11 Seestraße   2.806.802   3,94
  21 Theatherstraße   2.804.245   3,85
  22 Ereignisfeld   2.760.306   2,22
  26 Lessingstraße   2.707.650   0,27
  25 Nordbahnhof   2.698.277   -0,08
  23 Museumstraße   2.696.166   -0,16
  27 Schillerstraße   2.684.213   -0,60
  31 Rathausplatz   2.666.454   -1,26
  28 Wasserwerk   2.652.501   -1,77
  33 Gemeinschaftsfeld   2.650.522   -1,85
  30 Gehe in das Gefängnis   2.648.416   -1,93
  39 Schlossallee   2.627.801   -2,69
  29 Goethestraße   2.616.123   -3,12
   1 Badstraße   2.609.801   -3,36
  32 Hauptstraße   2.590.416   -4,07
  35 Hauptbahnhof   2.534.012   -6,16
  14 Neue Straße   2.531.876   -6,24
  34 Bahnhofstraße   2.459.631   -8,92
  13 Hafenstraße   2.448.979   -9,31
   4 Einkommensteuer   2.431.929   -9,94
  12 Elektritzitätswerk   2.386.360   -11,63
   8 Elisenstraße   2.386.330   -11,63
   7 Ereignisfeld   2.373.756   -12,10
   9 Poststraße   2.351.851   -12,91
   6 Chausseestraße   2.326.163   -13,86
  36 Ereignisfeld   2.259.544   -16,33
   3 Turmstraße   2.209.998   -18,16
   2 Gemeinschaftsfeld   2.169.862   -19,65
  38 Zusatzsteuer   2.143.087   -20,64
  37 Parkstraße   2.136.585   -20,88
Gruß Horst

Geändert von Horst_ (28. Nov 2013 um 19:12 Uhr)
  Mit Zitat antworten Zitat
Gravitar

 
Delphi 7 Enterprise
 
#35
  Alt 28. Nov 2013, 14:58
Hallo Horst,

habe mir deine Version mal angeschaut.

Sehr schön ist das Setzen eines Indexes für die Gemeinschafts-/Ereigniskarten. Habe ich auch schon drüber nachgedacht. Ist natürlich deutlich schneller als meine Umsetzung.

Das Thema "Gesamtanzahl der Würfe" ist in der Tag ein Logikfehler in meiner Version gewesen (und damit großes Lob an Dich). Ich habe ganz vergessen, dass die 100 Mio. Würfe durch ein zweites Zielfeld (z.B. erst Polizist und dann Gefängnis) natürlich deutlich höher sind. Damit liegt der Durchschnitt nicht bei 100 Mio. / 40 Felder sonder bei (100 Mio + x) / 40.

Die absolute Anzahl der getroffenen Felder und die Reihenfolge der Häufigkeiten dürfte sich dadurch allerdings nicht ändern.

Kann es sein, dass sich in dieser von dir vorgenommenen Optimierung (übrigens sehr elegant) ein Fehler eingeschlichen hat?

Delphi-Quellcode:
/// Rücke vor bis zum nächsten Bahnhof, wenn du über Los kommst....
    -2 : begin
              Inhalt := Pos DIV 10;
              IF Pos > 34 then
              begin
                dec(Inhalt,3);
                inc(Geld,UeberLos);
              end;
              Pos := Inhalt*10+5;
              inc(feldstat[Pos]);
            end;
Wenn ich das richtig verstehe, wird hier immer auf das Feld 5, 15, 25 oder 35 gesprungen, abhängig davon, in welcher 10er-Range die Spielfigur steht.

Allerdings lautet die Anweisung (jedenfalls in meiner Version) "Rücke vor bis zum nächsten Bahnhof". Wenn also z.B. auf Feld 17 (Gemeinschaftsfeld) diese Karte gezogen wird, müßte eigentlich zu Feld 25 gezogen werden. In deiner Variante wird allerdings Feld 15 angesprungen.

Warum Los sich so dramatisch geändert hat, ist mir noch nicht klar.

Gruß, Andreas
  Mit Zitat antworten Zitat
Horst_
 
#36
  Alt 28. Nov 2013, 17:16
Hallo,

Das mit den Bahnhöfen habe ich jetzt mal geändert:
Delphi-Quellcode:
    -2 : begin
             Inhalt := (Pos+5)DIV 10;
             IF Inhalt > 3 then
             begin
               Inhalt:=0;
               inc(Geld,UeberLos);
             end;
             Pos := Inhalt*10+5;
             inc(feldstat[Pos]);
          end;
Los muss doch häufiger sein, wenn 1/14.5 der Karten "Rücke vor bis auf Los" und es 6 Felder Ereignis/Gemeinschaftsfelder pro Runde gibt.

Gruß Horst
Edit:
Durch das Verbleiben im Gefängnis, wenn man nicht einen Pasch gewürfelt oder dreimal ausgesetzt hat, sinkt die Anzahl der zusätzlichen Bewegungen von 8% auf 1.8%
Code:
 10 Gefängnis        594569   133,58%
 24 Opernplatz        295732    16,18%
  0 Los        290022    13,94%
 18 Wiener Straße        283764    11,48%
 19 Berliner Straße        280244    10,10%
 20 Frei Parken        279403     9,76%
...
Gesammtanzahl      10181887 statt 10000000

Geändert von Horst_ (29. Nov 2013 um 14:59 Uhr) Grund: Neue Datei unten
  Mit Zitat antworten Zitat
Caps
 
#37
  Alt 29. Nov 2013, 14:24
Hm... bzgl. des Verklagtwerdens verhält es sich natürlich so, dass hier eigentlich niemand seinen Namen oder seine Adresse veröffentlichen muss, insofern ist die Umsetzbarkeit oder Durchsetzungsfähigkeit der Klage fraglich - denk ich mir so.
Klar in Zeiten von PRISM ok...

Gruß
Caps
  Mit Zitat antworten Zitat
Horst_
 
#38
  Alt 29. Nov 2013, 14:58
Hallo,


ich möchte nicht für so einen Kokolores verklagt werden.Als würde das Spiel dadurch an Attraktivität verlieren.Es hat ja auch keine Strategie eingebaut und man spielt ja auch nicht.
Ich habe es nochmals abgewandelt und bei Einzelschritt 1000 Schritte machen lassen, damit man auch sieht, dass man nur zu Besuch oder im Gefängnis ist und mal die Chance auf dreimal Pasch nacheinander hat.Ich habe es mit Lazarus 1.0.14 kompiliert, deshalb braucht es auch 4,4 Sekunden für 1e8 Würfen, aber es tut sich fast nichts gegenüber 1e6 Würfen.

Gruß Horst
Angehängte Dateien
Dateityp: zip markow.zip (5,4 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Gravitar

 
Delphi 7 Enterprise
 
#39
  Alt 1. Dez 2013, 15:40
Hier das Update auf die Version 2 (sh. Beitrag #1)
  Mit Zitat antworten Zitat
Horst_
 
#40
  Alt 2. Dez 2013, 12:43
Hallo,

Zitat:
Die Simulationsergebnisse können jetzt zusätzlich nach "Farben" gruppiert werden. Dadurch kann man erkennen, wie Wahrscheinlich das Landen auf mindestens einem der zusammengehörigen Felder ist.
ich dachte man macht eine Simulation und kann zwischen den beiden Ansichten auswählen, da die Daten ja vorhanden, nur anders zusammengefasst werden müssen.

Das Mischen ist immer noch seltsam.Es werden jetzt n-fach per Zufallsindex
benachbarte Karten getauscht.
Aus http://www.delphipraxis.net/1018077-post1.html
Delphi-Quellcode:
// Mischen nach Fisher-Yates
   for i := Low(FNumberList) to High(FNumberList) do begin
     j := i + Random(Length(FNumberList) - i);
     tmp := FNumberList[j];
     FNumberList[j] := FNumberList[i];
     FNumberList[i] := tmp;
   end;
Das Bunte kommt gut

Gruß Horst
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz