KI(Künstliche Inteligenz)



  • TravisG schrieb:

    wird ma zeit, dass der robsite fuzzi die seite updated ^^

    Da warte ich auch schon drauf 😃

    nep schrieb:

    the-coder schrieb:

    Wenn man mit Rand eine KI erstellen will, dann wird es einem nicht gelingen, da Zufall und Intelligenz nicht wirklich etwas miteinander zu tun haben.

    Naja egal etwas zum Thema KI findest du hier.

    MfG the-coder

    Da hast du prinzipiell schon recht, aber bei vielen Spielen geht es gar nicht darum eine perfekte KI herzustellen, sondern eher darum eine KI zu bauen, so dass das Spielen Spaß macht. Ich würde schon bisschen unterscheiden zwischen "richtiger" KI und ner Spiele-KI

    Jo aber wo braucht man bei Spielen denn Zufall? Ok bei Snake um die Früchte oder was auch immer zu positionieren, aber das soll ja auch keine KI darstellen. Mir fällt im Moment kein Gebiet ein, wo Zufall eine Große rolle spielt. Oder steh ich jetzt auf dem Schlauch?

    MfG the-coder 🕶



  • zufall spielt bei fast allen genetisch motivierten algorithmen ne rolle.

    und für viele spiele ist es vollständig ausreichend eine ki zu implementieren, die vollständig auf zufall basiert. bei solchen spielen wie 4-gewinnt kommt man mit sowas sogar ziemlich weit. und ein prominenteres beispiel: einer der geister bei pacman bewegt sich ausschliesslich per zufall.

    es heisst nicht ohne grund "künstliche intelligenz", da es eben keine intelligenz im herkömmlichen sinne ist.

    könntet ihr mir erklären,aus was sich die KI zusammensetzt und wie man sie schritt für schritt aufbaut

    das ist prinzip bedingt unmöglich, da es kein verfahren für DIE ki gibt.



  • falls du wirklich etwas über KI lernen möchtest verschafft das Buch "Einführung in die künstliche Intelligenz" von Günther Görz einen umfassenden Einblick.
    Ist nicht unbedingt spannend geschrieben aber liefert viele wichtige Grundlagen.
    Ist halt Theorie und musst dir dann selbst überlegen wie du das umsetzt.
    Das letzte Kapitel geht zwar um KI-Progrmmierung es wird aber Lisp und Prolog verwendet (so Logik geschichten die mit Unifikation... und so arbeiten)
    😉
    muli



  • und für viele spiele ist es vollständig ausreichend eine ki zu implementieren, die vollständig auf zufall basiert.

    Wobei das nichts mit Intelligenz zu tun hat. Mag sein, dass der Spieler durch zufällig agierende Gegner auch ausreichend gefordert ist, aber "(künstlich) intelligent" darf man die dann nicht nennen.

    Prizipiell sollte für Gegner in nicht rein auf Logik basierten Spielen ein wissensbasiertes System, bestehend aus Wissensbasis und Inferenzsystem, die klügste Wahl sein.
    Das heißt, deine KI (der Gegner) hat bestimmtes Wissen über seine Umgebung (z.B. "Falle=Lebensgefahr, Kiste=Deckungsmöglichkeit ..."). Bewegt sich dein Gegner durch die Welt, kann er vielleicht auch neue Informationen sammeln (z.B. "auf Weg von A nach B befindet sich eine Falle").
    Das Inferenzsystem ist dann zum Schlussfolgern und für das Auswählen möglicher Aktionen zuständig (z.B. dass durch die Falle auf dem Weg dieser Weg zu gefährlich ist -> Aktion: suche alternativen Weg).

    Will man z.B. eine KI für ein Strategiespiel eignet sich vll ein Reflexgesteurtes KI-System. Das bedeutet, dass dein Gegner auf bestimmte Änderungen in seiner Umgebung mittels Abarbeitung eines festen Programms (einer Aktionsfolge) reagiert.
    Bsp.: Ein neues Rohstoffeld wird entdeckt. -> Truppen zur Sicherung schicken, Abbaufahrzeug bauen, Abbaufahrzeug schicken

    Kommt halt auf die Situation an.



  • Aber ich würde mal damit anfangen zu fragen,wie ist eine KI aufgebaut d.h ob man den C++ Code in einen header aufbewahren sollte oder was auch immer damit machen.
    Zum Zweiten Punkt würde ich mal fragen,aus welchen Datentypen die KI am häufigstens gecoded wird?Also d.h gleich so int,long double,etc..

    Und zum Dritten nur noch,welche Anweisungen man da am meisten verwendet, also zbsp.:

    if
    if else
    else
    
    switch(xx) { }
    
    for
    
    while
    
    ..
    

    Also das waren zwar nicht alle,aber ich würde ja auch nur gerne erfahren,welche dieser am häufigsten vorkommen(glaub if).



  • Also in C++ würde sich natürlich eine Klasse eignen ;).
    Welche Attribute und funktionen diese Klasse hat, kommt natürlich ganz auf die Anforderungen an. Eine 4-Gewinnt-KI brauch nicht viele Attribute, sondern eigentlich nur die Belegung des Spielfelds. Eine KI eine Echtzeitstrategiespiels benötigt natürlich weit mehr Informationen: Wo ist mein Gegner, wo sind Rohstoffe, welche Einheiten sind effektiv gegen bestimmte Gegner, spielte der Gegner bisher eher defensiv oder offensiv usw.

    Natürlich muss die KI eine Menge Entscheidungen treffen, ob die dann mit if-else-Konstrukten oder dem switch-Konstrukt umgesetzt werden ist eigentlich egal, und das sollte der Programmieren situationsabhängig entscheiden (welcher Datentyp liegt vor -> switch kann z.B. keine Strings vergleichen; wieviele Lösungsalternativen habe ich usw.)



  • Primer schrieb:

    Aber ich würde mal damit anfangen zu fragen,wie ist eine KI aufgebaut d.h ob man den C++ Code in einen header aufbewahren sollte oder was auch immer damit machen.
    Zum Zweiten Punkt würde ich mal fragen,aus welchen Datentypen die KI am häufigstens gecoded wird?Also d.h gleich so int,long double,etc..

    Und zum Dritten nur noch,welche Anweisungen man da am meisten verwendet, also zbsp.:

    if
    if else
    else
    
    switch(xx) { }
    
    for
    
    while
    
    ..
    

    Also das waren zwar nicht alle,aber ich würde ja auch nur gerne erfahren,welche dieser am häufigsten vorkommen(glaub if).

    Eine gute KI wird immer im Header aufbewahrt, der auf ner externen Platte liegt. Es werden nut ints und nur an wenigen Stellen doubles und gelegentlich longs verwendet.

    Die besten KIs beinhalten zwischen 4 und 7 ifs, 3 fors, 2 whiles und maximal 12 switches.

    </ironie>

    Sorry, aber die Frage kann man so einfach nicht beantworten. In etwa genauso wie man nicht sagen kann, welche Wörter man wohl für ein gutes Buch braucht und ob man das Buch lieber als gedrucktes Buch, eBook oder Hörbuch veröffentlichen sollte.

    Das ist schlicht keine sinnvolle Frage.

    Wie Evolver angedeutet hat, sollte man sich überlegen, welche Daten die KI benötigt um Entscheidungen zu treffen. Zudem sollte man sich auch überlegen, welche Entscheidungen die KI treffen kann. Nun muß man "nur noch" eine Funktion schreiben, die zu einer gegebenen Situation (konkreten Eingangsdaten) eine Entscheidung ausgibt. Das kann so einfach sein wie: "Bei 4 gewinnt schmeiß immer in die Reihe wo die wenigsten Steine drin sind", aber auch beliebig kompliziert.

    Wenn Du Dir überlegt hast nach welchen Kriterien Du Dich für eine Aktion entscheidest, dann kannst Du sowas implementieren. Welche keywords Du dafür verwendest ist dabei ziemlich egal, genauso wie es uninteressant ist, ob das nun im Header, in der cpp-Datei ist oder gar extern in irgendeiner Skriptsprache.

    Manche Entscheidungen sind so schwer zu treffen, daß man es von Hand nicht mehr hinkriegt und dann lieber ein Programm schreibt, das die richtigen Entscheidungen aus Beispielsituationen lernt. Ich habe gelesen, daß aktuelle Autorenn-Simulationen so gut sind, daß es sehr schwer geworden ist, eine KI zu schreiben, die so ein Auto auf der Rennstrecke hält. Daher verwenden wohl einige Hersteller neuronale Netze um ihre Fahrzeuge zu steuern.



  • Ich bin sogar der Meinung man sollte nicht versuchen eine intelligente KI zu schreiben, weil das eh Zeitverschwendung ist. Es muss nur intelligent aussehen und eine gewisse unberechenbarkeit besitzen.



  • Damit schneidest Du ne wichtige Fragestellung an: "Was ist KI?".
    KI-Probleme haben ne starke Tendenz dazu keine mehr zu sein, wenn sie gelöst sind. Wenn wir ein Programm schreiben, das eine Aufgabe löst, wie intelligent ist dieses Programm dann? Zumeist wohl nicht intelligenter als jedes andere Programm auch. Es berechnet halt irgendwas nach (mehr oder weniger) fest vorgegebenen Vorschriften.

    Einige Leute sind daher dazu übergegangen KI darüber zu definieren, ob es eben intelligent wirkt, bzw. eine Aufgabe löst von der man ausgeht, daß sie Intelligenz benötigt. Das ist auch noch schwammig genug, aber immerhin kann man damit KI-Probleme lösen ohne daß die Probleme dabei ihren Status KI-Problem verlieren. 🙂



  • Also nur als Beispiel so in etwa 😕 :

    void ich (int ich_leben, int ich_panzerung, int faustangriff)
    {
    leben(300, 300, 150);
    }
    
    void wolf(int leben_wf, int panzerung_wf, angriff_wf)
    {
    wolf(200, 100, 80);
    }
    

    wenn soetwas stimmen sollte,wie würde ich noch weiter vorangehen?
    Das würde dann nähmlich eher das innere sein.. 👍



  • if( opfer.panzerung > wolf.angriff )
    {
        if( wolf.charakter == angsthaesisch )
        {
             wolf.jaulend_davon_lauf();
        }
        else if( wolf.charakter == selbstmoerderisch )
        {
             wolf.greiffe_an( opfer );
        }
        else if( wolf.charakter == schlaufuchsig )
        {
             wolf.mein_rudel.herbeiruf();
        }
    }
    

    ungetestet 😃



  • Evolver schrieb:

    und für viele spiele ist es vollständig ausreichend eine ki zu implementieren, die vollständig auf zufall basiert.

    Wobei das nichts mit Intelligenz zu tun hat. Mag sein, dass der Spieler durch zufällig agierende Gegner auch ausreichend gefordert ist, aber "(künstlich) intelligent" darf man die dann nicht nennen.

    da widersprech ich 😉 es gibt keine feste definition, ab wann ein system "intelligent" ist. das kann nur an menschliches verhalten angelehnt werden, welche aufgaben benötigen intelligenz? interessanterweise kann man fast alles, wozu ein mensch in der lage ist, mit intelligenz belegen. die definition einer starken KI scheitert deshalb schon daran, dass der mensch selbst gar nicht weiss, was intelligenz eigentlich wirklich ist.

    schwache KI kann man sich, wenn man so möchte, wie eine blackbox vorstellen. in diese blackbox wird der zustand eines systems gesteckt und am andere ende kommt die zustandsänderung heraus, von der die KI "denkt", dass sie das system zum gewünschten endzustand lenkt.

    was nun in dieser blackbox passiert spielt eigentlich keine große rolle für die definition einer schwachen KI selbst. eine KI die rein auf zufall basiert wäre wohl nur schwerlich denkbar, sie braucht zumindest wissen darüber, wie das zu manipulierende system funktioniert, welchen regeln es unterliegt. dadurch bestitzt das system "wissen". diesem wissen folgend wird der nächste zug geplant. wie das geschieht ist, wie bereits gesagt, in diesem fall egal. er mag auch regelgetreu zufällig generiert worden sein.


  • Mod

    es gibt den turing test um festzustellen ob ein programm wirklich inteligent ist, im generellen sagt er aus, dass etwas intelligent ist, wenn man es nicht vom verhalten eines anderen lebewesen unterscheiden kann, das man als inteligent ansieht 😉

    natuerlich muss der test dafuer inteligenz foerdern, wenn man von einem menschen 100 zufallszahlen zwischen 1 und 6, und von einem wuerfel fordert, die ergaebnisse dann aber nicht unterscheiden kann, ist der wuerfel noch lange nicht inteligent *hehe*



  • der turing-test war eine vorgabe zum test starker KI. ob dieser dazu geeignet ist, bleibt aber eh fragwürdig. den turing test könnte nämlich auch eine theoretische turing maschine bestehen, die absolut nichts besitzt, was wir "intelligent" nennen:

    schaffe eine datenbank mit allen möglichen permutationen der wörter einer sprache bis zu einer bestimmten satzlänge. dies sind die fragen. schreibe nun zu jeder "frage" eine antwort in die datenbank. die "KI" sucht nun für jede frage des testers die entsprechende antwort heraus. et voila, die "KI" besteht lediglich darin, in einer datenbank einen string zu suchen. erfolg 100% garantiert.

    diese lösung ist rein theoretischer natur und aufgrund begrenzter resourcen schwerlich umsetzbar, spiegelt aber wider, was eines der grundsätzlichen probleme des turing-tests ist: er ist anwendungsbezogen.



  • thordk schrieb:

    der turing-test war eine vorgabe zum test starker KI. ob dieser dazu geeignet ist, bleibt aber eh fragwürdig. den turing test könnte nämlich auch eine theoretische turing maschine bestehen, die absolut nichts besitzt, was wir "intelligent" nennen:

    schaffe eine datenbank mit allen möglichen permutationen der wörter einer sprache bis zu einer bestimmten satzlänge. dies sind die fragen. schreibe nun zu jeder "frage" eine antwort in die datenbank. die "KI" sucht nun für jede frage des testers die entsprechende antwort heraus. et voila, die "KI" besteht lediglich darin, in einer datenbank einen string zu suchen. erfolg 100% garantiert.

    Bestimmt nicht - spätestens wenn eine "Frage" mehrfach vorkommt, fällt die (fehlende) Intelligenz auf.


  • Mod

    thordk schrieb:

    der turing-test war eine vorgabe zum test starker KI. ob dieser dazu geeignet ist, bleibt aber eh fragwürdig. den turing test könnte nämlich auch eine theoretische turing maschine bestehen, die absolut nichts besitzt, was wir "intelligent" nennen:

    doch, gerade das testet der test, stumpf saetze wiederzugeben ist nicht schwer, aber zusammenhaenge zu erkennen ist schwer. das ist es was inteligenz ausmacht.

    schaffe eine datenbank mit allen möglichen permutationen der wörter einer sprache bis zu einer bestimmten satzlänge. dies sind die fragen. schreibe nun zu jeder "frage" eine antwort in die datenbank. die "KI" sucht nun für jede frage des testers die entsprechende antwort heraus. et voila, die "KI" besteht lediglich darin, in einer datenbank einen string zu suchen. erfolg 100% garantiert.

    was wuerde denn die datenbank auf die frage: "wie war nochmal dein letzter satz?" sinnvoll antworten ohne geringste logic?

    diese lösung ist rein theoretischer natur und aufgrund begrenzter resourcen schwerlich umsetzbar, spiegelt aber wider, was eines der grundsätzlichen probleme des turing-tests ist: er ist anwendungsbezogen.

    er ist sehr gut auf andere bereiche von inteligenz beziehbar, denn er sagt im grunde nur aus, dass man ein system mit einem referenzsystem vergleicht und wenn man beide nicht/kaum unterscheiden kann, sind sie gleichwaertig im verglichenen aspekt.

    wenn du also eine maschine mit etwas vergleichst was du als inteligent bezeichnest und beide gleiche leistung bringen, sind sie gleich intelligent.



  • was wuerde denn die datenbank auf die frage: "wie war nochmal dein letzter satz?" sinnvoll antworten ohne geringste logic?

    "hab ich vergessen."
    "grad nen kaffee eingeschenkt, was hab ich grad nochmal getippt?"
    "findest die frage nicht bescheuert?"
    "frag ich mich auch."
    "lol, das tipp ich doch nicht nochmal."
    (diverser weiterer blödsinn)

    der gesprächspartner soll nicht eloquent und intelligent sein, er soll den tester nur davon überzeugen, das er keine maschine ist.

    eine wichtige defintion von intelligenz ist, dass sie universell ist. ein system, dass sich mit jemanden unterhalten kann, besitzt eine gewisse "sprachliche kompetenz", versagt aber komplett bei problemlösungen auf anderen gebieten. dabei soll das system nicht ein universalgenie sein, aber eben auch nicht anwendungsbezogen. auf fragen zu reagieren und den frager davon zu überzeugen, dass inhaltlich reagiert wird ist ebenso anwendungsbezogen, wie das visuelle erkennen von objekten oder die analyse einer gesummten melodie und der vergleich mit einer audiodatenbank, um das gesummte stück zu identifizieren.

    das sind alles intelligente systeme, aber weit von starker KI entfernt. und darum gings mir in der diskussion.



  • Und was würde die Antwort auf die Frage "Stimmt es, dass Autos schneller fahren, wenn ich beim Tanken Benzin trinke und keinen Alkohol?" sein? Eine einfache DB ohne viel Logik würde nie erkennen, dass das eine mit dem anderen nix zu tun hat, obwohl Wörter drin vorkommen die zusammen passen. Wenn überhaupt, dann würde so eine "dumme" Antwort wie "Don't drink and drive" kommen.



  • eine wichtige defintion von intelligenz ist, dass sie universell ist.

    Darüber lässt sich nun auch wieder streiten. Meines Wissens nach gibt es keine einheitliche, wirklich von allen Seiten anerkannte Definition von "Intelligenz". Ich für meinen Teil würde sagen, das Intelligenz muss nicht universell sein.

    Eine Definition von Intelligenz, die ich interessant finde ist:

    Intelligenz ist die allgemeine Fähigkeit eines Individuums (Lebewesen/Software/...), sein Verhalten [durch Denken] bewusst (->Mensch) oder unbewusst (->primitive Tiere, Software) auf Anforderungen der Umgebung einzustellen.

    In diesem Zusammenhang eine Definition von KI:

    Künstlich intelligente Systeme sind Computer- / Softwaresysteme, die in ihrem Verhalten oder ihrer Struktur Eigenschaften zeigen, die natürlichen Systemen mit Intelligenz zukommen und die von traditionellen künstlichen Systemen noch nicht erfüllt werden.



  • thordk schrieb:

    und für viele spiele ist es vollständig ausreichend eine ki zu implementieren, die vollständig auf zufall basiert. bei solchen spielen wie 4-gewinnt kommt man mit sowas sogar ziemlich weit. und ein prominenteres beispiel: einer der geister bei pacman bewegt sich ausschliesslich per zufall.

    Naja bei Pac Man bewegen sich keine der Gester per zufall, alle Bewegen sich abhängig von Spieler, was dazu führt, dass es einen Lösungsweg gibt, der immer Funktioniert, aber das nur so am rande.

    Also wenn man eine Wirklich gute KI aufbauen will, dann sollte man erstmal dafür sorgen, dass man einen Bereich hat, der sich ausschießlich mit der KI beschäftigt, so eine Art KI script, des dann vom Programm für die Bots benutzt wird, so ist es einem möglich, sich in einem Bereich ausschlißlich um die KI zu kümmern, und alles andere ausser acht zu lassen. Solche jederzeit austauschbaren KI scripts sind z.B. in Colobot(komerziell) und auch in TA spring(Open-Source) enthalten, wobei ich mit letztern wenig auseinandergesetzt habe. OK keines der Spiele hat eine wirklich tolle KI, aber bei Colobot kann man auch lernen, wie man eine KI (in diesem Fall bei Robotern) Programmiert, und wie man sich eine KI entwicklungsumgebung zurechtbasteln könnte, wenn man wirklich mal eine KI basteln möchte (In Colobot hab ich meine ersten Programmir-Erfahrungen überhaupt gemacht). In Colobot wird einem ins kleinste Deteil erklärt, wie man eine KI für einen Sammelroboter bastelt, der Erz sammeln geht, dies zum Konverter packt, und dann das gewonnene material wieder irgenwo verteilt (Lager gibts nicht), und noch jede menge Tutorials mehr, das alles in challenges verpackt. Mir hat viel spaß gemacht.

    OK jetzt hab ich genug werbung für Colobot gemacht.

    Es gibt noch eine künstliche Intelligenz die selbstlernend ist, die wird allerdings fast nirgends angewendet, was nicht bedeutet, das es sie noch nicht gibt. ---> Nero


Anmelden zum Antworten