Wenn das nur einen oder zwei Züge berechnet, besiegt ein Anfänger die KI locker - aber für Schach als sowas wie ein Minispiel tauglich.
...
Wie ich es schon mal oben schrieb:
An komplexen Schach-KIs sitzen ganze Teams Monate mit dafür deutlich besser geeigneten Programmen. Mehr als so eine simple KI wirst du mit dem Maker nur schwerlich hinbekommen, zu Mal du irgendwann das Problem kriegen wirst, dass er nicht nur ewig rechnen wird, sondern er im Maker das Event selbst kaum noch öffnen können wird.
Mit den neueren Makern kriegst du es dann vllt noch besser hin, indem du es "extern" berechnen lässt und nur den Zug als Variablen zurück gibst. Aber auch da wirst du kaum über einfache KIs hinauskommen.
Wenn man Spiele machen will, dann eher eingeschränkte Spiele wie Mühle, Dame oder sowas. Da hat man dann ne gute Chance, durch so einfache KI gute Ergebnisse zu erzielen, da die Möglichkeiten einfach begrenzt sind. Aber dadurch, dass Schach halt einfach derart komplex ist (ich denke nur an Strategien, wie eine Figur zu opfern, um damit irgendwo einen Freiraum für andere zu schaffen), wächst die Komplexität der KI eben exponentiell mit. Mehr als eine grundlegende Situationsbezogende KI wirst du da im Maker nicht hinbekommen. Und selbst dann gilt wie die letzten Male:
Aufwand >>>>>>>>>>> Ergebnis --> Sein lassen und Alternativen suchen.
Mit den neueren Makern kriegst du es dann vllt noch besser hin, indem du es "extern" berechnen lässt und nur den Zug als Variablen zurück gibst. Aber auch da wirst du kaum über einfache KIs hinauskommen.
...
Also ich muss sagen, dass ich den XP bisher kaum benutzt hab und Ruby nicht kenne aber gerade weil Ruby-Syntax ja tatsächlich als Hochsprache benutzt wird, müsste das doch aufs gleiche rauslaufen ob ichs extern hab oder intern? (Das is tatsächlich von meiner Seite eine Frage)
Zitat
Wenn man Spiele machen will, dann eher eingeschränkte Spiele wie Mühle, Dame oder sowas.
...
Hast du da generell Erfahrung? Ich selbst hab mich nie groß mit beschäftigt, Mühle seh ich machbar aber auch für Dame bräuchte es doch schon so einiges um die KI auch nur einigermaßen wettbewerbstauglich zu machen, oder? (gehen wir davon aus, dass wir uns nicht in einem Maker befinden sondern in einer aktuellen Hochsprache)
Zitat von Multi-Master1988
Jawohl ich spiel auch bei unserem Ortsansässigen Schachklub bei kleineren Turnieren mit.
...
Ah, das is keine verkehrte Basis. Da fallen dann auch die 3 Milliarden Möglichkeiten weg - ich spiel zwar wie gesagt selber kein Schach aber in Schulzeiten hab ich zwei Profis beim Spiel zugesehen und so wie ich das sehe, hats ja nur ne handvoll sinnvoller Eröffnungen oder man ist tot.
Du wirst auch diese Bewertungen kennen, Bauer = 1, Turm = 5, Dame = 9 usw, die für einen Profi zwar nur Anhaltspunkte sind, aber gerade für einen Computer ideal sein dürften.
Wie schon genug Leute gesagt haben, du wirst keine Schach-KI hinbekommen aber ich finds trotzdem sinnvoll für dich, dich damit zu beschäftigen, das verbessert deinen Umgang mit Algorithmen.
Dementsprechend hab ich auch die Bewertungen gebracht - ein Algorithmus für sowas wie Schach würde die Situation wahrscheinlich tatsächlich recht momentan betrachten, wobei er niemals alle Möglichkeiten berechnen würde - er würde genau wie ein Mensch kurzfristige Ziele setzen. Opfere ich jetzt diese und jene Figur um dort eine Schneise zu schlagen, die meinem Turm erlaubt, direkt ins Feindesland zu ziehen und alles mögliche zu bedrohen?
Er würde nur eine geringe Zahl solcher Taktiken nehmen und einige essentielle Züge berechnen. Bewertungen sind da dann das A und O, mit dem Array wurds ja weiter oben schon angesprochen, der Computer würde die wahrscheinlichste Stellung nach den kurzfristigen Taktiken analysieren und der Gesamtsituation einen Wert zuweisen, eben eine Bewertung anstellen.
So stell ich mir das jedenfalls vor, das wär mein intuitiver Ansatz. Denk ein bisserl drüber nach, dann merkst du, wie ungeheuerlich schon bei diesem Ansatz das wäre, was der KI gefüttert werden müsste - du müsstest ganze Bücher "Wie spiele ich Schach" in Code umsetzen mit dieser und jener Extraklausel, selbst wenn das Ding nur mit Leuten, die von Schach grad mal die Regeln kennen, mithalten können soll
Zitat von Cherry
Und wenn der Power Patch an sich zu langsam ist, kannst du immernoch in C++ eine DLL schreiben und die vom Power Patch aus aufrufen.
...
Das interessiert mich an der Stelle dann doch - wie ist so eine DLL aufgebaut? Einfach im Prinzip eine .c-Datei? Wie werden die Variablen ausgetauscht? Schnappt sich das Programm einfach Variablen, die die RPG_RT in den Kurzspeicher geschrieben hat oder wie?
--
class Dog { //(...)
boolean getBuddha() { throw NullPointerException; } }
Spielt Hero-Chan!
Das interessiert mich an der Stelle dann doch - wie ist so eine DLL aufgebaut? Einfach im Prinzip eine .c-Datei? Wie werden die Variablen ausgetauscht? Schnappt sich das Programm einfach Variablen, die die RPG_RT in den Kurzspeicher geschrieben hat oder wie?
...
Generell gilt für eine DLL dass man Funktionen hat, die bestimmte Rückgabewerte haben. Die Funktionen werden also vom Programm in der DLL ausgerufen und von ihr ausgeführt, die DLL gibt dann einen Wert zurück, falls die Funktion kein void ist.
So würde beispielsweise in einer Harmony DLL der Befehl PlaySound aussehen, wenn es der RPG_RT einfach nur sagt dass es geklappt hat(return 1(true)), aber nichts gemacht hat.
Wie man jetzt die Funktionen einer DLL aufruft hängt ganz von der Programmiersprache des Programms ab.
Das war jetzt ein ganz simples Beispiel. Das Teil lässt sich so natürlich nicht als DLL kompilieren, erklärt aber das wesentliche Prinzip.
Über Google findet man noch viele weitere nützliche Infos.
Das interessiert mich an der Stelle dann doch - wie ist so eine DLL aufgebaut? Einfach im Prinzip eine .c-Datei? Wie werden die Variablen ausgetauscht? Schnappt sich das Programm einfach Variablen, die die RPG_RT in den Kurzspeicher geschrieben hat oder wie?
...
Du schreibst ein Power-Patch-Plugin in irgendeiner Sprache, wie etwa C++. Eine Anleitung ist beim Power Patch dabei. Da stellst du dann Funktionen bereit, die durch den Power Patch aufgerufen werden können. Dabei kannst du beliebig viele Werte als Parameter entgegennehmen und auch beliebig viele zurückgeben (im Gegensatz zu den meisten Sprachen erlaubt Lua - die Skriptsprache die im PP verwendet wird - mehr als einen Rückgabewert). Außerdem kannst du aus deiner Funktion heraus die Powerpatch-Funktionen GetVar und SetVar aufrufen, mit denen du Variablen und Switches lesen und ändern kannst.
Zeph macht auf dieser Basis ein AKS, weil die KI dadurch einfacher einzubauen ist als wenn alles mit Eventcode wäre, außerdem wird kompilierter Code natürlich schneller ausgeführt als interpretierter Eventcode.
mfG Cherry
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!