Seite 1 von 1

Künstliche Intelligenz

Verfasst: Sonntag 13. Januar 2013, 08:02
von Dexter1997
Hey Leute,
Ich moechte als angehender Spieleprogrammierer lernen wie man eine gute Künstliche Intelligenz programmiert, bzw. wo man das am besten lernen kann, da es eein sehr schweres Thema ist. Kennt ihr gute einsteigerfreundliche Onlinelehrkurse zu dem Thema? Wenn ihr gute Bücher zum Thema kennt sagt sie mir ebenfalls!
LG Henry

Re: Künstliche Intelligenz

Verfasst: Sonntag 13. Januar 2013, 10:01
von webspider
Ich habe vor Ewigkeiten Artificial Intelligence: A Modern Approach gelesen, aber da ich zu dem Zeitpunkt OOP überhaupt nicht beherrschte, hat mir die Lektüre kaum etwas gebracht. Allgemeine Umsetzungen der im Buch vorgestellten Algorithmen gibt es hier.

Re: Künstliche Intelligenz

Verfasst: Sonntag 13. Januar 2013, 10:41
von pillmuncher
Über die Feiertage habe ich eine kleine Bibliothek zur Logik-Programmierung in Python geschrieben. Es ist erst die erste Version und ist alles noch ziemlich durcheinander, weil ich es gewissermaßen "explorativ" programmiert habe, da mir von Anfang an noch nicht klar war, wie alles ausehen sollte. Es ist also im jetzigen Zustand keine unmittelbar verwendbare Bibliothek, sondern nur eine Art ausführbarer Snapshot meiner Gedanken zum Thema. Der Teil mit den Expression Trees (expressions.py) sollte eigentlich unabhängig sein von der Prolog-Engine (resolver.py), und umgekehrt. Leider gibt es zwischen beiden Teilen noch gegenseitige Abhängigkeiten, weswegen ich gerade expressions.py komplett neu schreibe.

Die Prolog-Engine ist semi-naiv programmiert, aber für kleinere Probleme, sofern Performance nicht das wesentliche Ziel ist, sollte sie einsetzbar sein, oder zumindest sollte daraus ersichtlich werden, wie man so etwas in Python implementieren könnte. Immerhin versteht die Engine Fakten, Regeln, Listen (insb. Differenzlisten) und den Cut fürs Branch Pruning. Vielleicht hilft dir das ja.

Ich beantworte gerne auch Fragen dazu, allerdings bin ich erst morgen wieder am Rechner.

Gruß,
Mick.

Re: Künstliche Intelligenz

Verfasst: Montag 14. Januar 2013, 12:07
von Leonidas
Außerdem gibt es die Vorlesung von Thrun und Norvig auf Udacity als CS271.

Re: Künstliche Intelligenz

Verfasst: Montag 14. Januar 2013, 15:19
von cofi
Da jetzt jeder Materialien zu "klassischer" AI auspackt: AI in Spielen hat damit meist wenig zu tun, da dafuer zu wenig Leistung frei bleibt.

Re: Künstliche Intelligenz

Verfasst: Montag 14. Januar 2013, 15:54
von snafu
Ich denke, du wirst da letztlich etwas spezifischer werden müssen. Geht es dir z.B. darum, wie sich Computergegner auf einem Spielfeld bewegen sollen, dann könntest du z.B. nach "echtzeit wegfindung" suchen. Dort bin ich z.B. auf eine zumindest beim Überfliegen recht vielversprechend erscheinende Praktikumsarbeit von Studenten gestoßen, die noch halbwegs anfängerfreundlich in die besagte Thematik einführt. Ein paar Grundkenntnisse in der Graphentheorie sollten aber zwecks besserem Verständnis schon vorhanden sein.

Ansonsten sag halt mal, wofür du dich speziell interessierst...

Re: Künstliche Intelligenz

Verfasst: Montag 14. Januar 2013, 16:09
von Dexter1997
Ich moechte künstliche intelligenz in richtung aufbauspiel entwickeln.
Ein gegner baut gebäude und verbessert sie, rekrutiert truppen und greift einen gelegentlich an.
eine billige ki die genau das macht kann ich bereits programmieren, allerdings ist diese sehr schlecht und leicht zu besiegen.

Re: Künstliche Intelligenz

Verfasst: Montag 14. Januar 2013, 17:56
von Sr4l
Auch große Studios haben Probleme mit schweren KI's. Bei Spielen wo die Reflexe entscheiden, wie bei Shootern, ist das kein Problem, aber bei Aufbauspielen.

Die "Irrsinnig" KI bei Warcraft III unterscheidet sich "Normal" KI das sie "cheatet". Sie bekommt 2x so viele Rohstoffe wie ein Spieler pro Aktion. Nutzt diese auch und ist dann schwerer.

Auch unter Starcraft II scheint die Truppenstärke mehr oder weniger linear mit der Rohstoffsammelrate zusammen zuhängen. Und insgesamt von der KI stärke.

Was alle Spiele gemeinsam haben ist glaube ich:
Werde ich angegriffen, verteidige ich das mit allem was ich habe.
Greife ich an ziehe ich mich zurück, wenn ich unterlegen bin.

Versuches doch mal mit zwei, drei oder vier festen Bauplänen die eine KI einschlägt und regulier über ihr Rohstoffeinkommen wie schnell sie diese abarbeitet.

Re: Künstliche Intelligenz

