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

11

18.07.2007, 10:44

Danke für diese ausführliche auskunft als erstes Mal.


Ich habe folgendes für diejenigen die mir vlt ein wenig tiefer helfen wollen da ich in einem gewissen Bereich einiges noch nicht von NEURALEN NETZEN verstehe.


Hier einmal die Grundregel von TAROCK:

[list]> Jeder Spieler bekommt 10 Karten[/list][list]> Es gibt insgesamt 40 Karten die alle auf 4 Spieler aufgeteilt werden[/list][list]> es gibt 20 Karten mit Romischen Zahlen von 1-21 ohne 3 und 4 dafür aber den sogennanten GSTIESS der die 22 übernimmt[/list][list]> Desweiteren gibt es 20 Farbkarten -> 4 Farben à (König, Dame, Reiter, Bube, Ass/10ner)[/list][list]> Grundsätzlich sticht jede Karten mit Römischen Zahlen eine Farbkarte[/list][list]> Wenn ein Spieler jedoch eine Farbkarte besitzt die passend ist muss er sie spielen[/list][list]> Ist dies nicht der Fall muss der Spieler eine Romische Karte spielen wobei hier dann die höchste Zahl gewinnt[/list]---------------------------------------------------------------------------------

Hierfür scheint sicherlich für viele noch keine KI mit einem neuralen Netz notwendig. JEdoch kommt das Problem hinzu, dass immer 2 Spieler miteinander spielen, und sich dementsprechend die Karten zuspielenmüssen. Es leider auch viel strategische rafinessen und noch weitere Regel die ich aber nicht erklären will, da diese sowieso von einem nicht TAROCKLER verstanden werden.

Mein großes Problem ist jetzt eben, dem Rechner beizubringen wie er auf die verschiedensten Karten seines Mitspieler reagiert und wie er weiß was er seinem Partner zuspielen muss, damit dieser dementscprechend handeln kann. Dies ist würde ich sagen eines der großen Probleme. (Wenn jemand Lust hat ich kann auch noch mehrere große Probleme nennen)

Was für mich jetzt ein Rätsel ist, wie soll ich hierrauf ein neurales Netz andewenden????

--> Das einzige was ich mir vorstellen kann:

[list]> Die inputs der einzelenen Neuronen sind die Karten die Fallen[/list][list]> Die Gewichtung muss bei jedem Neuron geändert werden oder irgendwie so[/list][list]> und weiter habe ich leider keine konkreten Vorstellungen :evil: [/list]

Ich weiß einfach nicht was ich machen soll. ABER EINES KANN ICH EUCH SAGEN --> DIE SCHWIERIGKEIT DIESER KI IST WEITAUS HÖHER ALS DIE EINES SCHACHCOMPUTERS, DA ICH NICHT EINFACH "= ZÜGE VORRAUSDENKEN KANN

Wer mathemtisch ein bisschen bescheid weiß kann sich ganzeinfach ausrechen wie viel möglichkeiten es sind wenn ich lediglich 4 züge vorrausdenken würde -> 4^40
Und das wären lediglich 4 Züge *ouch*

Aber naja wenn mit jemand weiterhelfen kann dann bin ich sehr froh

mfg Yosh

12

18.07.2007, 10:49

also indem fall würd ich an deiner stelle erstmal eine kommunikation zwischen den computer spielern aufbauen. Jeder spieler muss dann seine eigenen karten bewerten und wenn ihm eine karte fehlt damit er gut agieren kann, soll er eine anfrage an den andenr spieler schicken ob er diese hat und wofür er diese braucht. dann soll er bewerten ob er mit seinen karten nicht eine bessere aktion machen kann sonst die karte dem andern geben.

und für diese bewertung kann man mmn sehr gut neuronale netze einsetzen.

13

18.07.2007, 10:52

das Spiel geht leider nicht so. Man darf nicht in die Karten deines Partners einsehen, geschweige denn sich mit seinem Partner besprechen was zu tun ist.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

14

18.07.2007, 11:01

Naja eine einfache Möglichkeit wäre eine "Persöhnlichkeit" zu codieren. Die Persöhnlichkeiten "denken" oder raten zumindest immer in bestimmten Mustern. Damit kannst du das vorrausraten meist ganz gut reduzieren.

