BCC17 KI-Contest - Themendiskussion

Übersicht Sonstiges Smalltalk

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

 

BIG BUG

Betreff: BCC17 KI-Contest - Themendiskussion

BeitragMo, Mai 12, 2008 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Sodala, obwohl auch mein letzter Versuch die Code-Compo mal wieder mit mehr als ca. 1/4-Coding-Anteil auszurichten keinen sehr großen Anklang fand, will ich es trotzdem nochmal wissen.

Da bei dem was ich vor habe auch ein größerer Aufwand von meiner Seite aus notwendig ist, möchte ich hier erstmal abfragen ob das überhaupt generell auf Interesse stößt und dann natürlich auch das genauere Konzept diskutieren.

Die Idee ist nicht neu und wurde schon öfters mal diskutiert, aber es ist nie wirklich was draus geworden.
Leider ging der letzte Contest zwar auch schon in die Richtung, aber der Schwerpunkt liegt doch deutlich anders.

-Ziel wäre es über eine definierte Schnittstelle eine KI zu programmieren, die direkt gegen die KIs der anderen Teilnehmer kämpft.
Ich habe mir hier einen 2D-Shooter vorgestellt und auch schon was auf der Platte liegen, was ich für geeignet halte und im Anschluß vorstelle.

-Für die Programmierung der KI dachte ich an die ScriptSprache BriskVM, von der ich sehr überzeugt bin. Der Clou an der Sache ist, dass die Sprache den Blitzbasic-/BlitzMax-Syntax benutzt und daher jeder damit schnell zurecht kommen sollte.

-Der Ablauf sieht dann so aus, dass die KI z.B. alle 100 ms aufgerufen wird und alle relevanten Daten lesen, aber nur über definierte Funktionen das Spiel beeinflussen darf. Die Funktionen wären dann wie die Steuerung durch einen menschlichen Spieler definiert.

-Anstatt einer Codebeschränkung habe ich mir eine Laufzeitbeschränkung vorgestellt. Also dass ein KI-Durchlauf nur eine bestimmte Zeit dauern darf.
Um den unterschiedlich schnellen Rechnern gerecht zu werden, wird die Zeit aber nicht direkt vorgegeben, sondern mit einer zu definierenden Schleife verglichen.

-Ich habe mir hier eine mehrstufige Bewertung vorgestellt.
1. Deathmatch-Ergebnis. Alle KIs werden gemeinsam in mehrere Deathmatch-Runden geworfen. Punkte werden dann nach Anzahl Abschüssen verteilt.
2. Last-Team-Standing?-Ergebnis. Hier steuert jede KI ein Team aus z.B. 4 Player, wobei aber immer nur zwei KIs gegeneinander antreten. Ziel ist es die gegnerische KI komplett zu vernichten. Denkbar wäre hier auch Team-Deathmatch oder gar Capture the flag, wobei das für die meisten zu kompliziert sein dürfte.
3. Da die stärkste KI aber nicht unbedingt die "beste" KI sein muss, sollte aber trotzdem auch noch eine Abstimmung erfolgen.
Die Ergebnisse werden dann nach irgend einem schlauen Schlüssel verrechnet und der Sieger ermittelt.

-Nachvollziehbarkeit und Spannung.
Wenn Interesse besteht, könnte man auch noch einen Aufnahmemodus bereit stellen, so dass die Kämpfe als "Replay" zur Verfügung stehen oder gar eine Live-Übertragung durchführen(ist natürlich komplizierter).

-Das Spiel
user posted image
Download(1,8 MB)

Es handelt sich hier um einen 2d-Shooter, wobei nur 4-Richtungen erlaubt sind. Dies gilt sowohl für die Bewegung als auch für die Drehrichtung(also 90° Schritte).
Die Schüsse können ebenfalls miteinander kollidieren um das Ganze interessanter zu machen.

Zum Testen kann einfach der Windows-Modus benutzt werden. Einfach mehrere Instanzen aufmachen, bei der Ersten die IP-Eingabe mit leer bestätigen um zu Hosten. Bei den weiteren Instanzen dann einfach die IP 127.0.0.1 eingeben um lokal zu verbinden. Gesteuert wird immer im gerade aktiven Fenster.

