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

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

12.02.2015, 13:18

Hier also mein nächster Vorschlag ...
  1. KI-Programmierung in C++.
  2. Jeder kann so viel Rechenzeit in Anspruch nehmen wie er möchte.
  3. Die KIs müssen deterministisch sein.
  4. Optional: Der Speicherverbrauch wird limitiert, indem Heap-Allokationen verboten werden und der Stack begrenzt wird (so wie bei einigen früheren Contests).
Und nun der entscheidende Punkt:
Die Rechenzeit wird berücksichtigt, indem ein gemachter Punkt im Spiel nicht konstant 1 zählt, sondern abhängig von der relativen Rechenzeit verglichen mit dem Kontrahenten auch weniger als 1. Wenn Spieler A doppelt so viel Rechenzeit benötigt wie Spieler B (gemessen wird die Summe der Rechenzeiten über die gesamte Partie), dann bekommt er "als Strafe" pro gemachtem Punkt im Spiel nur 0.5 Punkte, während Spieler B einen ganzen Punkt erhält.
Das Ganze ist natürlich immer noch nicht ganz unabhängig vom Rechner, auf dem getestet wird. Aber wenn man annimmt, dass die relativen Geschwindigkeitsunterschiede von Rechner zu Rechner nicht so stark variieren, dann ist der Einfluss schon deutlich reduziert.

PS: Zugfahren an Karneval ist ekelhaft. :fie:

12

12.02.2015, 13:59

Noch nirgendwo ...

Achso, ich hab mich nur gewundert warum die erste Runde schon in 3 Tagen vorbei ist (wäre).

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

13

12.02.2015, 14:33

Das beguenstigt evtl. defensive KIs. Wenn ich keinen Gegentreffer kassiere, kann ich unabhaengig von meiner Rechenzeit nie verlieren. Aber probieren koennen wir es ja mal. Keine Ahnung wie realistisch es ist, das man keine Treffer bekommt. Evtl. könnte man ja auch sagen, das jedes Spiel beim Stand 1/10 : 1/10 startet.

Mit dem Speicher musst du aber schon einen relativ grossen Teil von C++ verbieten, um das sinnvoll umzusetzen.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

14

12.02.2015, 14:42

Zum Optimieren wären noch ein paar wichtige Fragen zu klären:
Ist Parallelisierung oder Vektorisierung(/Intrinsics) erlaubt? Mit welchen Compiler auf welche Plattform wird kompiliert? Visual Studio? Standard Compilereinstellungen, Release? Und welche Version? Vermutlich als 64 Bit kompiliert? Welche CPU steckt den im Testcomputer?

Helmut

5x Contest-Sieger

  • »Helmut« ist der Autor dieses Themas

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

15

12.02.2015, 17:42


Die Rechenzeit wird berücksichtigt, indem ein gemachter Punkt im Spiel nicht konstant 1 zählt, sondern abhängig von der relativen Rechenzeit verglichen mit dem Kontrahenten auch weniger als 1. Wenn Spieler A doppelt so viel Rechenzeit benötigt wie Spieler B (gemessen wird die Summe der Rechenzeiten über die gesamte Partie), dann bekommt er "als Strafe" pro gemachtem Punkt im Spiel nur 0.5 Punkte, während Spieler B einen ganzen Punkt erhält.
Das Ganze ist natürlich immer noch nicht ganz unabhängig vom Rechner, auf dem getestet wird. Aber wenn man annimmt, dass die relativen Geschwindigkeitsunterschiede von Rechner zu Rechner nicht so stark variieren, dann ist der Einfluss schon deutlich reduziert.

Sehr gute Idee :) Da hätt ich auch selber drauf kommen müssen. :)
Nur Heapallokationen zu verbieten wird schwierig, da allein schon im Gamestate ein std::vector vorkommt. Ich werd einfach sagen 100MB pro KI und fertig. Damit sollte wohl jeder zurechtkommen.

@TGGC
Defensive KIs werden unmöglich sein.

@Spiele Programmierer
Es wird nur Standard C++ (11) erlaubt sein. Intrinsics also nein, Threading aber ja. Aber ich denke mal nur ein Workerthread pro KI und die KI muss natürlich deterministisch bleiben. Vermutlich werd ichs mit CodeLite und Clang kompilieren, um die Linuxfreunde hier nicht abzuschrecken.

Ich habe mal eine Kalibrierungsfunktion geschrieben: Hier ist eine Exe mit zwei Test KIs. Der "Std" Wert sollte sich links bei etwa 60% und rechts bei etwa 30% einpendeln. Die Werte sollte theoretisch auf euren Computern die selben sein, werden aber wahrscheinlich doch ziemlich abweichen. Aber es ist denke ich doch ein guter Anhaltswert.
Der CPU Wert gibt die tatsächliche Geschwindigkeit im Durchschnitt an, wobei 100% gleich Echtzeit ist. Sobald also eine KI über 100% liegt wird das Spiel langsamer. LS steht für die CPU Zeit in der letzten Sekunde.
Wenn man sich das Spiel etwas länger ansieht wird man auch eine kleine Überraschung feststellen, die bisher scheinbar noch niemand bemerkt hat :)
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)

16

12.02.2015, 17:56


Wenn man sich das Spiel etwas länger ansieht wird man auch eine kleine Überraschung feststellen, die bisher scheinbar noch niemand bemerkt hat :)


Falls du die 2 Bälle meinst, die hatte ich gestern schon entdeckt gleich in der ersten Runde, hatte es erst für einen Grafikbug gehalten, weil Der Computer den nie einsetzen wollte :D

Bleibt es eigentlich bei 2 oder kommen noch mehr?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

17

12.02.2015, 18:46

Kann man die KI nicht einfach in einem extra Thread laufen lassen? Dann läuft das Spiel einfach weiter und wenn ich länger zum berechnen brauche ist mein Zustand veraltet. Das sollte doch ausreichend und unabhängig von der Rechenzeit der KI gehen oder nicht?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

18

12.02.2015, 20:19

Also ich weiss nicht, mit den Threads wird die Zeitmessung im besten Fall doch total random und im schlimmsten Fall, gewinnt der, dessen Threads den meisten Unsinn machen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

19

13.02.2015, 11:44

Ich glaube du verstehst mich da falsch. Wenn der KI Thread sich zum Beispiel am Anfang den Spielzustand holt und dann 3 Sekunden für seinen nächsten Zug benötigt dann hat sich der Zustand des Spiels extremer verändert als wenn er nur 1 Sekunde benötigt hätte. DaS kann man vielleicht mit Reaktionszeit vergleichen. Welche Variante einem lieber ist kann ja jeder selbst entscheiden. Aber ich wüsste nicht dass dadurch Nachteile entstehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

20

13.02.2015, 11:47

@Schorsch: Diese Lösung hatte ich auch schon vorgeschlagen, wurde aber abgelehnt ;)

Werbeanzeige

Ähnliche Themen