Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.07.2007, 09:53

Problem mit KI - geht das auch mit Neuroinfomatik?

Hi an alle,

ich habe folgendes gemacht, ich habe ein Netzwerkspiel gemacht das Tarock pber das internet ermöglicht. Jetzt würde ich aber auch gerne einen computergesteuerten spieler einbauen. :lol:

Jedoch habe ich große probleme wie ich an das problem rangehen soll da ich absolut keine ahnung habe von Bewertungssystem wie sie z.B. bei einem Schachcomputer angewendet werden.

Habt ihr vielleicht Vorschläge bzw. Links zu diesem Thema wo ich was nachlesen kann????

mfg

Yosh :p

2

17.07.2007, 10:12

Mein Informatiklehrer sagt immer: Man soll die komplexität des Problems reduzieren.
Sprich, du sollst an einfachen Beispielen üben, und dann eine KI für solch ein Spiel schreiben.
Sprachen: C/C++, C#, Assembler (16-Bit), QuickBASIC

Anonymous

unregistriert

3

17.07.2007, 10:33

Na zu lesen hätte ich was.

http://de.wikipedia.org/wiki/K%C3%BCnstliche_Intelligenz

4

17.07.2007, 10:34

das hilft aber leider nicht weiter weil ich bei sowas kein simples modell machen kann. Ich habe schon meherer KI steurungen für simple programme gemacht war aber noch nie mit so einem koplizierten thema konfrontiert. Ich habe leider absolut keine ahung wie ich das bewertungssysteman das spiel anpassen soll. wie viele züge ich vorraus denken soll und und und....

Wenn mir bitte jemand ein wenig helfen kann dann bin ich sehr froh

mfg Yosh

5

17.07.2007, 10:36

ich suche nicht so etwas allgemeines dieses Wissen habe ich bereits ich suche konkret modelle von bewertungsystemen oder so

6

17.07.2007, 16:02

Du solltest dir überlegen, was du selbst spielen würdest. Wenn da z.B. Ass, Zehn und König liegt, und du die Farbe nicht hast, würdest du doch Reintrumpfen. Das musst du der KI beibringen.

Das könnte man z.B. so lösen:
Jede Karte bekommt einen Wert. Und wenn dieser Wert hoch genug ist, und der Computer z.B. keine Karte dieser Farbe mehr hat, dann soll er reintrumpfen.
Sprachen: C/C++, C#, Assembler (16-Bit), QuickBASIC

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

7

17.07.2007, 17:15

o Das einfachste ist das du Dir nen endlichen Automaten baust (hat David glaub ich bei seinen Spielen auch gemacht), da sitzte zwar ne weile aber irgendwann wird es einigermaßen funktionieren.

o Die zweite Möglichkeit, ebenso deterministisch, ist es alles in Aussagenlogik oder Prädikatenlogik zu machen (zu definieren was geht und was nicht), näheres dazu siehe Wikipedia, im Endeffekt allerdings dem ersten Vorschlag sehr ähnlich

o Die beste und schwerste Möglichkeit ist ein neuronales netz mit zu integrieren, das wird aber schwer, weil du das auch so anlernen musst, das manches (z.B. die spielregeln immer beachtet werden)

-> Mein Vorschlag, keines von den 3 Möglichkeiten (es gibt noch mehr...) zu machen und wenn du das wirklich willst, gibt es bereits projekte, wo vorallem Forscher die Regeln des Spieles in Aussagenlogik packen und ein externes Programm, dein Spiel möglichst gut spielen lassen. Da gibts auch einen Wettbewerb (weltweit?), die TU Dresden war mit einem Programm das genau das konnte auf Platz 1 im letzten Jahr, ich glaub dieses Jahr haben sies ned ganz geschafft ... *Eigenwerbung mach* :), ich weiss aber nicht ob solche Programme schon offen verfügbar sind, auch auf den Lehrstuhl Seiten hab ich nichts dazu gefunden.

