Topic: [Patch] KI-Verbesserung

carli

Topic Opener
Joined: 2010-12-31, 16:53 UTC+1.0
Posts: 39
Ranking
Pry about Widelands
Posted at: 2010-12-31, 18:00 UTC+1.0

Hi,

ich hab ein bisschen an der KI rumgeschraubt, weil sie mir zu leicht gewesen ist. Folgende Verbesserungen sind drin:

  • die KIs holen sich mehr Land, das sie erobern
  • die defensive KI greift auch an, jedoch nur, wenn sie Bauplatz benötigt
  • stärkere Holzproduktion
  • keine zusätzliche Produktion mehr, wenn das Lager sowieso schon voll ist
  • verstärkte Waffenproduktion
  • Ausbauen nur, wenn der Arbeiter fähig dazu ist
  • Ebenfalls Waren verarbeiten, von denen wir zu viel haben
  • Wesentlich mehr Bergbau (alle Rohstoffe müssen ausgebeutet werden)

ToDo: - nur neue Militärgebäude bauen, wenn die Soldaten nicht knapp sind - bewusst Militärprodukte bauen (zur Zeit baut er sie nur, weil er alles bauen will)

Hier der Patch: http://pastebin.com/4yB6yde8

Vielleicht nimmt ihn jemand in das Repository auf, ich wäre demjenigen sehr dankbar face-wink.png

Anmerkung: Die KI ist jetzt wesentlich aufregender, jedoch noch nicht wirklich eine Herausforderung. Das wird sich allerdings noch ändern, wenn ich erstmal die militärischen Taktiken überarbeitet hab und die Wirtschaft nicht so viele unnötige Gebäude baut.

Edited: 2010-12-31, 18:05 UTC+1.0

Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17 UTC+1.0
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-01, 13:37 UTC+1.0

Moin carli,

erstmal frohes neues Jahr :)!

Dein Patch schaut auf den ersten Blick interessant aus. Ich bin mal gespannt, wie sich das alles ausmacht, wenn ichs im Spiel teste.

Die Veränderungen am Mining Code sehe ich allerdings sehr kritisch - "onlymissing" bedeutet, dass zur Zeit zu viele Baustellen vorhanden sind und der Computer Spieler warten soll, bis ein paar der Gebäude fertig sind - nur Gebäude die kritisch wichtige Baumaterialien herstellen sollen dann noch in Auftrag gegeben werden (und auch nur, wenn die nicht bereits vorhanden sind) - wenn man jetzt noch andere teuere Gebäude in Auftrag gibt kann es sehr gut vorkommen, dass der Computerspieler keine Rohstoffe mehr für andere wichtige Gebäude übrig hat.

Was das angeht ist leider der ganze "was wird gebaut" Code ziemlicher Murks - eigentlich sollte der Computer Spieler schauen, was er benötigt und zugleich schauen, ob er die Waren, die für die Produktion eines benötigten Gebäudes gebraucht werden besitzt bzw. produzieren kann (wobei er andere Baustellen mit einbeziehen sollte). Und auch generell ist die Berechnung eher ein "let's try if it works with some magic numbers" face-wink.png

Von daher: wenn du dich da ranwagen würdest, würdest du den Computer Spieler schon enorm verbessern und etlichen Leuten einen Gefallen tun.

Aaaalso... ich schau mir das nachher mal genauer an. Nun erstmal wach werden face-wink.png

LG

Nasenbaer


Top Quote
carli

Topic Opener
Joined: 2010-12-31, 16:53 UTC+1.0
Posts: 39
Ranking
Pry about Widelands
Posted at: 2011-01-01, 14:02 UTC+1.0

Die Veränderungen am Mining Code sehe ich allerdings sehr kritisch - "onlymissing" bedeutet, dass zur Zeit zu viele Baustellen vorhanden sind und der Computer Spieler warten soll, bis ein paar der Gebäude fertig sind - nur Gebäude die kritisch wichtige Baumaterialien herstellen sollen dann noch in Auftrag gegeben werden (und auch nur, wenn die nicht bereits vorhanden sind) - wenn man jetzt noch andere teuere Gebäude in Auftrag gibt kann es sehr gut vorkommen, dass der Computerspieler keine Rohstoffe mehr für andere wichtige Gebäude übrig hat.

Ich glaube, die only-missing-Klausel kann aus dem Patch raus. Gut, dass ich mal erfahre, was onlymissing macht face-wink.png face-grin.png

