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

51

18.08.2008, 12:33

Die Zeitangabe wuerde mich mal interessieren (was in Klammern steht). Um so groesser, desto stabileres Spiel (zumindestens bei mir). Mitlerweile gewinnt auch ab und an rechts. Naja, kommt drauf an wieviele Testspiele du gemacht hast und ob die Abweichung von einer Gleichverteilung ( 50% : 50% ) signifikannt sind.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

52

18.08.2008, 13:31

Ich habe mit dem aktuellen Framework ein kleines Problem (ja, ich weiß, wieder mal :oops:). Dieses mal ist es ein Detail der variablen Zeitschritte.

Ein Kommentar sagt "Die KIs werden einmal pro Frame aufgerufen.". Leider bedeutet das jedoch nicht, dass dieser Aufruf immer zu Beginn des Frames stattfindet. Tatsächlich sind die zeitlichen Abstände zwischen zwei KI Aufrufen variabel,

Beispiel: der Ball kollidiert nach 0.9 Zeiteinheiten mit der Bande. Der aktuelle Simulationsschritt wird folglich auf diese 0.9 Zeiteinheiten beschränkt.
Da der Schritt jedoch nicht den gewünschten 1.0 Zeiteinheiten entsprach, werden die KIs zu beginn des folgenden Simulationsschritts nicht aufgerufen (da sie in diesem Zeitabschnitt ihren Steuerbefehl ja bereits gegeben haben).
Dieser folgende Simulationsschritt wird aber in aller Regel wieder über die vollen 1.0 Zeiteinheiten simuliert werden (Konstellationen in der Spielfeldecke mal außer Acht gelassen).
Dadurch bleibt der Bewegungsbefehl der KI für 1.9 Zeiteinheiten gültig.

Im weiteren Verlauf ist es durch die Diskrepanz zwischen gs.time und real_time auch möglich, dass eine KI Entscheidung weniger als 1.0 Zeiteinheiten ausgeführt wird.
(Im obigen Beispiel wäre das der Fall, wenn der nächste zeitlich begrenzte Simulationsschritt in z.B. nach 0.2 Zeiteinheiten statt fände, da X.9 + 0.2 = (X+1).1, der darauf folgende Simulationsschritt also wieder die KI laufen lassen würde, und somit der Befehl lediglich 0.2 Zeiteinheiten ausgeführt würde.)

Eine mögliche Korrektur könnte es sein, den aktuellen Simulationszeitschritt nicht auf 1.0 Zeiteinheiten, sondern auf die Differenz zum nächsten ganzzahligen Zeitpunkt zu beschränken. Somit würden kritische Bewegungsabschnitte wie beabsichtigt separat in zeitlich beschränkten Schritten simuliert, diese würden sich aber wiederum zu 1.0 Zeiteinheiten aufaddieren und dadurch eine KI-Ausführung alle 1.0 Zeitschritte erlauben. Aussehen würde das so:

C-/C++-Quelltext

1
2
3
// in do_game()

//safe_dt = std::min(safe_dt, 1.0f);

safe_dt = std::min(safe_dt, float (gs.time + 1) - real_time);


Nicht, dass ich diesen Umstand nicht in meiner KI kompensieren könnte. Das beschriebene Phänomen verkompliziert jedoch das kontrollierte Spielen des Balls ein wenig, und möglicher Weise ist sich nicht jede/r darüber im klaren. Jetzt wisst ihr Bescheid ;)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

53

18.08.2008, 13:48

Ja, da hast du recht.
Die Lösung ist ja wirklich sehr einfach (ich hatte mir dieselbe Lösung schon während des Durchlesens deines Beitrags ausgedacht). Werde ich heute Abend einbauen, wenn ich wieder zu Hause bin.

54

18.08.2008, 14:12

Arg, die Loesung macht nur meine Gegner besser, die Referenzloesung haelt etwas laenger durch mit dieser Aenderung :-(.

55

18.08.2008, 14:20

Zitat von »"knivil"«

Die Zeitangabe wuerde mich mal interessieren (was in Klammern steht). Um so groesser, desto stabileres Spiel (zumindestens bei mir). Mitlerweile gewinnt auch ab und an rechts. Naja, kommt drauf an wieviele Testspiele du gemacht hast und ob die Abweichung von einer Gleichverteilung ( 50% : 50% ) signifikannt sind.


(Link)

habs jetzt mal 2 stunden laufen lassen... War zu faul die Referenz umzubenennen^^
Der Wert in den Klammern ist die Spielzeit des Spiels und die hinter T ist die durchschnittliche Spielzeit aller bisherigen Spiele.

56

18.08.2008, 14:28

Verdammt, ich muss mich mehr ins Zeug legen :-). Ja, ich glaube du hasst recht, die linke Seite hat bei dir einen kleinen Vorteil.

57

18.08.2008, 14:42

KI gegen sich selbst sagt aber imho nicht viel aus über die Fähigkeit gegen andere KI. Auch meine KI hat Schwächen, aber meine KI nutzt die eigene schwäche nicht aus. Außerdem verschätzt sie sich noch manchmal;) Wenn du magst kannst ja mal gegen meine spielen :P

58

18.08.2008, 15:28

David laesst sie am sie am 07.09.08 gegeneinander antreten, bis dahin muss ich noch numerische Ungenauigkeiten kompensieren.

59

18.08.2008, 16:30

Viel braucht man da doch nicht kompensieren. Die Formeln für die Beschleunigung und Bewegungen sind schließlich gegeben. Das geht alles ziemlich genau. ;)

60

18.08.2008, 16:43

Ach, und warum Spielen meine beiden Leute nicht ewig? Oder deine?

Werbeanzeige