# Grundlagen der Künstlichen Intelligenz



## damo (4. Dezember 2005)

Hi Leute,
Ich habe mich dazu entschollen nun mal in die programmierung einer KI einzusteigen.
Nun wollte ich hier einmal fragen ob jemand hier vielleicht gute Tutorials eBooks oder auf Bücher über die Grundlagen der programmierung in Java anzubieten hat . Ich bin für jede Antwort dankbar!


----------



## Dennis Wronka (4. Dezember 2005)

Was fuer eine Art KI soll das denn sein?

KI ist ein heikles und sehr sehr sehr sehr umfangreiches Thema.
Ich hatte damals unter Pascal mal ein wenig was in die Richtung gemacht, aber sehr weit bin ich damals nicht gekommen.

Das Problem dabei ist einfach, dass eine KI lernen koennen sollte, ansonsten kann man, meiner Meinung nach, nicht wirklich von Intelligenz sprechen.
Die KI in Spielen ist wohl eher statisch, sie entscheidet einfach aufgrund gewisser Werte die die aktuelle Situation beschreiben, kann aber nicht auf Erfahrungswerte zugreifen.
Und gerade das ist doch eigentlich, was Intelligenz ausmacht, die Lernfaehigkeit.


----------



## damo (4. Dezember 2005)

Natürlich hast du recht, KI ist ein sehr Umfangreiches Thema..
Aber mit geht es am Anfang (natürlich) noch um die Grundlagen, wobei ich bald eine Facharbeit über dieses Thema schreiben werde und deswegen fange ich schonmal an mich ein bisschen in die KI einzuarbeiten.

Ich hatte mir eingentlich überlegt ein kleiner Spiel zu machen was ein wenig über die KI in Pong hinausgeht.

Und was da dazulernen angeht... natürlich zeichnen das eine KI aus, aber ich denke das dies die Grundlagen ein wenig überschreitet (es sei denn da kann mich jemand von Gegenteil überzeugen )


----------



## Dennis Wronka (4. Dezember 2005)

Mein Pseudo-KI-Highlight war ein recht intelligentes TicTacToe in Pascal.
Das war schon sehr umfangreich, hat recht gut gespielt und war einiges an Arbeit.
War aber nicht lernfaehig. Es waren im Grunde einfach sehr sehr viele Situationen eingetippt und wurden je nach Prioritaet ausgefuehrt, sodass das Spiel in der Lage war Fallen zu stellen, zu Blocken oder zu beenden.
Die Prioritaeten waren wie folgt (von niedrig nach hoch sortiert)

Fallen bauen
Blockieren
Beenden


----------



## Thomas Darimont (4. Dezember 2005)

Hallo!

Schau mal hier:
http://www.javagaming.org/forums/index.php?PHPSESSID=f93e0db617e6bf11b99e09edb49c9b88&board=23.0

Gruss Tom


----------



## damo (4. Dezember 2005)

Das hört sich doch gut an 
Ich denke mal dass TicTacToe sich gut dafür eignet und dass es noch eine der einfachsten Methoden ist eine KI zu schaffen.  Ich könnte ja dann die Facharbeit so aufbauen,d ass ich erstmal grundlegend erkläre worum es in einer KI geht und warum sie so kompliziert ist etc. und dann halt noch ein Beispiel um es praktisch noch zu verdeutlichen.

Dabei würde mir allerdings ein Tutorials o.Ä. sehr helfen, denn so ohne Ansatz ist es dann doch schon recht schwierig...

/edit: Woho, da hat sich doch glatt vor mein posting ein sehr interessanter Post geschummelt   Vielen Dank!


----------



## Dennis Wronka (4. Dezember 2005)

Wenn ich den Code noch haette koennte ich ihn Dir gern zur Verfuegung stellen.
Aber der ist leider vor ein paar Jahren mal einer Formatierung zum Opfer gefallen.
Echt dumm gelaufen...


----------



## damo (4. Dezember 2005)

Ich habe mir gerade überlegt, dass eine art "pathfinding", also eine Figur o.Ä. die durch ein Labyrint geht, ein recht gutes Beispiel wäre. Außerdem könnte man dann auch gut eine Gegenüberstelung von einer Figur mit "pathfinding" und einer ohne machen.

Hat jemand schon Erfahrungen mit ähnlichem oder kann mir weitere Tipps geben? Wäre seh nett


----------



## javaprogger1987 (5. Dezember 2005)