Was das angeht ist leider der ganze "was wird gebaut" Code ziemlicher Murks - eigentlich sollte der Computer Spieler schauen, was er benötigt und zugleich schauen, ob er die Waren, die für die Produktion eines benötigten Gebäudes gebraucht werden besitzt bzw. produzieren kann (wobei er andere Baustellen mit einbeziehen sollte). Und auch generell ist die Berechnung eher ein "let's try if it works with some magic numbers"

Jep, ich hab schon überlegt, dass man im Prinzip ein schönes Wirtschaftskonzept ausrechnen lässt, wieviel Gebäude welche Waren produzieren, jeweils mit dem Ziel, am Ende möglichst viele Soldaten zu kreieren. Sobald die KI das Konzept erfüllt hat, kann sie ihr Konzept erweitern. Ich bin nun in C++ nicht so versiert (andere Sprachen sind schöner ;)), aber ich werd's schon hinbekommen face-wink.png

Von daher: wenn du dich da ranwagen würdest, würdest du den Computer Spieler schon enorm verbessern und etlichen Leuten einen Gefallen tun.

Jep, ich glaube nämlich kaum, dass alle so viel Zeit für ein komplettes Online-Spiel haben.


Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17 UTC+1.0
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-03, 21:31 UTC+1.0

Sooo.... face-smile.png

Sorry, dass es so lange gedauert hat, aber immerhin kann ich jetzt vermelden, dass ich deinen Patch mit kleinen Veränderungen ins bzr übernommen habe. face-smile.png

Nun warte ich nur noch auf weitere Änderungen von dir face-wink.png

Kannst du die Fixes dann direkt als bzr branch hochladen, das macht das ganze zum testen und auch später zum mergen einfacher :).

LG

Nasenbaer


Top Quote
carli

Topic Opener
Joined: 2010-12-31, 16:53 UTC+1.0
Posts: 39
Ranking
Pry about Widelands
Posted at: 2011-01-03, 21:51 UTC+1.0

Mal ne andre Frage:

Wieso sind diese Zeilen in der CMakeList?

if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR "Build-directory and source-directory are the same!") endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)

Die verhindern mir die Arbeit mit einem ungepatchten Tip.


Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17 UTC+1.0
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-03, 22:01 UTC+1.0

carli wrote: Mal ne andre Frage: Wieso sind diese Zeilen in der CMakeList?

if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR "Build-directory and source-directory are the same!") endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)

Die verhindern mir die Arbeit mit einem ungepatchten Tip.

cmake verändert und erstellt einige Dateien. Würdest du jetzt einen bzr commit machen (bzw.einen Patch erstellen), würde er diese Änderungen mit einchecken. Daher ist das bauen im Quellcode-Ordner per default verboten.

Aber andersrum gefragt, warum willst du denn im checkout direkt kompilieren? Der einfachste weg geht über ./compile.sh und später über ./update.sh bzw. mit ähnlichem Setup von cmake, also z.B. compile in ./build oder ähnliches.


Top Quote
carli

Topic Opener
Joined: 2010-12-31, 16:53 UTC+1.0
Posts: 39
Ranking
Pry about Widelands
Posted at: 2011-01-05, 19:04 UTC+1.0

Gleich noch ein Fragenkatalog, doch zuerst mal mein Ansatz zur Lösung der KI-Frage:

=== modified file 'src/ai/ai_help_structs.h'
--- src/ai/ai_help_structs.h	2010-11-01 22:23:29 +0000
+++ src/ai/ai_help_structs.h	2011-01-05 17:47:21 +0000
@@ -244,6 +244,8 @@
 
 	int32_t                           cnt_built;
 	int32_t                           cnt_under_construction;
+	
+	int32_t                           cnt_planned;
 
 	int32_t total_count() const {return cnt_built + cnt_under_construction;}
 	bool buildable(Widelands::Player & player) {
@@ -268,6 +270,9 @@
 	uint8_t producers;
 	uint8_t consumers;
 	uint8_t preciousness;
+	
+	uint32_t production_actual;
+	uint32_t production_target;
 };
 
 #endif

=== modified file 'src/ai/defaultai.cc'
--- src/ai/defaultai.cc	2011-01-04 15:22:35 +0000
+++ src/ai/defaultai.cc	2011-01-05 17:54:58 +0000
@@ -232,6 +232,9 @@
 		wares.at(i).producers    = 0;
 		wares.at(i).consumers    = 0;
 		wares.at(i).preciousness = tribe->get_ware_descr(i)->preciousness();
+		
+		wares.at(i).production_actual = 0; // ToDo: update this
+		wares.at(i).production_target = 0; // ToDo: enter build materials stuff here
 	}
 
 	// collect information about the different buildings our tribe can construct