Die Steuerung ist in der Control.jpg einzusehen.
Mit F1-F6 kann der Host durch die verschiedenen Level switchen.

Wie die Maps für den KI-Fight aussehen müsste noch definiert werden. Um die Map-Daten einfach abfragen zu können, dachte ich hier an eine Tilemap. Wände sollten nur vereinzelt platziert sein, also keine Gänge, um eine aufwändige Wegfindung zu vermeiden. Vorschläge sind gerne willkommen.

Was denkt ihr? Bin für Vorschläge gerne offen, soll ja jeder was davon haben.
Habe jedenfalls keine Lust diesen Aufwand zu betreiben und dann sind es nur zwei Teilnehmer oder so...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
  • Zuletzt bearbeitet von BIG BUG am Fr, Mai 16, 2008 9:21, insgesamt 3-mal bearbeitet
 

Tritium

BeitragMo, Mai 12, 2008 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundsätzlich finde ich Deine Idee sehr gut, ich würde das aber ein bisschen mehr nach dem Prinzip dieses Ameisenspiels machen, auf dessen Namen ich gerade nicht komme. Da war das so gelöst, dass man ein Ameisenvolk hatte und den Ameisen eine KI programmieren konnte. Dann lief das Spiel eine bestimmte Anzahl Schleifendurchläufe, und wer am Ende die meisten Punkte hatte, hat gewonnen. Wenn mir der Name noch einfällt, schreib ich ihn hierhin Confused

Ich denke, dass ein (derartiger) Shooter (keineswegs abwertend gemeint!) nicht komplex genug ist, um wirklich spannende KI-Duelle hervorzubringen.

[EDIT]
Danke an The Shark, das Spiel heißt AntMe!
  • Zuletzt bearbeitet von Tritium am Di, Mai 13, 2008 14:14, insgesamt einmal bearbeitet

ToeB

BeitragMo, Mai 12, 2008 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Download link ist down...äh shrott... Prüf das mal bitte...

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

SpionAtom

BeitragMo, Mai 12, 2008 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann man denn ein BlitzCodeCompo ohne Blitz abhalten Question
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Goodjee

BeitragMo, Mai 12, 2008 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
finde ich auch nicht gut, wie wärs denn wenn jeder einfach eine ki methode schreibt, die unter x zeilen bleiben muss, die über methoden wie move() und findOpponentInView() verfügt.
am ende könntest du noch die zeit für die berechnung angeben, damt diese in die wertung eingehen kann.
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

The Shark

BeitragMo, Mai 12, 2008 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@ tritium: du meinst AntMe! http://antme.net/

ich finde den vorschlag nicht schlecht, obwohl ich dafür wäre, wirklich in Blitz zu proggen und die engine als include zu benutzen. dann schickt man nur die ki an den veranstalter und der bindet sie in die engine ein, um sicher zu gehen, dass nicht geschummelt wird. es müsste dann halt bestimmte funktionen geben.

Hagbard

BeitragMo, Mai 12, 2008 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Idee ist super.
Mir wäre auch egal, wie wir das mit der zu verwendenden Sprache machen, hauptsache das Ganze klappt und macht Spaß.
 

FBI-blitz

BeitragMo, Mai 12, 2008 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich finde die Idee echt klasse... Der Shooter mag zwar vielleicht nicht so komplex sein, für den Anfang finde ich das aber super, denn man kann einen Wettbewerb dieser Art ja mal wiederholen und dann evtl. auf ein komplexeres Spiel zurückgreifen.

Vielleicht sollte man zunächst auch mal auf eine Code-/Laufzeitbeschränkung verzichten, immerhin hat man ja kaum Referenzwerte bzw. Erfahrungen im bereich dieser Contest-Arten. Auch das könnte man vlt. bei einem späteren contest dieser art einführen.

Ich denke, dass wir schon auf Blitz2D-Befehle zurückgreifen sollten, wobei ich mir die Script-Sprache noch nicht angesehen habe. Wenn sie wirklich sehr ähnlich zu blitz ist und auch kostenlos verfügbar ist, dann ist sie vielleicht dennoch die bessere wahl, da sonst entweder BlitzMax- oder Blitz2D/3D/Plus-Nutzer nicht teilnehmen können (oder sind die Sprachen in irgendeiner Weise kompatibel zueinander? habe mich nie mit BM beschäftigt).
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+
Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+