Was du als letztes vorschlägst, da hab ich auch meine Facharbeit drüber gemacht, da ist eine KI, die läuft einer anderen KI hinterher, allerdings ist die die vorne zufällig, und die die hinterherläuft muss die zufällige fangen.. Allerdings konnte ich damals noch nicht sooo optimal programmieren, weswegen das vermutlich nicht so toll gelöst ist (und auch nicht immer geht -> manchmal stürzt das Programm einfach ab ;().. Ich hab dir mal die Videos von Läufen hochgeladen (Der rote Punkt soll gefangen werden):

http://rapidshare.de/files/8659558/gefangen_46sek.avi.html
http://rapidshare.de/files/8659680/gefangen.avi.html

    Note dafür war 1+, aber vermutlich nur, weil mein Info-Lehrer den Quellcode nich gerafft hat 
  Wenn du willst kann ich dir ja mal Ansätze davon schicken..

 Falls du nur eine "KI" machen willst wäre wohl Backtracking oder Dijkstra-Algorithmus geeignet, wobei der letztere etwas komplizierter ist..


----------



## damo (5. Dezember 2005)

javaprogger1987 hat gesagt.:
			
		

> Was du als letztes vorschlägst, da hab ich auch meine Facharbeit drüber gemacht, da ist eine KI, die läuft einer anderen KI hinterher, allerdings ist die die vorne zufällig, und die die hinterherläuft muss die zufällige fangen.. Allerdings konnte ich damals noch nicht sooo optimal programmieren, weswegen das vermutlich nicht so toll gelöst ist (und auch nicht immer geht -> manchmal stürzt das Programm einfach ab ;().. Ich hab dir mal die Videos von Läufen hochgeladen (Der rote Punkt soll gefangen werden):
> 
> http://rapidshare.de/files/8659558/gefangen_46sek.avi.html
> http://rapidshare.de/files/8659680/gefangen.avi.html
> ...



Danke für die Mühe!

Das wäre wirklich sehr hilfreich wenn ich mal so einen Einblick in die ganze Geschichte haben könnte   Also falls du eine Mail schicken willst: damo1910@web.de

big thx für die Mühe nochmals!


----------



## SilentWarrior (5. Dezember 2005)

> Falls du nur eine "KI" machen willst wäre wohl Backtracking oder Dijkstra-Algorithmus geeignet, wobei der letztere etwas komplizierter ist..


Bei aller Liebe, aber Backtracking ist (zumindest für mich) etwas tausendmal komplizierteres als Dijkstra – bei letzterem weiss man ja genau, wie man vorgehen muss. Jeder Schritt ist vorgegeben, man muss sich nur im Internet eine Seite suchen und das in seiner Sprache implementieren. Wohingegen Backtracking man sich jedesmal aufs neue überlegen muss.

Meine Meinung: Wenn man sowas wie eine KI programmieren will, dann sollte man sowas erstmal ohne Computer machen. Also z.B. auf ein Blatt Papier schreiben (nehmen wir das Beispiel Tic Tac Toe, das find ich auch sehr gut): Wann lernt mein Programm? Wie teile ich der KI mit, dass sie sich merken soll, wann sie verliert und wann sie gewinnt und wie sie das beim nächsten Mal effizient wiederverwenden kann, dieses Wissen? Solche Dinge halt. Die konkrete Programmierung ist dann letztendlich (wie eigentlich meistens) nicht mehr die Hauptarbeit.


----------



## javaprogger1987 (6. Dezember 2005)

SilentWarrior hat gesagt.:
			
		

> Bei aller Liebe, aber Backtracking ist (zumindest für mich) etwas tausendmal komplizierteres als Dijkstra


 
 Find ich nicht, wenn man einmal Rekursionen geblickt hat ist das eigentlich einfacher.. Aber ich respektiere natürlich deine Meinung 



			
				SilentWarrior hat gesagt.:
			
		

> Meine Meinung: Wenn man sowas wie eine KI programmieren will, dann sollte man sowas erstmal ohne Computer machen.


 
 Seh ich genauso, wenn man direkt anfängt zu programmieren kriegt man ein Haufen Probleme 

@damo Du hast Post!


----------



## SilentWarrior (6. Dezember 2005)

[immer noch/schon wieder OT]





> Find ich nicht, wenn man einmal Rekursionen geblickt hat ist das eigentlich einfacher..


Uh? Du bist ein Genie! Wenn du mich fragst.  Hast du mir vielleicht irgendwelche Websites, die das Zeug anschaulich erklären? Mit Rekursion hab ich absolut kein Problem, aber beim Backtracking (Backpacking ^^) da ruckelt’s bei mir immer noch.

[/fertig OT (und fertig Post, sorry)]


----------



## javaprogger1987 (6. Dezember 2005)

Von wegen Genie  
Also hab mal gesucht und folgendes gefunden:
http://cgg.unibe.ch/teaching/lectures/ss05/da_ueb/05/

Oder, da die Powerpoint Präsentation hat unser Lehrer benutzt um uns das zu erklären (ab Folie 13)

http://www.educeth.ethz.ch/informatik/vortraege/backtracking/

Hoffe mal das hilft 

MfG
Tobias


----------

