Beiträge von Fish&Chips

    Das ist die Streeuung der Leg-Averages von 100000 Legs bei Average=40

    Code
    0 0
    10 2405
    20 12594
    30 29159
    40 36289
    50 17059
    60 2377
    70 116
    80 1
    90 0

    Schön normalverteilt.

    Nun dachte ich an einen Fehler im Programm, als ich die Verteilung bei Average=120 gesehen habe:

    Warum gab es keine Averages im Bereich 140-150?
    Dann würde mir aber klar, warum. :)

    Bei einem guten Dartsspieler ist das Trefferbild wohl durchaus gut mit einer Gaußverteilung zu beschreiben. Sein Wurf ist gut genug, dass er technisch in der Lage ist, das anvisierte Ziel zu treffen. Aber Unsauberkeiten führen zu einer statistischen Streuung, die gut mit einer Gaußverteilung abgebildet werden kann.
    Für einen schlechten Darter (Anfänger) gilt das nicht notwendigerweise. Hier ist das Trefferbild, aufgrund der unsauberen Technik, innerhalb eines Zielbereiches eher gleichverteilt. Nach außen hin fällt es dann natürlich auch ab. Aber nun hat man nicht mehr eine Verteilung um einen Punkt, sondern um einen Bereich

    Man kann das modellieren, indem man der Normalverteilung zusätzlich noch eine zufällige Verschiebung überlagert, die unterhalb einer bestimmten Spielstärke einsetzt und dann mit sinkendem Level ansteigt.
    Das scheint mir auch genau das zu sein, was in der Realität passiert. Die statistischen Abweichungen werden zusätzlich von einer einigermaßen gleichverteilten Streuung aufgrund schlechter Technik überlagert.
    Also: Streuung = normale Wurfstreuung (Gauß. Haben alle) + Instabilität des Wurfzentrums (Gleichverteilt. Stärker je schlechter)
    Das ist also kein mathematischer Cheat, sondern hat m.E. Fundament.

    Das würde beide Probleme beheben, die ich beim Bot, bei geringer Spielstärke bemerkt habe:
    1) Zu viele extrem weite Ausreißer über das normale Maß hinaus. (Die durch den "long tail", beim unverhältnismäßigen Anstieg der Standardabweichung resultieren, die bei der reinen Gaußverteilung nötig ist, um den Average entsprechend zu senken)
    2) Andererseits das m.E. doch noch zu häufige Treffen in die T20. (Weil diese das Zentrum der Verteilung war)

    Mal sehen was rauskommt. :)

    Und bevor jemand fragt: Warum machst du das?
    Na, just for fun :S

    Interessant, was man alles so lern, wenn man sich mit sowas beschäftigt. :)

    Der spielt prima, aber bei niedrigem Spiellevel wirkt das Ganze immer noch ein klein wenig unrealistisch. Die Gaußverteilung lies sich da irgendwie nicht gut in Einklang bringen mit den Averages und der Streuung.
    Nun ist mir auch der Grund klar:

    Ich habe die Quellenangabe zu einer Studie gefunden, die genau das belegt:
    Ryan J. Tibshirani: "Where to aim on a dartboard"
    Sie zeigt genau das: Gute Spieler zeigen eine klare Gaußkurve um das Ziel herum. Schlechte Spieler haben eine Trefferwolke, die im inneren Bereich flach und fast gleichmäßig verteilt ist. Erst am Rand dünnt es aus. In einem realistischen Bot sollte man das also im unteren Niveaubereich berücksichtigen.

    Die Studie selbst habe ich noch nicht gefunden.
    Ich hoffe die KI hat die Quelle nicht einfach erfunden. :/:D

    Es gibt bei der Simulation auch einen hübschen, klaren Zusammenhang zwischen der Standardabweichung, nach der das Programm die Streuung der Würfe berechnet und dem resultierenden Average.
    Ich habe für jede Standardabweichung in Millimeterschritten je 5000 Legs spielen lassen und dann den Gesamt-Average aus diesen Legs bestimmt.
    Ist ein schöner hyperbolischer Zusammenhang: :)

    Damit kann ich stufenlos aus dem gewünschten Level die nötige Standardabweichung errechnen und der Bot spielt dann im Mittel auch genau diesen Average und nicht irgendeine vage Spielstufe.

    Wenn Du Deinen Bot mit einer bestimmten Einstellung lange genug auf die Felder werfen lässt, kannst Du hinterher sagen: Mit den Einstellungen trifft er ein Tripple zu x%, ein Single zu y% und ein Doppel zu z%. Und genau solche prozentualen Wahrscheinlichkeiten nutzen viele Dartbots (ich kenne drei, die mehr oder weniger den gleichen Algorithmus mit den gleichen Prozentwerten für bestimmte Stufen verwenden. Ich bin mir nicht sicher, ob Du solch einen Bot in Bezug auf eine "natürliche Simulation" von Deinem Bot unterscheiden könntest. Es ist halt nur viel einfacher, da Du keine Position berechnen musst und auf das Board mappen.

    Ja, das kann man natürlich auch machen. Ist im Prinzip, das was ich mache, nur halt nicht bei jedem Wurf, sondern nur einmal vorher für viele Würfe und die Ergebnisse dann in Wahrscheinlichkeitstabellen gepackt.
    Das sollte im Prinzip das gleiche Verhalten liefern und sich nicht groß unterscheiden.
    Aber die zweidimensionale Gaußverteilung braucht man dort natürlich anfangs auch, um diese Tabellen überhaupt statistisch sinnvoll generieren zu können. Allerdings nicht notwendigerweise für das ganze Brett, da ja alle 20 Segmente die gleiche Stuktur haben.

    Beim Runterscoren spielt er momentan tatsächlich nur auf T20. (Wie ich, lol) Ab 170 dann nach einer Standard-Checkouttabelle.

    Aber ich kann natürlich auch noch ein bisschen Varianz reinbringen oder auch Botprofile (Solide, Hasadeur, 19-Werfer, Hin- und Herwechsler)

    Hübsch, wenn der Bot auf niedrigem Level im Madhouse verzweifelt: ^^

    Zehndarter war auch schon dabei:

    Code
    >bot 130
    501 60 60 60
    321 60 60 60
    141 20 60 45
    16 16 CHECK!
    sdev=5 avrg=150

    Im Prinzip ist der "Leggenerator" nun fertig.
    Ich könnte nun schnell und leicht ein paar tausend Legs der verschiedenen Spielstärken produzieren, die man dann in Apps reinkippen kann. :)

    Ja, es gibt hier sicher mehrere Wege nach Rom. :)

    Der Vergleich mit der Lottozahlentrommel hinkt aber. Ich simuliere ja nicht den Flug des Darts, sondern lasse auch nur einen Zufallsgenerator laufen. Nur ist das hier halt nicht gleichverteilt.

    Wenn man ein einigermaßen realistisches Verhalten simulieren will, dann muss man schon einen etwas differenzierteren Ansatz wählen, als nur zu würfeln.

    Aber die Idee von mdt echte Legs als Basis zu nehmen ist ja auch eine gute Idee dafür.

    Inzwischen spielt er auch schon: :)

    Aber mein hauptsächliches Ziel ist es ja auch nicht, einen tollen, noch nie dagewesenen Bot zu konstruieren, sondern einfach nur Spaß an der Sache und am coden. :S

    Da ich den Thread von mdt nicht zuspammen will lagere ich das mal aus:

    Ich habe keine Ahnung nach welchem Algorithmus diese Bots so programmiert sind. Ich hatte aber schon länger mal vor, eine Engine zu erstellen, die den menschlichen Dartspieler auf natürlichere Art simuliert:

    Der Bot "wirft" jeden Dart auf die gleichen Segmente, auf die auch ein Mensch werfen würde, beim Scoring und bei den Checkoutwegen.
    Aus dem eingestellten Level ergibt sich dann eine Standardabweichung, wie genau er trifft und aus der Streuung dann das Segment in das er tatsächlich trifft.
    Das sollte eine einigermaßen natürliche wirkende Simulation ergeben.

    Evtl. mache ich mich da tatsächlich mal dran. Aber es wäre dann keine App, sondern nur eine Engine, die man in eine App einbauen könnte. (Eingangsargumente: Zielsegment und Level, Returnwert: Getroffenes Segment)

    Allerdings werden wohl die meisten heutzutage einfach Claude mit sowas beauftragen.
    Ich bin einer dieser seltenen und seltsamen Menschen, die selbst programmieren wollen, weil das Coden der eigentliche Spaß an der Sache ist.
    Aussterbende Art. :(

    Ich habe mich tatsächlich mal ans Programmieren gemacht und das geht flotter als ich dachte (und macht Spaß)
    Hier mal das was der Bot in 20 Würfen scored, wenn er auf die T20 und die D16 zielt, je nachdem welche Standardabweichung (=Spielstärke) ich angegeben habe:

    Sieht schon mal nach einer einigermaßen natürlichen Streuung aus.
    Evtl. passe ich die Verteilungskurve noch ein wenig an und flache die Gaußkurve noch ein wenig ab, aber ich denke darauf kann man aufbauen. :)

    Ich habe keine Ahnung nach welchem Algorithmus diese Bots so programmiert sind. Ich hatte aber schon länger mal vor, eine Engine zu erstellen, die den menschlichen Dartspieler auf natürlichere Art simuliert:

    Der Bot "wirft" jeden Dart auf die gleichen Segmente, auf die auch ein Mensch werfen würde, beim Scoring und bei den Checkoutwegen.
    Aus dem eingestellten Level ergibt sich dann eine Standardabweichung, wie genau er trifft und aus der Streuung dann das Segment in das er tatsächlich trifft.
    Das sollte eine einigermaßen natürliche wirkende Simulation ergeben.

    Evtl. mache ich mich da tatsächlich mal dran. Aber es wäre dann keine App, sondern nur eine Engine, die man in eine App einbauen könnte. (Eingangsargumente: Zielsegment und Level, Returnwert: Getroffenes Segment)

    mdt
    Falls du Interesse an so einer Routine (in C oder C++) hast, sag Bescheid. :)

    Allerdings werden wohl die meisten heutzutage einfach Claude mit sowas beauftragen.
    Ich bin einer dieser seltenen und seltsamen Menschen, die selbst programmieren wollen, weil das Coden der eigentliche Spaß an der Sache ist.
    Aussterbende Art. :(

    Auf der Suche nach dem Dart, der mir am besten liegt, habe ich ziemlich viel durchprobiert.
    Verwirrend für mich war dann irgendwann die Tatsache, dass ich mit durchaus unterschiedlichen Darts zurechtkomme (und mit vielen anderen nicht), aber diesbezüglich keine klare Systematik erkennen konnte, was Gewicht und Form des Barrels angeht.

    Nun habe ich gemerkt, dass alle Darts, mit denen ich gut klarkomme eine sehr ähnliche Gripstruktur haben:
    1) Meist Ringgrip
    2) Gleichmäßiger Grip über den ganzen Barrel. Keine Gripzonen. Auf gar keinen Fall Griffmulden.
    3) Starker Grip (ca 3-3,5), aber ohne dass er zu aggressiv ist. Darts die sich anfühlen, als hätten sie Widerhaken oder ähnliches, passen nicht. Der Grip muss stark sein, aber gleichmäßig und unaufdringlich, nicht "hakelig"

    Das liegt wohl alles mit daran, dass ich den Dart recht locker, ohne viel Druck der Finger, halte und werfe. Kein aktives Steuern mit der Hand, eher ein Loslassen.

    Ich habe also den Eindruck, dass bei mir die Struktur/Textur der Oberfläche des Darts einer der größten Einflüsse ist, ob ich mit ihm zurechtkomme oder nicht. Deutlich mehr als die Form oder das Gewicht. (Obwohl 21g-23g durchaus eher meine Wohlfühlzone zu sein scheint)

    Ich meine, hier im Forum hätte mal jemand irgendwann, irgendwo ähnliches geschrieben, konnte es aber nicht mehr finden.

    Vom Spiro?
    Habe ich schon. 😄

    Leider neige ich dazu leicht dem Drang zu erliegen mir sofort ein Ersatzset zu besorgen, wenn es mal sehr gut läuft mit einem Dart. ("Oh, das könnte mein endgültiger Dart werden. Schnell vorsorgen, falls er mal kaputt geht")
    Muss ich immer aktiv gegensteuern.

    Möchte mir evtl. jemand einige meiner doppelten Sets abkaufen? 😄