Überlegungen zum Turnier/Wettkampf-Sim

Neuigkeiten zum c't-Bot und c't-Sim
Antworten
lomdar67

Überlegungen zum Turnier/Wettkampf-Sim

Beitrag von lomdar67 » 12 Apr 2006, 08:03

Hallo,

wir hatten uns ja schon mal vor einiger Zeit Gedanken über eine mögliche c't-Bot Wettkampfumgebung gemacht. Die c't hat die Idee ja auch in ihrem Vortrag auf der CeBit aufgegriffen und laut der aktuellen Roadmap wird jetzt mit Hochdruck an einer Umsetzung gearbeitet.
Der geplante Ansatz der c't, zwei Bots (oder besser zwei Bot-Programme) im c't-Sim gegeneinander antreten zu lassen ist zwar ganz reizvoll, ich hatte mir aber etwas ganz Anderes vorgestellt und möchte daher meine Überlegungen mal zu "Papier" bringen:

Die Grundidee:

Damit jeder mit machen kann, findet der Wettkampf im c't-Sim statt.

Ein Bot erfüllt eine gestellte Aufgabe, die "Zeit" die er dazu braucht wird gemessen und an den Server übermittelt. Der Server verwaltet eine Bestenliste je Aufgabe.

Die Aufgaben:

An Hand der aktuellen technischen Fähigkeiten des c't-Bot könnte ich mir folgende Aufagben vorstellen:

Der Bot fährt von a nach b, die Zeit wird gemessen
Der Bot fährt von a nach b und muss dabei n andere Punkte in einer gegebenen Reihenfolge kreuzen
Der Bot bringt einen, oder mehrere Genstände von a nach b, oder von a nach b über n andere Punkte. Da der Bot bisher Gegenstände nur schieben kann, spielt er dabei Sokoban.

Die Liga (Ligen):

Hat der c't-Bot seine Aufgabe erfüllt, übermittelt der c't-Sim die dafür benötigte "Zeit" an den Server. Damit man die Ergebnisse zuordnen kann, können nur registrierte User Ihr Ergebniss übermitteln.
Je Aufgabe gibt es eine Bestenliste, evtl. könnte man das auch nach Regionen aufteilen. Hier lassen sich später dann auch Ergebnisse von realen Wettbewerben (bei den regional Treffen?) verwalten.

Voraussetzungen im c't-Sim:

Der c't-Sim braucht neue Elemente:

Einen Startpunkt, beim Überfahren des Punktes beginnt die eigentliche Aufgabenstellung (also die "Zeitmesung").
Einen Endpunkt, beim Überfahren des Punktes endet die "Zeitmesung", sofern der Bot seine Aufgabe erfüllt hat.
Kreuzungspunkte, die registrieren, das sie überfahren wurden und das sie in der Richtigen Reihenfolge überfahren wurden.
"Gegenstände", die der c't -Bot "transportieren" kann. Die zuvor aufgeführten Punkte müssen dann auch registrieren können, ob der Bot den Gegenstand mit sich führt oder nicht.

Technische Einzelheiten:

Der c't-Sim bringt eine feste Aufgabenumgebung mit. Damit Manipulationen etwas erschwert werden, sollte es für diese Turnier-Sims keinen Sourcecode geben. Für jeden Aufgabe gibt es einen eigenen vorkompilierten c't-Sim.
Damit das Ergebniss an den Server übermittelt werden kann, muss es eine Möglichkeit geben, den Usernamen, sowie das Passwort und evtl. auch die Region zu speichern.
Die "Zeitmessung" muss Rechner unabhängig sein. D.h. egal, ob die Aufgabe auf einem 468'er oder einem Pentium 4 gelöst wird, muss die ermittelte "Zeit" die gleiche sein.
Damit die Ergebnisse auch überprüft werden können wäre es evtl. auch ganz Interessant eine Möglichkeit zu haben seinen c't-Bot Code zusammen mit dem Ergbniss an den Server zu übermitteln.

melwood