Neuronale Netze können erstmal keine Karten bewerten.
Deine Inpust sind wie du sagst die Karten, 1 für erste Römische Zahl, etc. das ist nicht weiter wichtig, einfach alles durchnumerieren.

Das netz oben ist nicht geeignet für eine solche Aufgabe, es ist ein Netz zur Klassfikation von Dingen, es sollte nur den prinzipiellen Aufbau zeigen.

Du kannst aber das Netz so manipulieren das du als Klassifikation 0 und 1 nimmst. 0 bedeuted: "Das ist schwachsinn, darfste nicht machen, entspricht nicht den Regeln" und 1 bedeuted: jep, geht.

Dann nimmst du muster in dein Netz, in deinem Fall entspricht das einer Konfiguration von Karten und gibst die Klassifikation der Lernstichprobe mit bei. ... also das T wir oben gezeigt konstruieren. Wichtig ist das du nicht nur Positivbeispiele nach dem Muster "Ja das darfst du alles", sondern auch (und das ist sehr wichtig) alle Negativbeispiele ein oder mehrfach anlernst.

Wenn du das mit allen Regeln gemacht hast probierst du es einfach mal aus, und prüfst dann ob das netz dir gültige konfigurationen von Karten ausspuckt.

Das Intelligente kommt jetzt indem du ihm auch Stuationen anlernst die Tricky sind, aber wichtig ist dabei das du auch immer Negativbeispiele mit dazu nimmst. Das Neuronale Netz lann vergessen und du musst auch wissen wieviel Muster du maximal anlernen kannst, ohne das es in einen Zustand übergeht wo es confused ist.

Das Problem liegt also im Anlernen, nicht im codieren eines solchen Netzes ;). Während das Netz spielt ist es positiv auch mal einen lernschritt durchzuführen so das neue Situationen angelernt werden können, das netz wird so immer schlauer... wie eben bei Spam filtern ;)

15

18.07.2007, 11:06

@yosh: ich glaub kaum das wir dir weiter helfen können wenn du uns nicht mehr über die regeln verrätst.
und das was man aus dienen infos sagen kann, hat koschka jetzt eig. sehr schön beschrieben :)

@koschka: wieviel neuronen pro layer würdest du denn etwa vorschlagen hier? der eingangslayer braucht ja soviele neuronen wie karten auf der hand seien können, dem ausgangslayer würde ja ein neuron genügen. aber wieviel hiddenlayer würdest du vorschalgen? 2 mit je 4-5 neuronen?

16

18.07.2007, 11:09

Okay ich verstehe, dass ich 4 inputs brauche auf denen die karten liegen welche gespielt wurden oder auch noch nicht gespielt wurden. Als nächstes bringe ich den einzelenen Neuronen ldeiglich bei welche karten in einem Fall gespielt werden darf. Dann liefere ich einfach ein JA/NEIN an das nächste Neuron und Wie WEITER???

Des Weiteren wo kann ich dann tricks einbauen und wie soll das System lernen dass sind leider noch alles dinge die ich nicht verstähe. Wäre froh wenn jemand eine etwas detailierte Erklörung liefert oder sogar ein kleines bsp. in c/c++ leifern kann :lol:

mfg Yosh

17

18.07.2007, 11:11

Zitat von »"koschka"«


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


diese beiden links sind beide sehr schön, grade der erste hat mir vor längere zeit auch geholfen neuronale netze richtig zu verstehen.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

18.07.2007, 11:14

Je nachdem wieviel Muster er anlernen will, desto mehr desto besser aber auch desto langsamer, so was muss man einfach mal probieren... auf unseren FRZ Rechner in der Uni ham mer mal ne Ziffernerkennung mit dem oben beschiebenen Algorithmus gemacht und da haben Konfigurationen mit Netzen der Form: {200,20,12,9} schon ganz gute Ergebnisse gebracht.... aber auch ein µ gedauert, lief aber auf Octave, mit nativem C Code würdest du sicher bessere Ergebnisse erziehlen

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

19

18.07.2007, 11:14

Zitat von »"yosh-summer"«

DIESER KI IST WEITAUS HÖHER ALS DIE EINES SCHACHCOMPUTERS, DA ICH NICHT EINFACH "= ZÜGE VORRAUSDENKEN KANN

