Realistischer Dartbot

  • 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. :)

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

  • Ich denke, viele Dartbots kommen von der "anderen" Seite, d.h. man nimmt einfach die Wahrscheinlichkeiten, die unter Deiner Kurve liegen, also ein Bot mit Level x trifft mit diesen und jenen Wahrscheinlichkeiten ein Single, Doppel oder Trippel. Je nach Spiel (X01, Cricket, ...), Spielstand und Level des Bots entscheidet ein Algorithmus, auf welches Feld geworfen werden soll und dann wird einfach gewürfelt. Wird das anvisierte Feld nicht getroffen, geht man einen Entscheidungsbaum runter, um zu schauen, wo der Dart gelandet ist. Das ist natürlich wesentlich einfacher, als den Wurf mit einer zweidimensionalen Gauss-Verteilung zu simulieren und zu schauen, wo der Dart auf dem Bord landet. Aber im Endeffekt wird das Ergebnis genauso "gut" sein.

    Ich vergleiche das gerne mit den Lottozahlen. Man kann versuchen, die Lottotrommel möglichst genau zu simulieren, man kann aber auch einfach einen Zufallsgenerator zwischen 1 und 49 laufen lassen.

    Meine Lieblings-26er: T5-D5-S1, T1-T1-S20, S13-S12-S1, D12-S1-S1

  • 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

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

  • 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. :)

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

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

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

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

    Nein, Du simulierst natürlich nicht den Flug des Darts, aber Du simulierst das Trefferbild unter der Annahme einer Gleichverteilung mit einer bestimmten Standardabweichung.

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

    Was ich beschrieben habe, ist nicht "nur würfeln" (ich hatte übrigens mal eine e-Dartscheibe, die hat das tatsächlich gemacht, da kam dann sowas wie T15-D12-S1 raus...). 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.

    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

    Den sollst Du haben und das ist auch mein Antrieb, selbst hobbymäßig an einer Dartssoftware zu programmieren. Und deswegen finde ich solche Diskussionen und Überlegungen auch spannend.

    Es müsste hier auch schon einen älteren Thread zu Dartbots geben, fyi.

    Meine Lieblings-26er: T5-D5-S1, T1-T1-S20, S13-S12-S1, D12-S1-S1

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

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

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

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

  • 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

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

  • Würde auch behaupten dass meine Streuung keinesfalls Gauß-verteilt ist:

    Denke durch techn. Fehler häufen sich Ausreißer in gewissen Bereichen, was dabei überhaupt nicht berücksichtigt wird. Und auch ganz krasse Ausreißer, die ich immer wieder habe, wären in der Gaußverteilung garantiert unterrepräsentiert...

    Und dann gibt ja auch starke Aufnahmen, wo man sich fragt wo kommen die auf einmal her!? Für mich ists bspw. nicht ungewöhnlich dass ich an einem Tag mehr 100er als 60er-Aufnahmen werfe, was wohl auch keine WK-Verteilung so prognostizieren/erklären könnte :|


    Also für nen "realistischen" Dartbot ist das alles gut und schön, aber die richtige Realität schaut dann doch etwas anders aus :S

    Ich wäre wirklich ein erstklassiger Dartspieler der es mit jedem auf der Welt aufnehmen könnte!
    Wenn nur dieses blöde Pfeile schmeißen nich so kompliziert bzw. die Felder nich so furchtbar klein wären...

  • 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

    Ist eventuell hier verlinkt: https://www.stat.cmu.edu/~ryantibs/darts/ (müsste es eigentlich sein)

    Meine Lieblings-26er: T5-D5-S1, T1-T1-S20, S13-S12-S1, D12-S1-S1

  • 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

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

    Einmal editiert, zuletzt von Fish&Chips (17. September 2026 um 19:42)

  • 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. :)

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

    Einmal editiert, zuletzt von Fish&Chips (20. September 2026 um 08:17)

  • Ich würde mich freuen, wenn mal jemand die Gegenseite programmtechnisch abbilden würde.

    Also die eigene Streuung nachverfolgen.

    Stelle mir das so vor:

    Ziel ist das 20er Segment. Das Programm fragt das Ergebnis ab, allerdings das Segment, nicht die Punkte.

    1. Wurf 20

    2. Wurf 12

    3. Wurf 5

    Nächste Aufnahme dann z. B. 20-20-1, usw...

    Die Eingabe wird gespeichert, natürlich ist es mit jedem Segment machbar, auch Treble und Doppel.

    Nach etlichen Trainingsstunden kann ich sehen, wie ich meistens treff. Erster Dart immer daneben, Streuung von links nach rechts, Steigerung nach x Tagen usw.

    Fände das für Anfänger (ja wo ist nur die 20) als auch fortgeschrittene (warum kommt die 180 so und so nicht) eine gute Selbstreflexion.

    Gerade am Anfang ist es schon schöner, wenn man zumindest in der Nähe des Ziels landet, und später eine andere Betrachtung der Treffsicherheit.

    Ich kann es leider nicht, aber vielleicht ein Ansporn für die Programmierer 😉

    Target Nathan Aspinall K95 24g, 1. 180 am 16.03.2026, Höchstes Highfinish: 115, Shortgame: 17 Darts

  • Also die eigene Streuung nachverfolgen.

    Ich nutze für sowas die App Dartsmind mit Autoscoring
    Da gibt es die Option "99 Darts at XX"
    Außerdem sieht man auch an der Heatmap in Dartsmind die allgemeine Streuung recht schön visualisiert.
    Ich bin sowieso inzwischen ein großer Fan von Dartsmind. Kein teurer und störender Kameraring nötig (Nur Smartphone auf Stativ) und die Erkennungsquote ist sehr gut. Hübsche Fun-Spielchen sind auch drin :) (EDIT: Der Bot ist allerdings unterirdisch.)

    So sieht btw. die Heatmap meines Bots aus:

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

    3 Mal editiert, zuletzt von Fish&Chips (25. September 2026 um 19:47) aus folgendem Grund: Räschtschraipunk

  • Getroffen oder nicht hat fast jede App, auch mdt, was ich überwiegend zum Training nutze.

    Was ich richtig spannend fand und noch immer finde, ist wohin der Dart ging.

    Also Ziel T20, treffe S20, T5 oder vllt S12.

    Genau das möchte ich gern verfolgen. Ist die Streuung eher links oder rechts lastig, usw.

    Für jedes Segment kann das echt interessant sein. Auch Bull Training, denn wohin geht der Dart oft?

    Einfach daneben - das kann ja jeder 😉.

    Hatte das Manfred schon mal vorgeschlagen, aber denke, er hat es vergessen (war ja zeitweilig stark mit familiären Dingen beschäftigt).

    Fände da auch eine motivierende Zählung für Anfänger gut. Ich habe mir anfangs immer einen Trost Punkt gegeben, wenn ich die 20 schön eng umzingelt habe. Hat mir einfach geholfen, da die Streuung da noch riesig war, eigentlich alles auf der oberen Hälfte 😄. Heute sehe ich das bei Bekannten, und wenn es immer nur "daneben" heißt, ist das echt frustrierend.

    Interessant für Bastler?

    Target Nathan Aspinall K95 24g, 1. 180 am 16.03.2026, Höchstes Highfinish: 115, Shortgame: 17 Darts

  • Und was war der Grund?

    Leg-Averages in diesem Bereich (140-149) sind einfach unmöglich:
    10-Darter: Average 150,3
    11-Darter: Average 136,6
    Dazwischen gibt es schlicht nichts!

    Es fehlen auch die 180er.

    Der höchstmögliche Leg-Average ist 167 (9-Darter)

    "Ein einziger bewusster Gedanke, der durch den Kopf schwirrt, lenkt den Pfeil in der Richtung auf sein Ziel ab"
    (Zen und die Kunst des Bogenschießens)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!