Einstieg in die Entwicklung

neue und verbesserte Dialogfunktionen für ASC

Moderator: Moderatoren2

Antworten
Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Einstieg in die Entwicklung

Beitrag von Ed von Schleck »

Hallo alle!

Ich habe vor ein paar Wochen ASC entdeckt und finde es großartig - vielen Dank an alle Entwickler!

Allerdings ist mir aufgefallen, dass die KI häufig recht lange braucht, um ihre Züge zu planen. Ich zocke auf Reisen gerne auf meinem Netbook, und das Ding ist recht lahm, da kann so ein Zug mal mehrere Minuten dauern. Ich hoffe, um Weihnachten herum ein wenig Zeit zu finden und zu versuchen ein wenig mehr Performance aus der KI herauszukitzeln. Dazu bräuchte ich ein wenig Einstiegshilfe. Ich schüttel mal mal ein paar Punkte, die mir gerade einfallen, aus dem Handgelenk:
  • Ich habe mal die cpp-Dateien in source/ai überflogen. Sie scheinen recht übersichtlich zu sein, sind aber wenig kommentiert. Häufig ist Code auskommentiert, ohne Hinweis darauf, warum. Ein paar hilfreiche Kommentare, oder auskommentierten Code löschen (immerhin wird ein Versionsconstrolsystem verwendet, man kriegt ja alles wieder) würde mir sehr helfen.
  • Ich würde wohl damit anfangen, mit perf oder oprofile den Code zu profilen. Gibt es da gute Erfahrungshinweise? Was benutzt das Core-Team?
  • Gibt es Low-Hanging Fruit, also Stellen, wo ich ohne Kenntnis des Großen Ganzen schon mal brauchbare Ergebnisse erzielen kann? Gibt es so was wie ne TODO-List für Performance-Sensible Sachen?
  • Wurde schon mit SSE intrinsics u.Ä. experimentiert (ich habe mir nichts genaues angeschaut, aber denke, dass man häufig z.B. alle acht Felder um eine Einheit checken muss. So was ließe sich bestimmt mit SSE optimieren).
Ich hab seit meiner Uni-Zeit (also seit ca. zehn Jahren) kein C++ mehr geschrieben, also weiß ich nicht, wie effizient ich sein kann, aber so, wie der Code aussieht, glaube ich, dass ich mich schnell zurechtfinde. Jede Art von Kommentar, Dokumentation, Hinweis etc. würde mir helfen. Auch generelle C++ Performance- oder Debugging-Tipps.

Vielen Dank,
Ed von Schleck
leo1
Unteroffizier
Unteroffizier
Beiträge: 331
Registriert: So 11. Sep 2011, 12:09
Einheitenset: Teccnols

Re: Einstieg in die Entwicklung

Beitrag von leo1 »

Ich verstehe leider gar nichts von dem, was Du da schreibst. Aber Du scheinst Ahnung zu haben und mithelfen zu wollen. Das finde ich wiederum richtig cool. Bestimmt wird sich bald The Coder (unser Genie) bei Dir melden. Herzlich Willkommen, wir freuen uns auf Dich,
LEO
Benutzeravatar
TheCoder
Stabsunteroffizier
Stabsunteroffizier
Beiträge: 453
Registriert: Mo 15. Jun 2009, 20:38

Re: Einstieg in die Entwicklung

Beitrag von TheCoder »

Hallo,

es freut mich, dass Du Dich für die KI interessierst. Ohne Frage hat die einiges Verbesserungspotential :)
Zu Deinen Fragen:
- auskommentierter Code: habe ich meistens gemacht, wenn ich nicht weiß, ob ich ihn nicht wieder brauche. Im Versionskontrollsystem muss man ja auch erst mal wissen, in welchem Zeitfenster man nach nützlichen Schnipseln suchen muss. Die meisten Editoren heute haben ja Code folding - klapp die Kommentare einfach zu, wenn sie im Weg sind ...
- Profiling tools habe ich nie ernsthaft eingesetzt, ich kann da keine Empfehlungen geben.
- Low Hanging Fruits sind in der KI am schwierigsten zu finden. Alle Früchte, an die ich rankam, habe ich schon selbst aufgegessen :)
- SSE nein - und ich verspreche mir auch nicht viel davon. Ich würde eher auf klassisches multithreading setzen, z.B. mit der Intel threading building blocks. Die KI verbrät den Großteil der Zeit mit dem Bewerten der Situation und unterschiedlicher Spielzüge. Da kann man relativ gut parallelisieren, ohne sich um Synchronisation Gedanken zu machen, weil alles nur Lesezugriffe sind (wobei an einigen Stellen tief innen drin doch mal das Spielfeld temporär verändert wird, da muss man aufpassen).
- wichtig für alle KI Änderungen: die automatisieren Tests ablaufen lassen und am besten weiter ergänzen. Denn KI fehler merkt man beim testen sehr schlecht, die wird dann einfach nur schlechter.
Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Re: Einstieg in die Entwicklung

Beitrag von Ed von Schleck »

Vielen Dank für die schnelle und freundliche Antwort. Ich denke, ich fange einfach mal an, die Binary zu profilen, während die KI läuft und dann zu schauen, wo die Zeit eigentlich bleibt. Vermutlich werde ich dann schon bald neue Fragen haben. Erwartet erst mal nicht so schnell was von mir :)
Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Re: Einstieg in die Entwicklung

Beitrag von Ed von Schleck »

OK, das ging jetzt schneller als gedacht: Ich hab mit perf den Code analysiert, das nächstliegende Problem attackiert (eine O(N)-Suche durch eine O(logN) ersetzt) und siehe da: Die AI ist jetzt ca. 30% schneller. Was mache ich jetzt? Ein Ticket im Bugtracker aufmachen und den Patch dranhängen? Oder lieber ein Pull-Request machen (gibt es vielleicht einen Mirror auf BitBucket oder so, das wäre praktisch)? Oder einfach den Patch hier posten?

Im Übrigen kann ich perf nur weiterempfehlen. Ich hab es zum ersten Mal benutzt - super einfach und übersichtliches Tool (einfach ASC mit "-g" in den CFLAGS kompilieren, dann mit

Code: Alles auswählen

perf record asc
Samples generieren und mit

Code: Alles auswählen

perf report
analysieren).
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Einstieg in die Entwicklung

Beitrag von Hanni »

Variante A:
Patch per Mail an TheCoder

Variante B:
Neuer Beitrag im Bugtracker und Patch anhängen

Grüße
Hanni
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Re: Einstieg in die Entwicklung

Beitrag von Ed von Schleck »

Danke schön! Hab jetzt einen Bug aufgemacht (http://terdon.asc-hq.org/bugzilla3/show_bug.cgi?id=461). Mal schauen, ob ich in den nächsten Tagen wieder Zeit für sowas finde.
Antworten