8

18.07.2007, 08:53

Ja das ist es was ich machen will ein neuronales Netz. Ich habe schon so viel davon gehört aber noch nie was darüber gelesen geschweige denn eines entwickelt.

Kann vlt jemand ein gutes gratis E-Book nennen oder hat jemand eventuell ein paar tutorials wo sowas in der Art erklärt wird wie das zu programmieren ist???

Danke für eure Bemühungen


mfg

Yosh :lol:

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

9

18.07.2007, 10:00

Ich weiß zwar nicht, was Tarock ist, aber ein neuronales Netz macht nur dann Sinn, wenn sich die konkrete Aufgabenstellung jedes Mal ändert, bei Computerspielen also dann, wenn sich die KI auf den Gegenspieler anpassen soll, oder wenn die KI über die Runden immer besser werden soll. Beides macht bei einem Kartenspiel meiner Meinung nach wenig Sinn, ich würde eine der beiden ersten Möglichkeiten benutzen, bzw. einfach eine konditionierte KI einbauen, das ist im Prinzip das selbe, nur intuitiver zu schreiben.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

10

18.07.2007, 10:16

Reborn hat Recht, aber das ist bei eigentlich allen Spielen der Fall das sich die KI an an den Menschen anpassen soll ^^. Man sollte sich aber schon überlegen ob es Sinn macht mit dem Hammer auf eine Mücke zu schlagen.

....

hmmmn ich könnte mal nach den Prüfungen ein Tutorial dazu schreiben, ... das würde dann aber noch so ca. 3 Wochen dauern..., meist ist dazu nur ganz harte Mathematik im Netz zu finden, mit der man natürlich sowas machen kann.

Das Problem bei deinem konkrten Fall wird wohl sein das die Spielregeln ja unumstößlich sind, du musst also so was wie einen "Überwacher" dazu coden, der einen sehr negativen Input dem Netz gibt, damit es merkt das es in solche Zustände nicht kommen darf. (Wie bei einem kleinen Kind eben ;) ). Ich weiss nicht ob es möglich ist ein Netz so von vornherein anzulernen, das es nie wieder in solche Zustände kommt, da muss ich mal fragen...

o Für deinen Konkreten Fall würde ich ein Hebbsches Netz mit Perzeptron Lernalgorithmus (nicht Hebbsches Lernen nehmen, da du mit Hebbschen Lernen nur 0.14*n Muster anlernen klannst, ohne das das Netz komische Dinge tut). n bezeichne Dabei die Anzahl der "Neuronen". Mit dem Netz oben erreichst du zumindest keine Frusttration bei 2n Mustern.

o Ein weiterer Kandidat wäre das Back Error Propagation lernen. Dazu hab ich auch einen Algorithmus und sogar ein Octave Script, falls du magst. Dann brauchst du nicht so lang warten ;).

Empfehlenswerte Litheratur und Links
http://www.neuronalesnetz.de/
http://www.dkriesel.com/index.php?id=neuronalenetze

Das PDF "Neuronale Netze" ist sehr gelungen, hab darin auch schon gelesen, manche Notationen sind etwas anders als im folgenden Algorithmus, für Error Back Propagation Lernen, aber ich glaub mit etwas gutem Willen kommt man damit klar...

Error Back Propagation Lernen
--------------------------------------------
Geplänkel
Wir haben ein voll vernetztes Netz, jedes Neuron i hat mit einem anderen Neuron j der nächsten Schicht eine Verbindung, wenn unsere Gewichte wij den Wert 0 annehmen, dann exestiert quasi keine Verbindung. Ein negativer Gewischtswert wij wirkt sich hämmend, ein positiver verstärkend auf das Neuron i aus. Jedes Neuron hat m Verbindungen zu anderen Neuronen und einen eigenen Schwellwert bi mit dem es feuert.

