Sehr, sehr, sehr viele autonome KIs, wie?
-
Hallo zusammen,
Kennt jemand Möglichkeiten, Bücher oder Tutorials, welche den Einsatz von tausenden von KIs als Thema haben, wobei jede KI autonom "denken" können muss in einer Wirtschafts- und Kriegssimulation?
Mir kommt bei so einem Problem nicht mal ein sinnvoller Ansatz in den Sinn, höchstens vielleicht mit irgendwelchen regelmässigen Ladescreens, wo die nicht sichtbaren KIs nachberechnet werden. Aber so könnten die Ladescreens mit der Zeit wohl recht lange dauern. Es wäre allerdings praktisch, wenn es keine Ladescreens gäbe.Sowieso ein paar weiterführende Gedanken zu Spiele-KIs wären interessant. Also wenn es ein entsprechendes Buch gibt, immer her mit dem Vorschlag.
Grüssli
-
Wir reden hier von Spiele-KI und nicht von richtiger KI, oder nicht? Bei Spiele-KIs musst du nur die Illusion von Intelligenz wahren.
Werd mal ein bischen konkreter, sollen diese tausende KIs alle KI Spieler sein, oder Einheiten die sich in der Welt bewegen, etc.? Im moment hört es sich für mich nach an einem falschen Ansatz (für ein Spiel) an.
-
S.T.A.L.K.E.R. schrieb:
Wir reden hier von Spiele-KI und nicht von richtiger KI, oder nicht? Bei Spiele-KIs musst du nur die Illusion von Intelligenz wahren.
Spiele KI, also die muss nur Intelligent wirken. Aber bitte gut wirken, ich hasse die teilweise extrem dumme KI aus gewissen Spielen. Was also bedeutet, dass es schon eine bisschen komplexere KI werden soll.
S.T.A.L.K.E.R. schrieb:
Werd mal ein bischen konkreter, sollen diese tausende KIs alle KI Spieler sein, oder Einheiten die sich in der Welt bewegen, etc.?
Alles KI Spieler, welche über KI Einheiten verfügen, allerdings kann man wohl die KI Einheiten gleich dem KI Spieler zur Kontrolle übergeben. Wobei der normale Spieler natürlich auch KI Einheiten haben soll, aber die machen mir weniger Sorgen.
Also es geht wirklich um Computerspieler, welche ihre Wirtschaft aufbauen müssen und sich für den Krieg vorbereiten sollen oder weil sie vielleicht so friedlich sind auch nicht oder nur defensiv, wie auch immer. Es sollen halt vollwertige KI-Spieler sein.Grüssli
-
Was du vor hast klingt weniger so als ob du wirkliche KI Figuren brauchst. Die KI Soldaten (Fahrzeuge usw, also Units) müssen ansich nicht inteligent sein, sie wiegen ja nur ihre Umgebung ab und entscheiden sich zB auf wen sie schießen. Das einzige das wirklich inteligent sein muß wäre der KI Spieler, er gibt den Einheiten Befehle wo sie hin sollen. Da was Inteligentes zus chreiben ist aber auch nicht so einfach, da kranken viele Spiele dran, er verfügt ansich aber auch nur über Scripts mit ablaufplänen und Abwägungen was sinnvoller wäre, je Komplexer und Detailreicher umso ebsser dürfte er vorrankommen. Das wäre zumindest mein Gedankenansatz.
-
Ich brauche nicht tausende KI Einheiten, sondern tausende KI Spieler. Wie oft soll ich es denn noch hinschreiben? Das Steuern von Einheiten sehe ich nicht als Problem, aber diese Unmengen von vom Computer gesteuerten Spieler.
Ich schreib es zur Sicherheit nochmals fett hin:
Tausende KI-Spieler
Vor allem muss dabei auch der ganze Status mitgespeichert werden. Das sind Unmengen an Daten, welche immer wieder berücksichtig werden müssen.Das ganze kommt nämlich von einem meiner ersten Spiele, damals noch mit VBA und Excel. Dort hatte ich sowas bereits implementiert. Um überhaupt irgendwie mit dieser Unmenge an KI-Spieler klar zu kommen, hatte ich die KI-Spieler immer erst ausgerechnet, wenn der normale Spieler zum ersten Mal mit ihr in Kontakt kam. Das ging gut für die ersten paar KIs, mit der Zeit musste der Computer aber so verdammt viel nachrechnen, dass das Spiel nur noch geladen hat, wenn man eine neue KI entdeckt hat.
Des Weiteren konnte eine entdeckte KI und eine nicht entdeckte KI nicht miteinander interagieren. Das war sehr blöd.Ich würde dieses Spiel halt gerne mal in C++ fertig machen. Dazu muss ich aber ein sinnvolles System finden, wie ich mit diesen Unmengen an KI-Spielern fertig werde. Es ist in meinen Augen ein wahnsinniges zeitliches Problem.
Grüssli
-
sowas in der art haben wir da schon mal besprochen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-234166.htmlansonsten ist deine frage zu ungenau, die richtige antwort waere
for(size_t i=0;i<KI_ZAHL;i++) KI[i].Think();
-
rapso schrieb:
sowas in der art haben wir da schon mal besprochen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-234166.htmlDanke für den Thread. Der hat mir nun ein paar Ideen gegeben, welche ich erstmal weiterverfolgen kann.
rapso schrieb:
ansonsten ist deine frage zu ungenau, die richtige antwort waere
for(size_t i=0;i<KI_ZAHL;i++) KI[i].Think();
löl
Mein Problem wäre ja eigentlich, dass diesesThink()
zu viel Zeit verbratet
Aber dank des von dir gelinkten Thread, habe ich nun ein paar gute Ideen aufgeschnappt, welche ich mal weiterverfolgen werde. Ein LOD für eine KI finde ich sehr interessant, aber grundsätzlich kam mir beim Lesen auch ein Eventsystem für die KI in den Sinn. Wenn die KI keine sinnvolle Anzahl Resourcen hat und der direkte Gegner keine Bewegungen vollführt, welche zu einem Handeln auffordern sollte, kann die KI auch bis zum nächsten Logiktick schlafen. Und wenn gewisse Events eintreten, kann man nur anhand der Events die aktuelle Aufgabe der KI einschränken. Wird ganz interessant werden, dies durchzudenkenGrüssli
-
Sorry für den Doppelpost, aber es ist nun schon ein Weilchen her seit dem letzten Post.
Ich war in der Zwischenzeit angenehm warm duschen. Wieso das von Belang ist? Die Dusche ist immer eine Ideenmaschine bei mirOn-Topic:
Ich habe am Eventsystem ein wenig weiterüberlegt und wollte diese Überlegung zur Kommentierung noch hinzufügen oder allenfalls für andere, welche diesen Thread finden.
Grundsätzlich könnte ich im Programm einen zweiten Thread erstellen, welcher einen KI-Tick hat mit einer Auflösung von einer Sekunden (ca. Reaktionszeit eines Menschen). In diesem KI Thread, werden die Verhalten der KIs ausgerechnet und jede KI versendet Events an die Logik. Die Logik selber behandelt die Events, wie Events von einem Spieler. Die Logik verändert die Daten und wenn gewisse Daten gewisse Bedingungen erfüllen, wird ein entsprechendes Signal gesetzt. Da die KI nur Daten liest, dürfte es von der Synchronisation auch nicht all zu viele Probleme geben.
So könnte ich gleichzeitig auch Gebrauch von Multicores machen.Anmerkung: Das ist nur eine Skizze.
@rapso,
Nochmals danke. Der Link hat mein Hirn in Schwung gebrachtGrüssli
-
Dravere schrieb:
Sorry für den Doppelpost, aber es ist nun schon ein Weilchen her seit dem letzten Post.
Ich war in der Zwischenzeit angenehm warm duschen. Wieso das von Belang ist? Die Dusche ist immer eine Ideenmaschine bei mirOn-Topic:
Ich habe am Eventsystem ein wenig weiterüberlegt und wollte diese Überlegung zur Kommentierung noch hinzufügen oder allenfalls für andere, welche diesen Thread finden.
Grundsätzlich könnte ich im Programm einen zweiten Thread erstellen, welcher einen KI-Tick hat mit einer Auflösung von einer Sekunden (ca. Reaktionszeit eines Menschen). In diesem KI Thread, werden die Verhalten der KIs ausgerechnet und jede KI versendet Events an die Logik. Die Logik selber behandelt die Events, wie Events von einem Spieler. Die Logik verändert die Daten und wenn gewisse Daten gewisse Bedingungen erfüllen, wird ein entsprechendes Signal gesetzt. Da die KI nur Daten liest, dürfte es von der Synchronisation auch nicht all zu viele Probleme geben.
So könnte ich gleichzeitig auch Gebrauch von Multicores machen.Anmerkung: Das ist nur eine Skizze.
@rapso,
Nochmals danke. Der Link hat mein Hirn in Schwung gebrachtGrüssli
Definitiv sinnvoll, ein Event-System zur Zusammenschaltung der Subsysteme solltest du sowieso haben und die Logik und die Spieler voneinander trennen, so muss die Logik reale Spieler und KIs nicht getrennt behandeln.
-
Dravere schrieb:
Mein Problem wäre ja eigentlich, dass dieses
Think()
zu viel Zeit verbratetalso ist dein hauptbegehren: optimierung
und das wichtigste bei einer optimierung ist die situation zu kennen. "Kriegsspiel" ist nicht wirklich aussagefaehig, ein RTS oder ein WW2-shooter haben ganz andere KI verlangen und erlauben unterschiedliche optimierungen.Aber dank des von dir gelinkten Thread, habe ich nun ein paar gute Ideen aufgeschnappt, welche ich mal weiterverfolgen werde. Ein LOD für eine KI finde ich sehr interessant, aber grundsätzlich kam mir beim Lesen auch ein Eventsystem für die KI in den Sinn. Wenn die KI keine sinnvolle Anzahl Resourcen hat und der direkte Gegner keine Bewegungen vollführt, welche zu einem Handeln auffordern sollte, kann die KI auch bis zum nächsten Logiktick schlafen. Und wenn gewisse Events eintreten, kann man nur anhand der Events die aktuelle Aufgabe der KI einschränken. Wird ganz interessant werden, dies durchzudenken
sowas macht man oft mit einer statemachine bzw fuzzy logic um die komplikationen von eventsystems aus dem wege zu gehen
-
rapso schrieb:
also ist dein hauptbegehren: optimierung
und das wichtigste bei einer optimierung ist die situation zu kennen. "Kriegsspiel" ist nicht wirklich aussagefaehig, ein RTS oder ein WW2-shooter haben ganz andere KI verlangen und erlauben unterschiedliche optimierungen.Ich habe es auch nicht als "Kriegsspiel" beschrieben, sondern als Wirtschafts- und Kriegssimulation, was wohl sehr auf ein RTS schliessen lässt, nicht? Ein WW2-Shooter würde ich jedenfalls anders beschreiben
Und das RTS wird recht komplex:
- Wirtschaft
-- Bauen
-- Systemwahl (Freie-, Planwirtschaft oder dazwischen)
-- Handel, wie auch Zölle- Forschung
-- Entwicklung eigener Technologien auf Basis einer zahlreichen Kombinationsmöglichkeit.- Politik
-- Allianzen
-- Anträge
-- Systemwahl im eigenen Gebiet
-- Betrug / Intrigen
-- Spionage- Krieg
-- Weltraum
--- Normaler Schiffskampf
--- Stationen
--- Entern
-- Planetenoberfläche
--- Land
--- Luft
--- SeeDas ist schliesslich ein 20 Jahre Projekt
Ne, im ernst, ich möchte jetzt niemand hören, dass ich damit nie fertig werde, ich weiss das. Es ist wirklich ein sehr langfristig ausgelegtes Projekt und wird auch Etappenweise realisiert werden. Womöglich wird es nie fertig werden, aber das ist für mich bei diesem Projekt unwichtig.rapso schrieb:
sowas macht man oft mit einer statemachine bzw fuzzy logic um die komplikationen von eventsystems aus dem wege zu gehen
Naja, grundsätzlich wäre es dort mehr im Sinne gewesen, das ein Signal gesetzt wird. Also könnte man es durchaus als Statemachine betrachten. Ich find die Begriffe sowieso immer alle verwirrend
Grüssli
-
Also die idee hört sich ja wirklich nett an, aber du willst dort wirklich soviele KI Spieler einbauen? Ich mein die meisten Spiele die in dieses Schema passen haben ja meist nur eine recht überschaubare Anzahl von KIs.
-
Xebov schrieb:
Also die idee hört sich ja wirklich nett an, aber du willst dort wirklich soviele KI Spieler einbauen? Ich mein die meisten Spiele die in dieses Schema passen haben ja meist nur eine recht überschaubare Anzahl von KIs.
Ja, will ich. Denn ich will etwas machen, was all die Spiele nicht haben, einen riesigen "Spielraum". Um den sinnvoll zu füllen, will ich möglichst viele Spieler haben.
Die grundsätzliche Idee ist, das Erlebnis von Browsergames und MMORPGs auch einem Singleplayer Spiel näher zu bringen. Eines der grössten Problem eines Singleplayer Spiels ist es, dass es einfach schnell mal vorbei ist, weil man die z.B. maximal 16 Gegner einfach einmal erledigt hat. Wenn du 1000 Gegner hast, wird es womöglich nicht mal dein Ziel sein, alle Gegner zu eliminieren
Ich möchte grundsätzlich ein Spiel machen, wo du nicht mehr immer ein neues Spiel eröffnest, sondern nur einmal eines machst, dieses aber extrem lange dauert. Womöglich wird dein Reich dabei mehrmals untergehen und wieder neu auferstehen. Das ist zumindest die IdeeGrüssli
-
Also... Du willst es als Anreiz geben, tausende von Gegnern zu haben, die auch noch auf ein riesiges Areal verteilt sind?
Klingt Anfangs wie ein Traum, Aber man sollte bedenken:
Ein Spielziel sollte erreichbar sein, sonst ist es sinnlos.Ich würde irgendwann die Motivation verlieren, weil die kleinen Erfolge zwar eintreten, wenn man mal eine Zivilisation auslöscht, aber insgesamt einfach dieses "Yeahhhh Ha" fehlt.
Alles in allem klingt es allerdings recht interessant. Als alleinentwickler nicht schaffbar, aber interessant.Wenn du fertig bist, schafft die Hardware sicher schon die think() Methode.
-
sowas wie GTA3 bzw GTA4, oder FarCry 2?
KIs die nur fuer wirtschaftssimulation da sind, die cheaten meistens, z.b. Civilization
-
Klingt schon sehr Interessant, aber gibt das nicht Probleme mit den Sieg und Verlustbedingungen? Also wenn das eigene Reich unetrgehn und auferstehen kann wäre das Spiel ja im Grunde nicht zu verlieren?
-
gelöscht, wäre schade um den code.
-
@makkurona,
Der Anreiz sind nicht die 1000 Gegner. Die 1000 Gegner sind dazu da, die Ziele des Spielers zu verändern. Den Spielspass auf andere Dinge zu konzentrieren. Das Spielziel ist nicht mehr, das Spiel zu beenden, sondern irgendwelche Etappen zu erreichen. Es geht immer um irgendwelche Etappenziele, welche man sich selber setzen kann.
Die Etappenziele werden deswegen bunt gemacht. Man kann alles probieren zu erreichen und wenn man schon alles erreicht hat, gibt es immer noch mehrEs ist ein Endlosspiel, welches wirklich endlos ist und nie irgendwann der Fall Eintritt, wo die Spielzeit zwar weiterläuft, es aber keine Spielziele mehr gibt.
@rapso,
Ich kenne weder GTA3, GTA4 oder FarCry 2 genau, daher kann ich dir die Frage nur schwer beantworten
*Lieber schon einmal einen Helm anzieht, wenn er jetzt denn gleich geschlagen wird, da er diese Spiele nicht kennt*
Von den Spielen, welche ich kenne, würde ich am ehesten noch einen Vergleich mit dem X-Universe von Egosoft ziehen. Oder vielleicht dem MMORPG Eve-Online. Aber der Spieler soll halt nicht eine einzelne Einheit spielen, sondern ein Reich steuern. Und die Spielwelt sollte daher schon grösser als die des X-Universums sein. Eve-Online Grösse ... vielleicht, das Ding ist inzwischen ja schon recht grossUnd ja, die scheiss KI aus Civilization kenne ich nur zu gut. Was die immer alles weiss und kann. Und woher da manchmal das Geld kommt, ganz seltsame Sache
In der Politik ist sie auch nur schwer zu handhaben. Man kann in einem viel zu geringen Mass mit ihr kommunizieren.@Xebov,
Die Wahrscheinlichkeit für Sieg und Niederlage, bzw. Endsieg und Endniederlage, werden extrem minimiert, so dass sie kaum eintreffen können.
Ich denke der Vergleich mit einem MMORPG ist gar nicht so schlecht. Du wirst nie einen Endsieg oder eine Endniederlage in einem MMORPG erleben, zumindest in vielen nicht. Es geht immer um Zwischenziele, Etappenziele.@volkard,
Oder gleich Boost.Function, Boost.Bind oder Boost.Signals nehmenIch hatte übrigens nicht vor, für jede KI einen Thread zu starten, sondern nur für die KI-Ticks. Ich glaube so viele Threads dürften mit der Zeit dann eher hindern als helfen.
Also ein Thread, welcher dafür sorgt, dass im Durchschnitt jede KI einmal pro Sekunde nachdenkt, sofern sie denn überhaupt etwas überlegen muss.Um das Denken im übrigen noch zusätzlich zu beschleunigen, würde ich gerne die Anzahl der Entscheidungen beschränken oder eine Entscheidung mit einem Kostenpunkt versehen, zum Beispiel einer Zeiteinheit. Eine KI soll also nicht alles was gerade ansteht entscheiden, sondern braucht auf eine gewisse Art und Weise auch seine Zeit für die Entscheidungen.
Mit sowas würde ich gerne verhindern, dass eine KI ein unendlich grosses Reich steuern kann. Eine KI soll unter Umständen auch überfordert sein.Grüssli
-
Dravere schrieb:
@volkard,
Oder gleich Boost.Function, Boost.Bind oder Boost.Signals nehmendu hast die idee keineswegs verstanden.
-
@Dravere
dann schau dir master of orion 2 oder 3 an.
Sins of a Solar Empire soll auch so eine art spiel sein.du solltest dir aber die anderen spiele anschauen, bevor du sagst, dass es sowas nicht gibt und es neu erfinden willst