Wer mathemtisch ein bisschen bescheid weiß kann sich ganzeinfach ausrechen wie viel möglichkeiten es sind wenn ich lediglich 4 züge vorrausdenken würde -> 4^40
Da steht dreimal Quatsch. Die Komplexität eines Schachspiels ist mit Sicherheit weitaus größer. Es gibt mehr Möglichkeiten im Schach, die ersten zehn Züge zu spielen, als man Atome im Universum annimmt.

@koschka: warum nicht einfach nur die gültigen Züge zulassen, und nur diese dann vom Netz bewerten lassen?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

20

18.07.2007, 11:21

@reborn, ja klar, so gehts natürlich auch, is wurscht, du kannst das ganze ja auch noch verfeinern und die Klassifikation der "Güte" des gespielten Zuges des Gegenspielers zuordnen und das wäre sicher auch angebracht ;)
Der Kreativität sind da keine Grenzen gesetzt....

@Eldarion72

ich korregier mich, natürlich kannst du keine einzelnen Karten bewerten, aber Konfigurationen von Karten, ... und du brauchst rein formal 2 Ouputneuronen, da K = {0, 1} und |K| = 2.

@yosh,
Inputs sind nur die Karten die gespielt wurden in dem jetzigen Zug n. Es gibt 2 große Phasen die Lernphase, von der sprechen wir jetzt und die "Erkennungsphase".

Die Lernphase ist dazu gedacht in das noch dumme netz Konfigurationen von Karten einzulernen, dazu oben der Algorithmus. Du als Programmierer gibst den Netz Konfigurationen und das Netz passt seine Schwellen, Gewichte so an, das es diese Konfigurationen hoffentlich irgendwann erkennt.

Das JA/NEIN ist deine Klassifikation - wie schon gesatz z.B. 0 für NEIN geht nicht, 1 für JA oder auch anders, siehe reborns Beitrag. Um die einzelnen Neuronen kümmert sich der Algortithmus, er stellt die Gewichte und Schwellen ein.
Das JA NEIN sagt aber nur ob der Zug geht oder nicht, nicht ob er klug ist oder nicht!

Für deinen speziellen Fall brauchst du natürlich wesentlich mehr als 2 Klassifikationen.

Du brauchst also ein Lernszenario mit Beispielen vom Typ ‘Karte_1 ist höher bewertet als Karte_z’ also ist es besser Karte_1 zu ziehen.


Kleiner Nachtreag zur Erkennungsphase:
-------------------------------------------------
Wir wissen ja jetzt das unsere Output Neuronen sozusagen sagen welcher Klasse unser Muster gehört. Gegeben sind die Gewichte und Schwellen aus dem oben gennanten Lernalgorithmus, als dieser also nicht mehr so große Fehler machte und in einem lokalen Minimum angekommen ist.

Wir wissen das wir die Ausgabe des i. Neurons wie folgt berechnen:

Quellcode

1
yi(s) = H( SUM_j=1^n(s-1) (wij(s) * yj(s-1) + bi))

oder kurz:

Quellcode

1
2
3
yi(s) = H( hi(s) ) wobei natürlich gilt das:

hi(s) = SUM_j=1^n(s-1) (wij(s) * yj(s-1) + bi)


D.h. das unser gewünschter Output für ein Muster der Klasse k € K:

Quellcode

1
2
3
4
5
6
7
m... sei die letzte Schicht, siehe m-schichtiges Feed Forward Netz

                -
               |  1 fallls i = k
yi(m) = kn = - 
               |  0 sonst
                -


Auf Deutsch, heisst das das unser erstes Outputneuron (von links gesehen) das erste Muster repräsentiert und wenn y0 = 1 dieses Muster gefunden wurden. Wir definieren uns jetzt eine schöne Funktion die uns das Muster direkter ausspuckt aus den obigen Definitionen.

Sei wie gesagt K eine Menge mit K = { k0, ..., kn } aller Klassifkationen kn.

Quellcode

1
2
3
4
5
Wir bestimmen die Summe Z der Ausgabe aller Neuronen in der Ausgabeschicht. :

 Z = SUM_i=1^n(m) (H(hi(m)))

Z muss dann mit unserer gefunden Klassifikation in einem bestimmten Intervall übereinstimmen. Also Z entspricht einem k € K. (mit Abweichungen)



Weiterführende Litheratur:
Vortrag über ein Mühle Spiel, mit der oben angesprochenen Bewertungsfunktion
Der gleiche Vortrag etwas ausführlicher

Werbeanzeige