Noobody

BeitragMo, Mai 12, 2008 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Also grundsätzlich finde ich die Idee grossartig - nur dass die Sprache kein Blitz ist, stört mich etwas.
Schliesslich ist das ein Blitzbasic - Portal und vor allem im BCC geht es ja grundsätzlich um Blitz.

Warum machen wir es nicht anders - das Hauptprogramm wird bereitgestellt, welches Gegner auf den Bildschirm zeichnet und das beitreten anderer Spieler regelt, welches aber an jeden Spieler die Position und Drehung der anderen Spieler versendet.
Was nun die Contestteilnehmer tun müssen, ist ein Programm schreiben, welches diese Nachrichten empfängt, auswertet, darauf reagiert und seine Tätigkeit zurückschickt.

Mit dieser Methode sind sowohl alle Blitz - Versionen zugelassen (wie es bei der Include - Lösung nicht möglich wäre) und man kann auch auf BriskVM verzichten.

Einziger Nachteil wäre, dass ein entsprechendes Hauptprogramm noch geschrieben werden muss und man ein Netzwerkprotokoll festlegen muss, da ja alle Programme nach dem selben Schema antworten müssen.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Goodjee

BeitragMo, Mai 12, 2008 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
und man würde bmax oder bb disqualiizieren
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Hagbard

BeitragMo, Mai 12, 2008 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe mir gerade mal Antme angesehen, ist auch eine sehr nette Möglichkeit, die Tritium da beschreibt.
Generell müsste man sich dann wie bei AntMe auf gewisse Grundfunktionen einigen.
man wäre das spannend, die Gegner dann im direkten Kampf zu beobachten.

Naja, bin mal gespannt wie wir das am Ende machen.

Silver_Knee

BeitragMo, Mai 12, 2008 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Godjee: gerade nicht

Fände ich super so einen "Schreibe einen KI-Client"-Contest. So kann man wirklich die KIs verschiedener Spieler gegeneinander antreten lassen und evtl sogar mal ne runde mitspielen. Außerdem könnten wirklich alle sprachen, die Netzwerk fähig sind teilnehmen. und soweit ich weiß Kann b3D und b+ Netzwerk. Den Bmax-lern kann man ja ein Modul zur verfügung stellen fall die sprache das nicht von haus aus kann.

Travis

BeitragMo, Mai 12, 2008 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Prinzip eine interessante Idee. Das ist mir allerdings ein wenig zu spezifisch.

Außerdem sollte der Contest schon in einer BB-Sprache abgehalten werden. Nicht jeder hat Lust sich extra in irgendeine Scriptsprache einzuarbeiten, egal wie ähnlich sie auch sein mag.

Es gab doch hier vor langer Zeit schon mal ein ähnliches Projekt. Was ist denn daraus geworden? Das lief irgendwie über TCP/IP oder so. Da haben auch Bots gegeneinander gekämpft.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

FBI-blitz

BeitragMo, Mai 12, 2008 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Noobody hat Folgendes geschrieben:
Was nun die Contestteilnehmer tun müssen, ist ein Programm schreiben, welches diese Nachrichten empfängt, auswertet, darauf reagiert und seine Tätigkeit zurückschickt.

Mit dieser Methode sind sowohl alle Blitz - Versionen zugelassen (wie es bei der Include - Lösung nicht möglich wäre) und man kann auch auf BriskVM verzichten.


Finde ich eine gute Lösung - zumal dann sowohl BM als auch BB möglich wären. Voraussetzung wäre aber imho, dass auch der Code zur Behandlung der Nachrichten schon bereitsteht... damit man nicht die ganze Sende & Empfangsroutine auch noch schreiben muss, schließlich soll es ja um KI gehen.

Also ich könnte mich mit dieser Lösung wirklich anfreunden. Am besten sagt Big Bug mal, was er dazu meint...
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+
Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+
 

BIG BUG

BeitragMo, Mai 12, 2008 23:18
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Upps, sorry wegen dem Link, habe den jetzt korrigiert(es ist Speeder.zip anstatt speeder.zip) Smile