Als "Ausgabefunktion" benutzen wir die Heavyside Funktion (um das Netz besser zu machen ist eine Sigmoide Funktion angebrachter)

Sei H(x) unsere sigmoide Funtion:

Quellcode

1
H(x) =  1/(1 + e^(-x))


Sei H'(x) unsere Ableitung für die sigmoide Funtion:

Quellcode

1
2
H'(x) =  1/(1 + e^(-x))² * e^(-x)
       =  H(x)² * e^(-x)


Bei der zweiten = - Zeichen würd ich dich bitte, das mal zu testen, ... hab ich mir gerade mal so ausgedacht ;) thx

Zu der Definition der Variablen und prinzipieller Aufbau:
o Wir haben ein m-schichtiges Feed Forward Netz (Es gibt also keine Rückkopplungen)
o Weiterhin gebe n(s) Die Anzahl der Neuronen in Schicht s an.
o Mit yi(s) bezeichnen wir den Output des Neurons i der Schicht s
o wij(a), b(a) bezeichnen Gewichte und den Schwellwert des Neurons a

Das Netz soll das Muster x' € (R^n)in Klassen k € K unterteilen. x' ist dabei eine Matrix, deren Zeilen einem Muster entsprechen. Die Zeilen bezeichnen wir mit x(p) wobei p die p-te Zeile der Matrix meint. K ist eine Menge von Klassifikationen, einfachster Fall: K = {1, 2, 3, ... , n }.

Wir lernen das Netz mit deiner Lernstichprobe T = { (x(1), k1), (x(2), k2), ..., (x(n), kn) } an. Ein Tupel (x(n), kn) heisst dabei, das das Muster x(n) zu der Klasse kn € K gehört.

Unser Netz braucht |K| Neuronen in der Outputschicht (im allgemeinen die letzte Schicht), damit unser Netz auch die Klassifikation korrekt vornehmen kann. Klassifikation sollte hier allgemeiner betrachtet werden, auch dein Problem kann man mit Klassifikation lösen.

Der eigentliche Algorithmus

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  o Initialisiere Schwellwerte und Gewichte für jedes Neuron i in jeder Schicht s. (z.B. randomisieren)
  o Wähle ein Muster (x', k), aus T und setze alle Inputs der Input Schicht auf yi(0) = xi für jeden einzelnen Wert aus dem Vektor x'. D.h. die Input Schicht muss auch so groß sein wie die Länge des Mustervektors.
  o Propagiere Signale durch das Netz mit:
   
     yi(s) = H( SUM_j=1^n(s-1) (wij(s) * yj(s-1) + bi)) für alle Neurone i in jeder Schicht s.

   Diese Funktion berechnet alle Outputs der Neurone im Netz. Man fängt bei der 1. Schicht (also eine Schicht tiefer der Inputschicht) an und geht bis zur Outputschicht weiter. Einfach mal an einer Skizze verdeutlichen, dann wird das glas klar.

  o Berechne die Fehlerterme der Outputs

   hi(s) = SUM_j=1^n(s-1) (wij(s) * yj(s-1) + bi)
   Di(s) = 2*H'(hi(s)) * (ki - f(hi(s)))

  o Propagiere Fehler zurück
 
   Di(s-1) = H'(hi(s-1)) * SUM_j=1^n(s) Dj(s) * wji(s)

  o Führe Lernschritt aus
  
   DELTA_wij(s) = ALPHA *Di(s) * yj(s-1)
   DELTA_bi(s) = ALPHA * bi(s)
   wij_neu(s) = wij_alt + DELTA_wij(s)

   ALPHA ist dabei die Schrittweite, diese sollte genügend klein sein, machs am Anfang einfach per Parameter einstellbar (so um 0.0014)

  o Gehe zum Anfang, ziehe keinee 4000€ ein und wähle ein neues Muster aus T. 
Bis sumarischer Fehler im Lokalen Minimum (gib einfach ein minimum vor ( < 0.00001  oder so)

Werbeanzeige