Verfasst: Mittwoch 16. Januar 2013, 16:27
von Dexter1997
Ich bin jetzt dabei einen KI-Gegner für ein Spiel zu programmieren, das ich auch selbst gemacht habe(naja, es ist kein richtiges Spiel)

Das Spiel ist rundenbasiert. Man muss seine Waffen und Rohstoffproduktion verbessern und Schwertkaempfer und Berserker ausbilden. Das Kampfsystem wird es dann programmiert, wenn ich entschieden habe, ob es wie eine Art Tower Defense Spiel werden wird, oder ob der KI-Gegner sein eigenes "Dorf" haben darf. (ähnlich wie in Stronghold, AoE oder Warcraft)
Dann stellt sich noch die Frage ob ich eine neue Klasse extra für die KI erstelle, oder ob ich einfach alles in die Spielschleife reinprogrammiere und eine Instanz der Klasse Spielmechanik erstelle.Ich denke ihr könnt euch nun besser vorstellen welche Art von künstlicher Intelligenz ich erlernen moechte, und falls ihr Vorschläge habt wie man diese KI am besten erstellt und in das Spiel einbaut, lasst es mich wissen!

Code: Alles auswählen

# -*- coding: cp1252 -*-
import random, time

class Spielmechanik:
    
    def __init__(self):
        self.Aktionspunkte = 3
        self.Rohstoffe = 3
        self.Waffen = 10
        self.Rohstoffproduktion = 1
        self.Waffenproduktion = 1
        self.Turm = 100
        self.Schwertkrieger = 0
        self.Berserker = 0
        # Anforderungen_ Ausbau - Ausbildung
        self.Ausbau_Rohstoff = 2
        self.Ausbau_Waffen = 2
        self.Ausbau_Kaserne = 2
        
    def __str__(self):
        nachricht = "Rohstoffproduktion: " + str(self.Rohstoffproduktion) + " Waffenprod.: " +\
                    str(self.Waffenproduktion) + " Rohstoffe: " + str(self.Rohstoffe) + " Waffen: " +\
                    str(self.Waffen) + " Turm HP: " + str(self.Turm) + "\nSchwertkrieger: " +\
                    str(self.Schwertkrieger) + " Berserker: " + str(self.Berserker)
        return nachricht

    def naechste_Runde(self):
        if self.Aktionspunkte == 0:
            self.Rohstoffe += self.Rohstoffproduktion
            self.Waffen += self.Waffenproduktion
            self.Aktionspunkte += 5
            print "Eine neue Runde beginnt!"
            time.sleep(1)
            print

    def Runde_beenden(self):
        self.Aktionspunkte = 0

    def Rohstoffproduktion_ausbauen(self):
        if self.Ausbau_Rohstoff <= self.Rohstoffe:
            self.Rohstoffe -= self.Ausbau_Rohstoff
            self.Rohstoffproduktion *= 1.5
            self.Ausbau_Rohstoff *= 1.5
            self.Aktionspunkte -= 1
            print "Rohstoffproduktion erfolgreich erhoeht!"
        else: print "Du hast nicht genug Rohstoffe um das Gebaeude auszubauen!"
        time.sleep(2)
            
    def Waffenproduktion_ausbauen(self):
        if self.Ausbau_Waffen <= self.Rohstoffe:
            self.Waffenproduktion *= 2
            self.Rohstoffe -= self.Ausbau_Waffen
            self.Ausbau_Waffen *= 1.5
            self.Aktionspunkte -= 1
            print "Waffenproduktion erfolgreich erhoeht!"
        else: print "Du hast nicht genug Rohstoffe um die Produktion zu verbessern!"
        time.sleep(2)

    def Truppen_ausbilden(self):
        print "[1] Schwertkrieger [2] Berker ausbilden (1 Waffe pro)"
        eingabe = int(raw_input("Was willst du ausbilden?"))
        if eingabe == 1:
            eingabe = int(raw_input("Wie viele Schwertkrieger moechtest du ausbliden?"))
            if eingabe <= self.Waffen:
                self.Waffen -= eingabe
                self.Schwertkrieger += eingabe
                self.Aktionspunkte -= 1
                print "Du hast " + str(eingabe) + " Schwertkaempfer ausgebildet!"
            else: print "Du hast nicht genug Waffen!"
        if eingabe == 2:
            eingabe = int(raw_input("Wie viele Berserker moechtest du ausbilden?"))
            if eingabe <= self.Waffen:
                self.Waffen -= eingabe
                self.Berserker += eingabe
                self.Aktionspunkte -= 1
                print "Du hast " + str(eingabe) + " Berserker ausgebildet!"
            else: "Du hast nicht genug Waffen!"
        time.sleep(2)

Spieler = Spielmechanik()

while True:
    print Spieler
    print "[1] Rohstoff-/Waffenproduktion erhoehen [2] Soldaten ausbilden"
    time.sleep(1)
    Eingabe = int(raw_input("Was willst du tun? ([3] Runde beenden)"))
    if Eingabe == 1:
        print "[1] Rohstoffproduktion erhoehen [2] Waffenproduktion erhoehen"
        Eingabe = int(raw_input("Was willst du tun?"))
        if Eingabe == 1:
            Spieler.Rohstoffproduktion_ausbauen()
        elif eingabe == 2:
            Spieler.Waffenproduktion_ausbauen()
    elif Eingabe == 2:
        Spieler.Truppen_ausbilden()
    elif Eingabe == 3:
        Spieler.Runde_beenden()
    Spieler.naechste_Runde()
input()