2. Ein komplexeres Spielprinzip hat sicherlich auch seinen Reiz aber bei einem einfacher Shooter sehe ich persönlich jetzt mehr Vorteile:
-Es ist weniger Einarbeitungszeit erforderlich
-Die Programmierung der KI ist zwar einfacher, kann aber sicherlich auch komplex genug ausgeprägt werden
-Die Programmierung einer Shooter-KI ist sehr realitätsnah, da sich das ja auf eine Menge Spiele bezieht. So kann man vielleicht noch was für zukünftige Projekte mitnehmen.
-Es lässt sich einfacher testen. Der Mensch kann in den Runden einfach mitspielen und verschiedene Situationen ausprobieren.
-Das Rahmenprogramm ist von Programmierung und Spielmechanik weniger aufwendig

Für andere Vorschläge bin ich aber auch offen.


3. BriskVM ist so nah an BlitzBasic, dass man damit viele Beispiele bereits direkt ausführen kann. Aus Spaß wollte ich mal mein Tetris-Spiel als Script ausführen. Habe die Hauptschleife einfach in eine Funktion gepackt und musste noch ein paar globale Variablen definieren(In BriskVM müssen alle Variablen definiert werden, was der Hauptunterschied zu BB ist), schon hat es als Script funktioniert.
Es ist also so, wie wenn man eine Funktion über Include einbinden würde.


Wenn der Großteil trotzdem lieber eine reine BlitzBasic-Lösung bevorzugt, ließe sich das aber auch arrangieren.
Die KI könnte man dann über UDP einbinden und sowohl ein BlitzBasic- als auch ein BlitzMax-Framework anbieten, dass den Netzwerkkram erledigt. Da ich kein BlitzMax habe, müsste dann aber jemand aus der Community das Framework für BlitzMax kopieren und umbauen.
Zu Bedenken ist hier aber, dass man auch lokal noch geringe Latenzen hat, es also zu Verzögerungen zwischen Datenbereitstellung, KI-Routine und Datenverarbeitung kommt.
Andererseits ist diese Multithread-Verarbeitung auch vorteilhaft, da eine schnell arbeitende KI damit von Haus aus besser gestellt ist als eine langsame KI-Berechnung, was das Zeit stoppen überflüssig macht.
Bei vielen KIs könnte hier die Performance leiden, da ja jede KI auf die neuen Daten vom Hauptprogramm warten muss. Hier müsste man dann vielleicht einen Delay festlegen, den jeder abwarten muss.


Eine direkte Einbindung als Code finde ich nicht so gut, da eine Festlegung auf eine Sprache erfolgt und das Ganze weniger flexibel ist wenn es z.B. um Änderungen geht oder man schon im Vorfeld ein paar KIs gegeneinander antreten lassen möchte. Außerdem müsste das Rahmenprogramm dann OpenSource sein und es kann keine Absicherung gegen unerwünschte Zugriffe erfolgen, so dass hier leicht Veränderungen außerhalb der Schnittstelle(bewußt oder unbewußt) erfolgen könnten.
Trotzdem bin ich auch hier für Vorschläge offen.


Debuggingmäßig hat man bei allen drei Varianten Ausgabemöglichkeiten, bei der Netzwerklösung halt nur im Extra Fenster.



4.Zitat:
Im Prinzip eine interessante Idee. Das ist mir allerdings ein wenig zu spezifisch.

Wie meinst Du das mit dem spezifisch? Was stellst Du Dir hier vor?
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Thorsten

BeitragDi, Mai 13, 2008 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich erkenne noch nicht wirklich den Sinn dahinter, BriskVM zu benutzen.
Es geht doch gerade darum, aus Blitz alles herauszuholen.
Wenn diese Leistung nicht mehr reicht und dann einfach die Sprache wechselt ist das nicht wirklich im Sinne des BCC..

mfG,

Thorsten

Geeecko

BeitragDi, Mai 13, 2008 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde, man könnte daraus sogar einen ganz neuen Wettbewerb machen.
BC (Bot Contest Very Happy). Jeden Samstag um 8 Uhr läuft ein Server, den jmd. zur verfügung stellt, und alle könenn mit ihren Clients reinjoinen, änderungen vornehmen usw....
Ab 9 Ist dann ein Tunier oder so, wo die Ergebnisse später auf einer HP geloggt werden.
Ich stelle mir das spannend und lustig / spaßig vor Smile
Ich bin also für Netzwerk...
Vllt könnte ja sogar jeder sein eigenes Bot-Bild haben ^^ Weil wenn alle gleich aussehen, ists ja doof Very Happy
Also ich finde die Idee nicht schlecht...
Und man könnte das Hauptprogramm auch in BMax oder BB schreiben, und jeder bekommt nur die *.exe datei.
So kann man erst gar nicht eingreifen... Dann hat man noch sein KI-Programm, welches nur das Netzwek-Zeug macht. Also die Ki halt, ne ^^ Und was die KI dann macht, sieht man ja im Hauptprogramm, weil die KI reinjoint.

hamZta

Administrator

BeitragDi, Mai 13, 2008 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss ganz ehrlich sagen, ein BCC hat mit Blitz* programmiert zu werden, irgendeine andere Sprache (und ist sie noch so ähnlich) macht das ganze irgendwie kaputt. Noobodys Idee ist ja wirklich nicht schlecht, ich stelle mir das so vor:

Jede KI hat ein paar Sensoren die man über TCP/IP abfragen kann:

  • Radar: Schickt einen Strahl in eine beliebige und liefert, wovon der Strahl abprallt (Gegner, Mauer etc)
  • Berührungssensor: Wenn die KI gegen eine Mauer läuft, wird ein positives Ergebnis zurückgegeben
  • Audiosensor: Registriert Geräusche (Schüsse, KI-Bewegung) in einem kleinen Umkreis um die eigene KI

Die Liste kann natürlich noch beliebig erweitert werden.
Das Abfragen von Sensoren über TCP/IP kann über ein einfaches Protokoll erfolgen. Damit nicht jede KI ständig 360° um sich herum scannt, hat zB der Radar eine gewisse "Cooldown"-Zeit und kann nur alle 2 Sekunden abgefragt werden.
Interessant wäre es vielleicht auch, Messungenauigkeiten der Sensoren zu implementieren - je weiter ein Objekt weg, desto ungenauer wird das Radar.

Aufgeteilt wird das ganze in Züge, in jedem Zug kann eine KI einen Sensor abfragen und eine Bewegung durchführen.
Der Einfachheit halber läuft die Bewegung tilebasiert ab, das Schießen erfolgt allerdings im 360°-Radius.

Ich denke, dass man das ganze so auch schön visualisieren kann. Natürlich ist das nur ein Vorschlag und muss nicht übernommen werden Wink

hamZta
Blog.

Geeecko

BeitragDi, Mai 13, 2008 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Radar finde ich nicht so gut. Dann schießen die ja alle nur 1 mal in 2 skeunden...
ich WILL ACTION!!!11 Very Happy Wink
Ne, aber man könnte das System auch austricksen, indem der Programmierer einfach einbaut, das da wo er mit der Mausklickt, ein gegner ist, dann wäre es ja so, als hätte die KI nen strahl abgeschossen, nur halt der es auf jedenfall stimmt, das da ein gegner ist.
Das wäre selbst noch möglich, wenn man 2 verschiedene Programme hat...
Also das ist leicht zu cheaten ^^
Ich bin dafür: MoveUp() Down etc.
Dann berechnet der Server die neue Position.
Dann gibt es noch DreheDich(Grad) und der Server berechnet die neue Position (natührlich nur wenn 360° grad drehungen möglich sind... bei 90° würde das ja schon bei MoveUp() und so berechnet werden können)
Dann Shot(). Der Server weiß, welche Waffe man atm hat, und die Position und die Guckrichtung, oder wenns 360° schüsse sind, dann Shot(Grad) halt, ne ^^ ich hoffe ihr wisst, was ich meine.

SpionAtom

BeitragDi, Mai 13, 2008 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann es auch ganz rudimentär machen:
Es gibt ein globales Feld-array und eine Liste mit Positionsdaten aller Spieler (ggf. mit deren Schüssen).
Diese Daten werden alle 5 ms aktualisiert und jeder kann sie abrufen.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group