PS: Die Umsetzung der Serverseite könnte ich übernehmen...
Zuletzt geändert von lomdar67 am 12 Apr 2006, 10:28, insgesamt 1-mal geändert.

galdo

Re: Überlegungen zum Turnier/Wettkampf-Sim

Beitrag von galdo » 12 Apr 2006, 09:03

melwood hat geschrieben:Hallo,

wir hatten uns ja schon mal vor einiger Zeit Gedanken über eine mögliche c't-Bot Wettkampfumgebung gemacht. Die c't hat die Idee ja auch in ihrem Vortrag auf der CeBit aufgegriffen und laut der aktuellen Roadmap wird jetzt mit Hochdruck an einer Umsetzung gearbeitet.
Der geplante Ansatz der c't, zwei Bots (oder besser zwei Bot-Programme) im c't-Sim gegeneinander antreten zu lassen ist zwar ganz reizvoll, ich hatte mir aber etwas ganz Anderes vorgestellt und möchte daher meine Überlegungen mal zu "Papier" bringen:

Die Grundidee:

Damit jeder mit machen kann, findet der Wettkampf im c't-Sim statt.

Ein Bot erfüllt eine gestellte Aufgabe, die "Zeit" die er dazu braucht wird gemessen und an den Server übermittelt. Der Server verwaltet eine Bestenliste je Aufgabe.
Die Idee ist schonmal nicht schlecht und klingt ganz interessant - v.a. finde ich den Gedanken interessant, dass man später auch reale "Wettkämpfe" austragen kann - mit mehreren echten Bots ;)
melwood hat geschrieben: Die Aufgaben:

An Hand der aktuellen technischen Fähigkeiten des c't-Bot könnte ich mir folgende Aufagben vorstellen:

Der Bot fährt von a nach b, die Zeit wird gemessen
Der Bot fährt von a nach b und muss dabei n andere Punkte in einer gegebenen Reihenfolge kreuzen
Der Bot bringt einen, oder mehrere Genstände von a nach b, oder von a nach b über n andere Punkte. Da der Bot bisher Gegenstände nur schieben kann, spielt er dabei Sokoban.
Eigentlich bisher noch ein bissl lasch - leider hast du recht, und es entspricht nunmal den technischen Fähigkeiten - da der Wettkampf aber nicht morgen stattfinden wird, muss man sich ja auf die Aufgaben noch nicht einigen. Wenns dann soweit sein sollte, kann man ja das ganze noch mal besprechen.
melwood hat geschrieben: Die Liga (Ligen):

Hat der c't-Bot seine Aufgabe erfüllt, übermittelt der c't-Sim die dafür benötigte "Zeit" an den Server. Damit man die Ergebnisse zuordnen kann, können nur registrierte User Ihr Ergebniss übermitteln.
Je Aufgabe gibt es eine Bestenliste, evtl. könnte man das auch nach Regionen aufteilen. Hier lassen sich später dann auch Ergebnisse von realen Wettbewerben (bei den regional Treffen?) verwalten.
Wie bereits oben erwähnt: Sehr geile Idee ;)
melwood hat geschrieben: Voraussetzungen im c't-Sim:

Der c't-Sim braucht neue Elemente:

Einen Startpunkt, beim Überfahren des Punktes beginnt die eigentliche Aufgabenstellung (also die "Zeitmesung").
Einen Endpunkt, beim Überfahren des Punktes endet die "Zeitmesung", sofern der Bot seine Aufgabe erfüllt hat.
Kreuzungspunkte, die registrieren, das sie überfahren wurden und das sie in der Richtigen Reihenfolge überfahren wurden.
"Gegenstände", die der c't -Bot "transportieren" kann. Die zuvor aufgeführten Punkte müssen dann auch registrieren können, ob der Bot den Gegenstand mit sich führt oder nicht.

Technische Einzelheiten:

Der c't-Sim bringt eine feste Aufgabenumgebung mit. Damit Manipulationen etwas erschwert werden, sollte es für diese Turnier-Sims keinen Sourcecode geben. Für jeden Aufgabe gibt es einen eigenen vorkompilierten c't-Sim.
Damit das Ergebniss an den Server übermittelt werden kann, muss es eine Möglichkeit geben, den Usernamen, sowie das Passwort und evtl. auch die Region zu speichern.
Die "Zeitmessung" muss Rechner unabhängig sein. D.h. egal, ob die Aufgabe auf einem 468'er oder einem Pentium 4 gelöst wird, muss die ermittelte "Zeit" die gleiche sein.
Damit die Ergebnisse auch überprüft werden können wäre es evtl. auch ganz Interessant eine Möglichkeit zu haben seinen c't-Bot Code zusammen mit dem Ergbniss an den Server zu übermitteln.
Das mit den vorkompilierten Sims ist eine gute und v.a. sinnvolle Idee - die Zeitmessung kann man bestimmt irgendwie per NTP implementieren.

Hier gibts zum Beispiel fertige NTP-Klassen für Java und auch nötige Information - das ist dann zumindest nicht beienflussbar! Die Start-, End- und Messpunkte kann man bestimmt mit der Java3D Api implementieren, so dass die Umsetzung der geplanten Ideen im c't-Sim "eigentlich" keine Probleme darstellen sollten!

In diesem Sinne
GALDO

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 13 Apr 2006, 18:45

Hi,
gute Idee auf jeden Fall!

Wenn man mal davon ausgeht, dass die Latenzzeit der Internetleitung nahezu konstant ist (im Zeitraum von Start bis Stopp), dann könnte man die Zeitmessung doch serverseitig machen.

Gruß Timo
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

galdo

Beitrag von galdo » 13 Apr 2006, 18:54

Ist das per NTP nicht geschickter - dann kann man den Timestamp auch direkt in ne Datenbank jagen ;)

Galdo

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 13 Apr 2006, 19:00

und besser manipulieren, hm? :P
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

galdo

Beitrag von galdo » 13 Apr 2006, 20:24

wieso? - der (fertig compil. ct-sim) nimmt die zeitdaten direkt von nem (fest eingestellten) ntp-server. die werden dann direkt in ne Datenbank (hier auf dem server) gejagt, und damit kann man da nix beeinflussen - oder hab ich was übersehen?

Galdo

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 13 Apr 2006, 20:57

naja Java und "compiliert" ist so eine Sache... ;)
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

philipp

Beitrag von philipp » 13 Apr 2006, 23:01

Hi!

Naja so sicher würd ich da nicht sein. Einen DNS Namen umbiegen ist schnell in der Hosts erledigt, einen NTP Aufruf über IP per Firewall umzuleiten auch kein Thema.
Sicher ein wenig Aufwand nur was tun manche Leute nicht alles um auf Platz 1 zu sein. :shock:

lg Philipp

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 13 Apr 2006, 23:04

richtig, alles was du clientseitig machst, ist letztlich "unsicher" würde ich sagen ;)
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

philipp

Beitrag von philipp » 13 Apr 2006, 23:12

Auch wenn man am Server ein Startpaket auswertet und am Server die Zeit speichert, dann das gleiche beim Ziel macht, müßte man trotzdem noch etwas einbauen um diese Pakete nicht zu generieren.

Etwas in der Art wie ein Wegprotokoll um die max Geschwindigkeit zu überprüfen.(Was man natürlich wieder faken kann.... 8) )

Oder ganz anders:
Man lädt seinen Code auf den Server der simuliert die Fahrt und rechnet. Damit wäre die Plattform immer gleich und "relativ" angriffssicher (Muss man dan auf die Admins aufpassen .... :roll: )

lg Philipp

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 13 Apr 2006, 23:21

Das ist eine gute Idee, den Code auf dem Server ausführen zu lassen. Jedenfalls für den eigentlichen Wettkampf, testen kann man ja lokal und man könnte auch noch eine Zwischenstufe machen, wo man ("inoffiziell") gegen andere antreten kann ;)
Oder man übermittelt laufend Daten an den Server, also wie der Bot reagiert und der Server berechnet dadurch die Bot-Position etc.
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

