Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

121

10.02.2015, 20:16

Die anderen Varianten gefallen mir nicht, weil sie das Spiel nicht deterministisch machen würden. So kann man zwei KIs nur einmal gegeneinander antreten lassen und hat das Ergebnis. Auch können so alle die Matches selber nachvollziehen.

Dann musst du aber auch Zufallsgeneratoren in den KIs verbieten (zumindest das Seeden mit Systemzeit o. Ä.).

Kann man in der Forensoftware hier eigentlich die Fähigkeit, Beiträge zu editieren, für einen Thread deaktivieren? Dann könnten die Teilnehmer die Codes direkt in den Thread posten.

Man kann einzelne Postings schließen, dann sind sie nicht mehr editierbar.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

122

10.02.2015, 20:52

Ich würde vielleicht auch mitmachen, wenn die Aufgabe interessant wird. Ich will aber nicht zuviel versprechen - ich habe hier auch schonmal Interesse bekundet, aber dann bei der Aufgabenstellung keine große Lust zur Umsetzerung. ;)

Einfach bei irgendwelchen Leuten zu testen, fände ich etwas schlecht nachvollziehbar. Es sollte eine feste vorgegebene Zeitspanne und ein feste Plattform gegeben sein, auf der die Zeitanforderungen erfüllt werden müssen. Nur dann kann man wirklich darauf optimieren.

Determinismus würde ich auch nicht voraussetzen. Das grundlegend verhindern zu wollen, würde sehr viele Optimierungen verbieten und Zeitverbrauch ist nun mal ohnehin nicht deterministisch. Überhaupt, Programmieren in C++ ist ganz leicht mal nicht deterministisch. Ein versehentlicher Zugriff irgendwo in den Heap kann zum Beispiel ganz leicht ein Programm nicht deterministisch machen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (10.02.2015, 20:57)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

123

10.02.2015, 21:35

Ehrlich gesagt kann ich mir das nicht so recht vorstellen, wie die KIs da um die Rechenzeit kaempfen sollen bzw. wie man effizient etwas programmieren soll, was sich dann dynamisch an die Rechenleistung anpasst, so das gerade noch "Echtzeit" erreicht wird. Am ehesten ginge es noch, wenn die KI in einer speziellen Scriptsprache geschrieben waere.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

124

11.02.2015, 01:21

Die anderen Varianten gefallen mir nicht, weil sie das Spiel nicht deterministisch machen würden. So kann man zwei KIs nur einmal gegeneinander antreten lassen und hat das Ergebnis. Auch können so alle die Matches selber nachvollziehen.

Dann musst du aber auch Zufallsgeneratoren in den KIs verbieten (zumindest das Seeden mit Systemzeit o. Ä.).

Ich werd eine deterministische Zufallsfunktion bereitstellen (die ich aus deinem Pong Contest geklaut habe:)). Undefiniertes und platformspezifisches Verhalten wird verboten. Das Spiel wird auch symmetrisch sein, also wenn KI1 gegen KI2 kämpft ist das das selbe wie wenn KI2 gegen KI1 kämpft.

Determinismus würde ich auch nicht voraussetzen. Das grundlegend verhindern zu wollen, würde sehr viele Optimierungen verbieten und Zeitverbrauch ist nun mal ohnehin nicht deterministisch. Überhaupt, Programmieren in C++ ist ganz leicht mal nicht deterministisch. Ein versehentlicher Zugriff irgendwo in den Heap kann zum Beispiel ganz leicht ein Programm nicht deterministisch machen.

So schlimm stell ich mir das nicht vor. Wenn man etwas aufpasst sollte man das schon hinkriegen, und falls nicht dürfte man solche Fehler dank des Schmetterlingseffekts recht schnell feststellen. (zumindest dass es sie gibt, sie aufzuspüren könnte schon tricky sein.) Optimierungen fielen mir auch keine ein, die dadurch wegfielen,

@TGGC
Ich glaub du stellst dir das zu kompliziert vor. Sagen wir das Spiel arbeitet mit 50 Frames pro Sekunde, also 20ms pro Frame. Am Ende der Runde werde ich dann die durchschnittliche Rechendauer der Champion KI messen und wenn diese über 20ms liegt gibt's Punktabzug. Wenn's über 40ms ist wird sie disqualifiziert.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

125

11.02.2015, 07:02


@TGGC
Ich glaub du stellst dir das zu kompliziert vor. Sagen wir das Spiel arbeitet mit 50 Frames pro Sekunde, also 20ms pro Frame. Am Ende der Runde werde ich dann die durchschnittliche Rechendauer der Champion KI messen und wenn diese über 20ms liegt gibt's Punktabzug. Wenn's über 40ms ist wird sie disqualifiziert.


Beim entwickeln der KI hätte ich aber nicht deine systemconfig somit kann ich auch keine aussage treffen wie weit ich von den 20 bzw. 40 ms entfernt bin. Das sehe ich dabei als Problem an, zumindest für die Entwicklung der KI.

Gruß Koschi.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

126

11.02.2015, 08:39

Beim entwickeln der KI hätte ich aber nicht deine systemconfig somit kann ich auch keine aussage treffen wie weit ich von den 20 bzw. 40 ms entfernt bin. Das sehe ich dabei als Problem an, zumindest für die Entwicklung der KI.
Genau was ich sagte. Angenommen das Resultat meiner KI wird durch irgendeine Iterationstiefe (bei Brute Force gar nicht so ungewoehnlich) bestimmt, dann haengt ihre Effizienz stark davon ab, wie genau ich deine Rechenleistung schaetze oder messen kann.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

127

11.02.2015, 08:55

Dann würde ich echt lieber beide gleichzeitig rechnen lassen. Wer länger braucht, hat gegen einen schnellen Gegner einen Nachteil, weil dieser häufiger Updates schafft und damit schneller reagieren kann.
Natürlich ist es dann nicht mehr deterministisch, aber man kann doch einfach sehr viele Runden spielen lassen (sagen wir mal mindestens 100). Bei jedem Mal könnte man auch die CPU-Kerne tauschen, um unfaire Einflüsse durch andere im Hintergrund laufende Prozesse zu minimieren.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

128

11.02.2015, 10:14

Ja, aber was soll das heissen "gleichzeitig"? Skizzier doch mal, wie das gehen soll.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

129

11.02.2015, 10:26

Ich meine echt gleichzeitig. Jede KI läuft auf ihrem eigenen CPU-Kern und kann sich so oft wie sie es schafft den aktuellen Status der Welt holen und Kommandos an ihren Agenten ausgeben. Die Spiellogik läuft wiederum auf einem separaten Kern und aktualisiert so oft wie es geht die Spielwelt.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

130

11.02.2015, 11:58

Das mag sich ja in der Theorie ganz toll anhoeren, aber in der Praxis ist das leider nicht so einfach. Du kannst ja nicht einfach mal den Status holen, dort wo Threads miteinander kommunizieren gibt es immer einen Overhead und ausserdem muss auch jemand erstmal dafuer sorgen das dies ueberhaupt ohne Deadlocks etc. laeuft. Ausserdem wirst du es nicht schaffen, das eine KI irgendwie komplett isoliert laeuft und die andere nicht beeinflusst, denn einer KI die mehr Ressourcen anfordert, werden diese vom OS mit ziemlicher Sicherheit auch gegeben. Das macht das System sehr komplex und unvorhersehbar und lenkt vom eigentlichen Thema ab.

Werbeanzeige