@@ -251,6 +254,7 @@
 		bo.type                   = BuildingObserver::BORING;
 		bo.cnt_built              = 0;
 		bo.cnt_under_construction = 0;
+		bo.cnt_planned            = 0; // ToDo: calc this need from wares.production_target
 		bo.production_hint        = -1;
 		bo.current_stats          = 100;
 		bo.unoccupied             = false;


Jetzt die Fragen:
- Was sagt genau preciousness für eine Ware aus?
- Haben die Producer eine gewisse Zeit, die sie für die Bearbeitung einer Ware benötigen?
- Wenn ja, wie bekomme ich die heraus? (bzw. das Verhältnis der Gebäude)

Weitere Gedanken, was ich gedenke, zu tun:
- zuerst mal wird wares.at(i).production_target mit dem Baustoffbedarf jeder möglichen Baustelle gefüllt, damit erst mal der Baustoffbedarf erfüllt wird
- Ist eine Wirtschaft aufgebaut, die genau diesen Soll erfüllt, startet die zweite Phase der Taktik
- Es wird geschaut, woraus man Soldaten macht, von dem wird der wares.at(i).production_target erhöht
- Ist der Soll erfüllt, geht die dritte Phase los:
- Die bo.cnt_planned von den Ausbildungsstätten wird erhöht
- Sollte der Soll erfüllt sein, so wird die Waffenindustrie wieder hochgeschraubt, falls genug Rohstoffe da sind
- Sollten nicht genug Rohstoffe da sein, so wird die KI mehr Berge zu vereinnahmen zu versuchen.
Top Quote
Chinchey

Joined: 2011-01-06, 10:53 UTC+1.0
Posts: 1
Ranking
Just found this site
Posted at: 2011-01-06, 11:20 UTC+1.0

Ich fände es gut wenn die KI an Bergen versucht größere miltärische Gebäude zu bauen um alle Resourcen in einem Berg abzubauen.


Top Quote
Venatrix
Avatar
Joined: 2010-10-05, 20:31 UTC+2.0
Posts: 447
Ranking
Tribe Member
Location: Germany
Posted at: 2011-01-06, 13:59 UTC+1.0

Ist dieser Punkt nicht mit

Sollten nicht genug Rohstoffe da sein, so wird die KI mehr Berge zu vereinnahmen zu versuchen.

abgedeckt?


Two is the oddest prime.

Top Quote
Nasenbaer
Avatar
Joined: 2009-02-21, 18:17 UTC+1.0
Posts: 826
Ranking
One Elder of Players
Location: Germany
Posted at: 2011-01-06, 16:31 UTC+1.0
- Was sagt genau preciousness für eine Ware aus?


Das sind über die Zeit (quasi per try and error ;) ) ermittelte Werte die dem computer Spieler sagen sollen, wie sehr er sich um die Herstellung einer Ware kümmern soll - hat also mit dem tatsächlichen Wert wenig zu tun - Beispielsweise ist der Wert für "trunk" extrem hoch, weil er Holz für so ziemlich alles benötigt.

- Haben die Producer eine gewisse Zeit, die sie für die Bearbeitung einer Ware benötigen?

- Wenn ja, wie bekomme ich die heraus? (bzw. das Verhältnis der Gebäude)


Ja haben sie - allerdings ist die zum Teil variable - Kann zum Beispiel sein, dass der Schmied eine Axt erstellen will, beim Check dafür aber kein Eisen hatte, dann kurz darauf das Eisen kommt und er nun erstmal die anderen Waffen überprüft, ob diese Produziert werden sollen - alternativ könnte es aber auch sein, dass das Eisen kurz vor dem Axtcheck eintrifft. Und sowieso ist es schwer was dazu zu sagen, weil die Transportwege ja auch wieder enorm mit reinspielen.

So oder so, das was du suchst kannst du in den conf Dateien der einzelnen Gebäude finden - einfach mit einem Texteditor öffnen und nach dem "Work" Programm suchen. Und wenn ich das richtig in Erinnerung habe, gibt es auch ein Feature in Widelands, dass eine Dokumentation der einzelnen Stämme als HTML-Bibliothek erstellt (führ mal "widelands --help" aus, da sollte was stehen denk ich - habs gerade selbst nicht vor mir).


Die weiteren Gedanken hören sich auf jeden Fall schon sehr gut an - wäre aber super wenn du zu jedem Zeitpunkt noch eine (der Aggressivität des Computerspielers angepasste) Überprüfung für den Militärgebäudebau mit einbaust, damit er auch immer schön weiter expandiert. :)

Looking forward to see your next Patch (or even better bzr branch :) )

Liebe Grüße

Nasenbaer
Top Quote