philipp

Beitrag von philipp » 13 Apr 2006, 23:35

Den Gedanken hatte ich auch laufend die Botposition an den Server zu schicken. Aber da könnte man ja auch einen "Waypointeditor" basteln und diese dann vorspielen.

Noch ein Vorteil der Server Code Lösung wären die halbwegs gleichen Ergebnisse da ja der Prozessor gleich ist.(Einzig die Last durch Webserver und/oder Uploads müsste man sich anschauen)

Nachteil: Server hat dann sicher recht viel zu tun. Aber einen inoffiziellen Server für Training und Qualifying -> Berechtigung zur Prüfung am Messserver :lol:

galdo

Beitrag von galdo » 14 Apr 2006, 09:18

philipp hat geschrieben:Hi!

Naja so sicher würd ich da nicht sein. Einen DNS Namen umbiegen ist schnell in der Hosts erledigt, einen NTP Aufruf über IP per Firewall umzuleiten auch kein Thema.
Sicher ein wenig Aufwand nur was tun manche Leute nicht alles um auf Platz 1 zu sein. :shock:

lg Philipp
Da habt ihr natürlich schon recht - nur meint ihr, dass dieses Szenario relevant ist?

Gruß Galdo

lomdar67

Beitrag von lomdar67 » 14 Apr 2006, 10:23

philipp hat geschrieben:Auch wenn man am Server ein Startpaket auswertet und am Server die Zeit speichert, dann das gleiche beim Ziel macht, müßte man trotzdem noch etwas einbauen um diese Pakete nicht zu generieren.

Etwas in der Art wie ein Wegprotokoll um die max Geschwindigkeit zu überprüfen.(Was man natürlich wieder faken kann.... 8) )

Oder ganz anders:
Man lädt seinen Code auf den Server der simuliert die Fahrt und rechnet. Damit wäre die Plattform immer gleich und "relativ" angriffssicher (Muss man dan auf die Admins aufpassen .... :roll: )

lg Philipp
Also alles was in Richtung Zeitmessung über einen (NTP) Server geht, ist meiner Meinung nach nicht realisierbar:

Auf einem langsamen Rechner läuft der c't-Sim auch langsamer, entsprechend braucht der c't-Bot dort auch länger um eine Aufgabe zu lösen. Dazu kommen dann noch unterschiedliche Internetverbindugen, die das Ergebniss zusätzlich verfälschen.

Ich würde eh von einer echten Zeitmessung absehen sondern irgend etwas heranziehen, das rechenleistungsunahängig ist.
Leider kenne ich micht mit Java zu wenig aus, um hier eine konkrete Lösung zu bieten.

Die Idee, die eigentliche "Zeitbestimmung" auf einem serverseitigen c't-Sim zu machen finde ich nicht schlecht, allerdings denke ich, ist der Programmieraufwand dafür recht hoch und man müsste dann evtl. sogar wirklich einen eigenen Server dafür abstellen.
Zusätzlich bräucht man immer noch einen clientseitigen c't-Sim, damit man seinen Code auch vorab testen kann.

Ich denke mal, manipulierbar ist alles, wenn man genügend Energie hinein steckt, daher würde ich, zumindest im ersten Schritt eine clientseitige Lösung bevorzugen. Ich denke, die läßt sich einfacher realisieren...

melwood

Mann könnte ja immer noch, wie ich in meinen Ausführung beschrieben habe, den Code mit ein schicken, damit man das Ergebniss verifizieren kann.

chrimo

Beitrag von chrimo » 14 Apr 2006, 18:24

Ich denke das Faken von Ergebnissen und dem damit verbundenen Ranking
ist hinfällig, wenn der Siegercode einfach mit eingeschickt werden muss.
Dann kann jeder die Zeiten überprüfen. Schummler kommen dann einfach an den Pranger bzw. die Zeiten werden nicht gewertet.
Alle anderen Praktiken bringen uns beim Bot-Sport nicht wirklich weiter...

Bye
Chrimo

Antworten