Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fussball KI,wie anfangen? (https://www.delphipraxis.net/156368-fussball-ki-wie-anfangen.html)

Angel4585 29. Nov 2010 19:12

Fussball KI,wie anfangen?
 
Hallo,

ich programmier ja schon seit einiger Zeit ein Browsergame bei welchem man per Java-Applet eine 2D Simulation anschauen können soll.
Jetzt habe ich mein Applet soweit, dass ein Match-Objekt als XML in die Datenbank gespeichert wird usw und jetzt möchte ich anfangen ne gescheite KI zu programmieren.

Wie geht man sowas am besten an?
Also konkrekt habe ich folgende Ausgangssituation:
1 Ball
2 Teams a 5 Spieler
Jeder Spieler hat ne x/y-Koordinate als "Startposition"
keine Torhüter
dafür kleinere Tore
aufs Tor geschossen werden darf erst im Strafraum(mal schaun ob das bleibt)
Fouls gibts erstmal nicht, entweder man gewinnt oder verliert einen Zweikampf
Spieler haben unterschiedliche Attribute wie Schnelligkeit, Zweikampf, Schusskraft usw.

Also wie fang ich jetzt an ne KI zu programmieren?
Wie leg ich fest wo Spieler am besten hinlaufen?
Mir fehlt irgendwie der Ansatz wie man so ne Logik entwickelt.

Hat mir jemand nen Rat?

lbccaleb 29. Nov 2010 19:24

AW: Fussball KI,wie anfangen?
 
Hallo, ich hatte mal vor langer Zeit im Internet eine Open-Source Fussball KI gefunden. Bin mir nicht ganz sicher ob ich das hier posten darf, deswegen schicke ich dir das später mal per PM. Muss das noch suchen :stupid:

Aphton 29. Nov 2010 19:29

AW: Fussball KI,wie anfangen?
 
Ich hab mich selber damit nicht so richtig auseinandergesetzt aber wie wäre denn diese Idee hier:
Du nimmst alle Felder her, und gibt ihnen einen Wert -- der Wert gibt dann an, ob man sich diesem Feld nähern sollte.
Den Wert berechnest du so, indem du alle gegnerischen Spieler durchiterierst, ihre Position zum Feld hernimmst und das umgeben Feld eben, je näher zum Spieler, mit einem desto schlechteren Wert bestückst.

Und damit das ganze nicht chaotisch von statten geht, sorgst du dafür, dass das Team (eigene Spieler) sich in eine bestimmte Richtung unter bestimmten Vorraussetzungen (Verteidigen/Angreifen/Position halten/..) bewegt...

Ist schwer zum Erklären; aber wenn du das Grundprinzip verstehst, dann hab ichs geschafft, es dir richtig zu erläutern. Die Frage, ob es sinnvoll und nützlich ist, bleibt jedoch weiterhin offen...

MfG

Luckie 29. Nov 2010 19:32

AW: Fussball KI,wie anfangen?
 
Ich will dich nicht entmutigen, aber solltest du noch nie eine KI geschrieben haben, rate ich dir erst mal ein KI für TicTacToe zu schreiben. Eine KI für ein Fußballspiel dürfte alles andere als trivila sein, wenn sie einigermaßen realistisch sein soll.

Angel4585 29. Nov 2010 19:33

AW: Fussball KI,wie anfangen?
 
Also du meinst,dass ich das Spielfeld in viele kleine Felder zB ein raster 5x7 unterteile und wenn sich Ball/Gegner in einem bestimmten Feld befinden bewegt man sich dahin, wenn das eigene Team den Ball hat laufen die Spieler sich frei,d.h. dass die Passwege zum Ballführenden Spieler frei sind?

Muss ich mal überlegen entweder ich unterteils in Felder oder geh über die x-/y-Abstände

Ich hab momentan ein Spielfeld mit 600x400 Pixel.

fkerber 29. Nov 2010 22:15

AW: Fussball KI,wie anfangen?
 
Hi,

ich würde dir raten, deine KI unabhängig von der grafischen Repräsentation zu halten.


LG, Frederic

BUG 29. Nov 2010 23:04

AW: Fussball KI,wie anfangen?
 
Eventuell hilft es, mal auf einem Blatt Papier "zu Spielen" (gegen einen anderen Menschen, zufälliges auswürfeln, Spiel irgendwie aufnehmen) und dir nachher (oder dabei) zu überlegen, was du warum gemacht hast.

Angel4585 30. Nov 2010 04:44

AW: Fussball KI,wie anfangen?
 
Zitat:

Zitat von fkerber (Beitrag 1064921)
Hi,

ich würde dir raten, deine KI unabhängig von der grafischen Repräsentation zu halten.


LG, Frederic

Das sowieso, einmal wird die Berechnung ohne grafische Ausgabe ausgeführt um an das Ergebnis zu kommen,einmal wird die Berechnung mit grafischer Ausgabe gemacht um es dem Zuschauer zu zeigen.
Abgespeichert werden nur die Ausgangswerte zusammen mit einem Randomseed.
Ich hab das schonmal getestet, da kommt dann auch immer das gleiche Ergebnis und der gleiche Spielverlauf raus.

Zitat:

Zitat von BUG (Beitrag 1064928)
Eventuell hilft es, mal auf einem Blatt Papier "zu Spielen" (gegen einen anderen Menschen, zufälliges auswürfeln, Spiel irgendwie aufnehmen) und dir nachher (oder dabei) zu überlegen, was du warum gemacht hast.

Das könnte interessant werden, werd ich mal machen :D

fkerber 30. Nov 2010 14:02

AW: Fussball KI,wie anfangen?
 
Hi,

wäre es nicht besser, die grafische Ausgabe auf Basis der Berechnungen des nicht-grafischen Laufes zu generieren anstatt es doppelt zu berechnen?


LG, Frederic

Angel4585 1. Dez 2010 05:46

AW: Fussball KI,wie anfangen?
 
Dann bekomm ich aber ein kleines Speicherproblem,weil ich quasi jeden Schritt speichern müsste.
So kann ich nur den Anfangszustand speichern was vielleicht 1,5KB in der Datenbank belegt(was immernoch genug ist)
Und da die zweite Berechnung in nem Java-Applet also auf dem Client geschieht belastet sie meinen Server ohnehin nicht.
Ich muss natürlich die Appletversion mitspeichern für den Fall, dass sich mal was an der Berechnung ändert, aber das ist ein eher kleines Problem.

BUG 14. Dez 2010 19:57

AW: Fussball KI,wie anfangen?
 
Auch wenn es wahrscheinlich nicht die Liga des Browsergames ist, trotzdem interessant:
http://www.heise.de/tr/artikel/Unser...e-1150754.html

p80286 14. Dez 2010 21:10

AW: Fussball KI,wie anfangen?
 
[OT] KI für Fußball? Was würde Gladbach und was würde Schalke dafür Zahlen?
(und was erst Dortmund, damit Schalke soetwas nicht bekommt)[/OT]

Gru
K-H

Angel4585 16. Dez 2010 09:38

AW: Fussball KI,wie anfangen?
 
schon interessant der heise-artikel, aber tatsächlich nicht so meine Lige :D

Ich hab jetzt mit nem Professor der Hochschule hier gesprochen, der als auch am RoboCup teilnimmt und sich bissl mit KI auskennt.
Er meinte, dass es für ein solches Projekt am besten wäre mit Desicion Trees zu arbeiten.
Diese könnte man dann in XML-Dateien auslagern wodurch man das Programm selbst nichtmehr verändern müsste, sondern die KI über die XML-Datei verändern kann.
(Hätte auch den Vorteil, dass man einen KI-Editor programmieren und dann jährliche User-Wettbewerbe veranstalten kann - "Wer hat die beste KI")

Naja soweit so gut, aber wie baue ich eine solche Datei am besten auf?
Ich muss ja quasi Zustände und Aktionen festlegen, da wären als Aktionen: passen,schiessen, dribbeln, laufen,angreifen.
Als Zustände fallen mir spontan ein: anstossSpieler, anstossTeam, anstossGegner, ballbesitzSpieler, ballbesitzTeam, ballbesitzGegner

Dazu muss man in die XML-Datei noch die Positionen auf dem Spielfeld mit einbringen, sowie den aktuellen Spielstand.

Aber wie bau ich da so einen Desicion Tree in XML Form dann auf und wie interpretiert man sowas dann?

Angel4585 18. Dez 2010 10:19

AW: Fussball KI,wie anfangen?
 
Oha,keine Antwort.

*push*

Also ich hab mich mal durch Tutorials gewühlt aber hab noch bissl Probleme.

Also angenommen ich habe nur "wenige" Bedingungen und Zustände:
Zustände:
-Ich hab den Ball
-Mein Team hat den Ball
-Das gegnerische Team hat den Ball
-Keiner hat den Ball

Bedingungen:
[Spielerentfernung]
-Entfernung zum Ball
-Entfernung zum Gegner
-Entfernung zum Mitspieler
-Entfernung zum Tor
[Mitspielerentfernung]
-Entfernung zum Ball
-Entfernung zum Gegner
-Entfernung zum Tor
[Gegnerentfernung]
-Entfernung zum Ball
-Entfernung zum Mitspieler
-Entfernung zum Tor

Aktionen:
-Schiessen
-Passen
-Laufen
-Warten

Dann könnte ein XML-File in etwa so aussehen(oder?):
Code:
<root>
   <situation type="playerball">
      ...
   </situation
   <situation type="teamball">
      ...
   </situation
   <situation type="opponentball">
      ...
   </situation
   <situation type="freeball">
      <condition type="player_dist_ball" value="100">
         <condition type="team_dist_ball" value="less">
            <action type="wait">
         </condition>      
         <condition type="team_dist_ball" value="more">
            <action type="move_to_ball">
         </condition>      
      </condition>
      <condition type="player_dist_ball" value="200">   
         ...
      </condition>
      <condition type="player_dist_ball" value="else">
         ...
      </condition>
   </situation
</root>
Wäre das richtig? Oder wie würdet ihr das machen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz