Wahrscheinlichkeitsverlauf (Script(s) + Anwendung!)

    • Studio

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Wahrscheinlichkeitsverlauf (Script(s) + Anwendung!)

      Künstliche Intelligenz kann schön sein. Doch es gibt einen Punkt, an dem ein Spieler langsam die Tricks der KI auswendig lernt. Insbesondere, wenn manche Variablen direkt preisgegeben werden. Es erscheint einfach nicht realistisch, wenn sie immer flüchtet, wenn sie genau 75 Leben verloren hat! Wenn es doch nur etwas gäbe, um die Züge und Taktiken der KI schwammiger und ECHTER zu machen. Um die KI anhand von Variablen die richtige Entscheidung treffen zu lassen, wobei die Chance verbleibt, dass sie auch mal einen Fehler macht!

      Der Script, den ich hier präsentiere und erkläre, kann genau das! Er benutzt 3 Werte, um somit einen Wahrscheinlichkeitsverlauf zu bilden und daraus ein "true" oder "false" ausgibt.
      Dadurch, dass es neben der Chance "true" auszugeben auch noch die Chance gibt, "false" auszugeben, ist die Ausgabe von beiden Zuständen *fast* immer möglich, variiert jedoch abhängig von dem Kontext.


      Wahrscheinlichkeitsverlauf

      Dabei definiere ich drei Werte: die linke Grenze, die rechte Grenze und den Richtwert.
      Die linke Grenze ist dabei der Punkt, an dem die Chance besteht, 100% NICHT "true" auszugeben. An der rechten Grenze besteht eine Chance von 100% "true" auszugeben. Dazwischen wird der Wahrscheinlichkeitsverlauf gezogen.
      Der Richtwert liest einfach die Wahrscheinlichkeit ab true/false auszugeben.
      Ist der Richtwert kleiner als die linke Grenze, ist die Chance immer noch 100% NICHT "true" auszugeben. Ist er größer als die rechte Grenze, besteht weiterhin die Chance von 100% "true" auszugeben.
      Beispiel: Wenn die linke Grenze als "30" und die rechte als "40" definiert wird, und der Richtwert bei 35 liegt, besteht eine Chance von 50% "true" auszugeben.
      Ist der Richtwert bei 32.5, liegt die Chance bei 25% "true" auszugeben, sie ist aber noch vorhanden! Dadurch können unerwartete Ereignisse passieren.
      Achtung! Ich übernehme keine Haftung, wenn die linke Grenze größer als die rechte ist.


      Funktionsweise

      Konkretes Beispiel

      Stellen wir uns vor, wir kämpfen rundenbasiert gegen die KI.
      Sie hat am Anfang des Kampfes 100 Leben (gespeichert in hp, Maximum = max_hp).
      Wenn wir z.B. Leertaste drücken, darf die KI entweder angreifen oder flüchten.
      Wir fragen das Drücken der Leertaste in der KI ab, und schreiben in das Event:

      GML-Quellcode

      1. if prob_gradient(hp, 0, max_hp)==true //hp = Richtwert, 0 = linke Grenze, max_hp = rechte Grenze{
      2. //Spieler Leben abziehen (angreifen)
      3. } else {/*flüchten*/}
      Drücken wir die Leertaste, sind wir nicht erstaunt: Sie wird angreifen, weil sie volles Leben hat. Ziehen wir ihr etwas Leben, flüchtet sie vielleicht (abhängig von den Argumenten)...vielleicht schon zu früh. Um dies zu verhindern, setzen wir die rechte Grenze zu max_hp/2. Das heißt, dass die KI NICHT flüchten wird, bevor sie die Hälfte ihres Lebens verloren hat. So können wir die Aggressivität der KI einstellen. Setzen wir die rechte Grenze zu max_hp/4, wird sie erst flüchten, wenn sie mindestens drei Viertel ihres Lebens verloren hat. Sie bekommt erst "den Gedanken" zu flüchten, wenn hp <= rechteGrenze ist. Kommt sie näher an die linke Grenze, ist es wahrscheinlicher, dass sie flüchtet.
      Es wird sehr abstrakt, wenn man versucht, die allgemeine Funktionsweise zu erklären, probiert es einfach selbst aus!

      Script

      Der Script kommt mit der Erklärung, was die verschiedenen Argumente bedeuten. Darüber hinaus wird eine Debugfunktion mitgeliefert, die die Wahrscheinlichkeiten von true/false anzeigt.

      Anwendung

      Man benutzt den Script genau wie eine normale Abfrage.

      GML-Quellcode

      1. if prob_gradient(richtwert,linkegrenze,rechtegrenze)==true{
      2. //falls True ausgegeben wird
      3. } else {/*falls nicht True ausgegeben wird*/} //das else ist natürlich optional, aber bei manchen Situationen notwendig


      Man kann den Script überall anwenden, um eine Entscheidung treffen zu lassen. Der Haken ist dabei, dass die Entscheidung dynamisch und auch leicht zufällig ist, und so menschlicher erscheint.
      Insbesondere in einer KI erscheint er glaubwürdig und durch die Grenzen kann man ihn modifizieren (z.B. durch Schwierigkeit), sodass die KI anders reagiert.
      Herumexperimentieren ist am besten, um die Funktionsweise und Anwendung kennenzulernen, und deswegen habe ich auch die Debugfunktion miteingebaut.

      Download

      Leider erlaubt gm-d.de keine .gml-Dateien, deshalb musste ich sie packen.
      WahrscheinlichkeitsVerlauf (GML).zip
      Spoiler anzeigen
      prob_gradient steht übrigens für Probability gradient (Wahrscheinlichkeitsverlauf/-übergang).

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von Lizard771 ()