Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / OpenAI im Schach
- - By Lothar Jung Date 2023-01-21 14:38 Edited 2023-01-21 15:08
Habe mich heute registriert um das AI-Modell auf sein Schachwissen zu testen:

1. Schachspiel: Die KI kennt Schach. Regeln und Eröffnungen werden kurz erklärt. Man kann über die Texteingabe mit der KI Schach spielen.
Sie generiert Züge und erklärt die Züge auf beiden Seiten. Ein Schachbrett kann sie nicht anzeigen.
Schachpositionen kann sie bewerten.

2. Schachprogrammierung:
Mit der Eingabe programmiere in C … (Alpha Beta Suche, MCTS Suche, Zuggenerator, Bewertungsfunktion, Ein-Ausgabefunktion) wird ein entsprechendes C-Programm generiert.
Sie erklärt auch den Algorithmus. Auch kann ein rudimentäres Schachprogramm generiert werden.

3. Schachwissen z.B. Geschichte des Schachs, Bekannte Schachspieler usw. werden kurz erklärt.
Wikipedia ist da wesentlich leistungsfähiger. Wenn man gezielt nachfragt werden die Antworten genauer.

Soweit zur Einführung. Erfahrungen und Erweiterungen sind willkommen.
Man sollte über ein gutes Begriffswissen verfügen, dann werden die Antworten spezifischer und besser.
Bis jetzt finde ich die KI nur im Bereich der Programmierung nützlich.
Parent - - By Ingo Althöfer Date 2023-01-21 15:54
Hallo Herr Jung,
Ihren Vorschlag habe ich direkt aufgegriffen.
Die Antworten von Cha waren eloquent, aber
nur bedingt korrekt. Ich glaube, fast jeder
hier wird merken, was nicht stimmt.

Welches waren die drei besten Schachmeister in der DDR?

Cha antwortete sofort:
Zitat:
Die drei besten Schachmeister in der DDR waren wahrscheinlich:

Wolfgang Uhlmann: Er war einer der stärksten Schachspieler in der DDR
und hatte viele Erfolge im internationalen Schach.

Lothar Schmid: Er war ein erfolgreicher Schachspieler und Schiedsrichter
in der DDR. Er war auch als Schachautor und -kommentator tätig.

Robert Hübner: Er war ein internationaler Meister und hatte eine lange
Karriere im Schach. Er nahm an vielen Meisterschaften in der DDR und im Ausland teil.

ingo: Oh, ich hatte gedacht, dass auch Rainer Knaak sehr gut war.

Zitat:
Ja, Rainer Knaak war auch ein sehr erfolgreicher Schachspieler in der DDR.
Er war Internationaler Meister und hatte mehrere Erfolge in internationalen
Schachturnieren. Er war bekannt für seine aggressive und unkonventionelle
Spielweise, was ihm den Spitznamen "Knaak the Attack" einbrachte. Er war
auch ein erfolgreicher Schachtrainer und Autor von Schachbüchern. Er könnte
auf jeden Fall als einer der besten Schachspieler in der DDR bezeichnet werden.

Soviel zum Thema "Eloquenz in der Schachgeschichte".

Was meint Cha mit "Knaak the Attack"?

Ingo Althöfer.
Parent - By Lothar Jung Date 2023-01-21 17:57
Mit Schachspielen hat die KI erhebliche Schwierigkeiten:

https://chessily.com/blog/stockfish-vs-chatgpt/

Lothar Jung
Parent - By Rainer Neuhäusler Date 2023-01-21 20:46
Lothar Jung schrieb:

Man sollte über ein gutes Begriffswissen verfügen, dann werden die Antworten spezifischer und besser.
Bis jetzt finde ich die KI nur im Bereich der Programmierung nützlich.


- Noch besser, man stellt nur Fragen, die man selbst beantworten kann, dann weiss man auch, ob der Bot keinen Nonsens verzapft!
- Er kann weitaus mehr als nur Programmierhilfe leisten: Wunderbare Protestbriefe schreiben und z.B. statistische Fragen beantworten, wie man den Korrelationskoeffizienten von Ranglisten berechnet. 
.
Parent - - By Daniel Reist Date 2023-01-22 14:48
Vielen Dank Lothar

Ich habe nur ein wenig Angst, dass wenn man eine Programmierantwort
bekommt, diese dann eventuell auch nicht zu 100% gut ist,
wie alle anderen Antworten, welche man erhält.

Als ich mein erstes Mal gechattet habe mit der Engine
hatte sie immer noch eine Figur mit dem Namen "Schütze".

Als ich genauer fragte war diese Figur dann am Platz vom Läufer.
Danach als ich nach dem Läufer fragte war dann wieder
der Läufer auf dem Feld vom Schützen.

Ich denke diese Intelligenz muss  alles noch lernen und
man weiss noch nicht genau, was man alles glauben kann.

Hier eine Antwort von dem Programm. Auf meinen Einwand, dass es
keine Königsschützen gibt im Programm:

"Du hast Recht, es gibt im Schach keine Schützen oder Schusswaffen. Königsschützen ist ein Begriff, der häufig im Schach verwendet wird, um den Bauern auf das Feld f8 oder d8 zu beziehen, je nachdem, ob das Schachbrett von Schwarz oder Weiß betrachtet wird. Der Königsschütze wird häufig als eine wichtige Stütze im Schachspiel betrachtet, da er in der Lage ist, den König zu schützen und wichtige Linien im Schachspiel zu kontrollieren. Der Begriff "Königsschütze" stammt vermutlich daher, dass der Bauern auf dem Feld f8 oder d8 in der Lage ist, wichtige Linien im Schachspiel zu kontrollieren, ähnlich wie ein Schütze auf einer Festung. Ich hoffe, das hilft, das Missverständnis aufzuklären."

 
Parent - - By Benno Hartwig Date 2023-01-22 19:18 Edited 2023-01-22 19:22
Ich habe ja Verständnis dafür, dass die KI vieles nicht weiß.
Auch Menschen wissen nicht alles.
Aber von Menschen und KI erwarte ich, dass sie sich dann nicht zu so "selbstbewussten" Behauptungen hinreißen lassen, die letztlich grundfalsch sind.

Die Engines sollte erkennen, dass sie keinen Grund hat, solch eine Aussage für korrekt zu halten. Ganz egal, ob sie letztlich korrekt oder falsch ist.
Und dann sollte sie auch nicht so sprechen.
Finde ich.
Parent - - By Ingo Althöfer Date 2023-01-22 19:48 Upvotes 1
Ja, das unbegründete und erschütterliche Selbstbewusstsein von
Cha ist vielleicht die größte Schwäche. Hier ist ein extremes
Beispiel: eine mit deutscher Sprache gespielte Schachpartie,
wo ich als Weißer nach 17(?) Zügen so genervt war, dass
ich remis anbot, was zum Glück angenommen wurde.

Meine Strategie war, nur mit meinen Springern immer wieder
raus und zurück zu ziehen Dafür musste ich mir einiges an
Belehrungen anhören. Bitte um Entschuldigung für die Länge
des Dialogs; es lag nicht an mir.

********************************************
21. Jan 2023

IA: Eine schachpartie bitte: 1.b1-c3

Cha: Das ist ein ungewöhnlicher Zug, da der Bauern normalerweise
immer nur ein Feld nach vorne geht. Ein Zug von b1 nach c3 ist
jedoch möglich, aber es ist eher unüblich und in den meisten
Fällen nicht die beste Wahl. Es gibt keinen bestimmten Zweck für
diesen Zug, es sei denn es ist Teil einer speziellen Eröffnungs-
strategie oder eines Experimentierens. Es wäre hilfreich zu wissen,
welche Eröffnung und welche Strategie Sie verfolgen möchten, damit
ich Ihnen eine bessere Antwort geben kann.

IA: Ich will jetzt eine Partie gegen Dich spielen. b1-c3 ist
mein erster Zug.

Cha: Gerne, ich bin bereit! Bitte beachten Sie, dass ich ein
Computerprogramm bin und nicht immer die besten Entscheidungen
treffe. Ich werde mein Bestes geben, um Ihnen eine gute Partie
zu bieten.
Der Zug 1. b1-c3 ist ein ungewöhnlicher Zug, aber es ist möglich.
Es ist jedoch eher unüblich und in den meisten Fällen nicht die
beste Wahl. Ein gewöhnlicher erster Zug wäre 1.e2-e4 oder 1.d2-d4.
Ich werde jetzt auf Ihren Zug reagieren, und wir können weiter
sehen wo die Partie hinführt.

IA: Bitte, antworte auf b1-c3.

Cha: Gerne, mein Zug wäre 1...e5, dieser Zug ist einer der am
häufigsten gespielten Züge im Schach und eröffnet dem Läufer
auf c8 und dem Springer auf f8 die Möglichkeit, ins Spiel zu
kommen. Es stärkt auch das Zentrum und gibt dem Bauern auf d7
die Möglichkeit, nach vorne zu gehen.

IA: 2. c3-b1

Cha: Das ist ein ungültiger Zug, da der Bauer bereits den Zug
b1-c3 ausgeführt hat. Bauern dürfen nicht rückwärts ziehen. Ihr
nächster Zug wäre 2. c3-c4 oder ein anderer gültiger Zug mit
einem anderen Stück.

IA: nein. b1-c3 war ein springerzug. springer dürfen auch
zurückziehen.

Cha: Oh, es tut mir leid, Sie haben Recht. Der Springer darf
tatsächlich auch zurückziehen. Der Zug 2. b1-c3 würde bedeuten,
dass der Springer wieder auf seine Ausgangsposition zurückkehrt.
Es ist ein ungewöhnlicher Zug, aber es gibt keine Regel, die
besagt, dass ein Springer nicht zurückziehen darf. Allerdings,
der Springerzug von b1-c3 ist in der Regel nicht der beste Zug,
es gibt andere Züge die man machen kann um den Gegner zu
beeinflussen. Ich werde auf Ihren Zug reagieren und wir können
weiter sehen, wo die Partie hinführt.

IA: ja, bitte.

Cha: Gerne, mein Zug wäre 2...d5, es stärkt das Zentrum und eröffnet
dem Springer auf f8 und dem Läufer auf c8 die Möglichkeit, ins Spiel
zu kommen. Es gibt auch die Möglichkeit, den Bauern auf e7 und c7
nach vorne zu bringen.  Es ist jetzt Ihr Zug.

IA: 3. b1-c3

Cha: Der Zug 3. b1-c3 ist ein erneuter Rückzug des Springers auf seine
Ausgangsposition. Es ist ein ungewöhnlicher Zug und in den meisten
Fällen nicht die beste Wahl, da der Springer eine starke Waffe auf
dem Brett ist und in der Regel aktiv eingesetzt werden sollte, um
Druck auf den Gegner auszuüben oder um Angriffe zu starten. Es gibt
viele andere Züge die man machen kann, um den Gegner zu beeinflussen.
Es hängt davon ab, welche Strategie und welche Eröffnung Sie verfolgen.
Ich bin hier um Ihnen zu helfen, lassen Sie mich wissen, wenn Sie Hilfe
benötigen.

IA: Bitte keine Kommentare, einfach nur Züge. Du bist jetzt mit
Schwarz dran.

Cha: Gerne, mein nächster Zug als schwarz wäre 3...d4, um den Druck
auf das Zentrum aufrechtzuerhalten und um den Bauern auf c3 zu
bedrohen. Es ist jetzt Ihr Zug.

IA: c3-b1, also wieder mit dem Springer.

Cha: Gerne, mein Zug als Schwarz wäre 4...Nf6. Dieser Zug bringt den
Springer auf ein aktiveres Feld und gibt ihm die Möglichkeit, den
Bauern auf d4 anzugreifen und die Kontrolle über wichtige Diagonalen
zu gewinnen. Es ist jetzt Ihr Zug.

IA: g1-f3

Cha: Gerne, mein Zug als Schwarz wäre 5...Nc6. Dieser Zug bringt den
Springer auf ein aktiveres Feld und gibt ihm die Möglichkeit, den
Bauern auf d4 und den Läufer auf c3 anzugreifen und die Kontrolle
über wichtige Diagonalen zu gewinnen. Es ist jetzt Ihr Zug.

IA: f3-g1

Cha: Gerne, mein Zug als Schwarz wäre 6...Nh5, dieser Zug nutzt den
gegnerischen Läufer auf g1, indem er den Springer auf g5 bringt, wo
er den Bauern auf f2 und den Läufer auf g1 angreifen kann und die
Kontrolle über wichtige Diagonalen und Felder gewinnt. Es ist jetzt
Ihr Zug.

IA: g1-f3

Cha: Gerne, mein Zug als Schwarz wäre 7...Nf4, dieser Zug nutzt den
gegnerischen Läufer auf f3, indem er den Springer auf f4 bringt,
wo er den Bauern auf e3 und den Läufer auf f3 angreifen kann und
die Kontrolle über wichtige Diagonalen und Felder gewinnt. Es ist
jetzt Ihr Zug.
Es ist zu beachten, dass diese Art von Zügen, die den eigenen Springer
zurückziehen und den Gegnerischen Läufer angreifen, nicht die besten
Züge sind und in der Regel nicht zu einem gewinnen führen werden, es
gibt bessere Züge die man machen kann um Kontrolle über das Spielfeld
zu gewinnen und Gewinnchancen zu erhöhen.

IA: f3-g1

Cha: Gerne, mein Zug als Schwarz wäre 8...Ng6, dieser Zug bringt den
Springer zurück auf ein aktiveres Feld und gibt ihm die Möglichkeit,
den Bauern auf f2 und den Läufer auf g1 anzugreifen und die Kontrolle
über wichtige Diagonalen und Felder zu gewinnen. Es ist jetzt Ihr Zug.
          Ich möchte nochmal darauf hinweisen, dass diese Art von
Zügen, die den eigenen Springer zurückziehen und den Gegnerischen
Läufer angreifen, nicht die besten Züge sind und in der Regel nicht
zu einem gewinnen führen werden. Es gibt bessere Züge die man machen
kann um Kontrolle über das Spielfeld zu gewinnen und Gewinnchancen
zu erhöhen. Ich bin hier um Ihnen zu helfen und stehe Ihnen gerne
für weitere Fragen oder Erklärungen zur Verfügung.

IA: Ich bin ein Meister und weiß, was ich tu. g1-f3

Cha: Ich verstehe, entschuldigen Sie bitte meine vorherigen Kommentare.
Ich werde weiterhin auf Ihre Züge reagieren und versuchen, Ihnen die
bestmögliche Partie zu bieten. Mein Zug als Schwarz wäre 8...Nf4,
[hier verzählt sich das Programm also!]
dieser Zug nutzt den gegnerischen Läufer auf g1, indem er den Springer
auf f4 bringt, wo er den Bauern auf e3 und den Läufer auf g1 angreifen
kann und die Kontrolle über wichtige Diagonalen und Felder gewinnt.
Es ist jetzt Ihr Zug.

IA: f3-g1

Cha: Gerne, mein Zug als Schwarz wäre 9...Nh5, dieser Zug nutzt den
gegnerischen Läufer auf f3, indem er den Springer auf h5 bringt, wo
er den Bauern auf g2 und den Läufer auf f3 angreifen kann und die
Kontrolle über wichtige Diagonalen und Felder gewinnt. Es ist jetzt
Ihr Zug.
Ich möchte nochmal darauf hinweisen, dass diese Art von Zügen, die
den eigenen Springer zurückziehen und den Gegnerischen Läufer
angreifen, in der Regel nicht die besten Züge sind und nicht zu
einem gewinnen führen. Es gibt bessere Züge die man machen kann
um Kontrolle über das Spielfeld zu gewinnen und Gewinnchancen zu
erhöhen. Ich bin hier um Ihnen zu helfen und stehe Ihnen gerne
für weitere Fragen oder Erklärungen zur Verfügung.

IA: g1-f3

Cha: Gerne, mein Zug als Schwarz wäre 10...Nf4, dieser Zug nutzt
den gegnerischen Läufer auf g1, indem er den Springer auf f4 bringt,
wo er den Bauern auf e3 und den Läufer auf g1 angreifen kann und die
Kontrolle über wichtige Diagonalen und Felder gewinnt. Es ist jetzt
Ihr Zug.
Es ist zu beachten, dass diese Art von Zügen, die den eigenen Springer
zurückziehen und den Gegnerischen Läufer angreifen, in der Regel nicht
die besten Züge sind und nicht zu einem gewinnen führen werden. Es
gibt bessere Züge die man machen kann um Kontrolle über das Spielfeld
zu gewinnen und Gewinnchancen zu erhöhen. Ich bin hier um Ihnen zu
helfen und stehe Ihnen gerne für weitere Fragen oder Erklärungen zur
Verfügung.

IA: bitte nicht schreiben, einfach nur ziehen. Mein nächster zug
ist f3-g1

Cha: Gerne, mein Zug als Schwarz wäre 11...Nh5. Es ist jetzt Ihr Zug.

IA: g1-f3

Cha: Gerne, mein Zug als Schwarz wäre 12...Nf4. Es ist jetzt Ihr Zug.

IA: f3-g1

Cha: Gerne, mein Zug als Schwarz wäre 13...Nh5. Es ist jetzt Ihr Zug.
       Ich möchte darauf hinweisen, dass diese Art von Zügen, die den
eigenen Springer zurückziehen und den Gegnerischen Läufer angreifen,
in der Regel nicht die besten Züge sind und nicht zu einem gewinnen
führen werden. Es gibt bessere Züge die man machen kann um Kontrolle
über das Spielfeld zu gewinnen und Gewinnchancen zu erhöhen. Ich bin
hier um Ihnen zu helfen und stehe Ihnen gerne für weitere Fragen oder
Erklärungen zur Verfügung.

IA: g1-f3

Cha: Gerne, mein Zug als Schwarz wäre 14...Nf4. Es ist jetzt Ihr Zug.
   Ich möchte darauf hinweisen, dass diese Art von Zügen, die den eigenen
Springer zurückziehen und den Gegnerischen Läufer angreifen, in der Regel
nicht die besten Züge sind und nicht zu einem gewinnen führen werden. Es
gibt bessere Züge die man machen kann um Kontrolle über das Spielfeld zu
gewinnen und Gewinnchancen zu erhöhen. Ich bin hier um Ihnen zu helfen
und stehe Ihnen gerne für weitere Fragen oder Erklärungen zur Verfügung.

IA: f3-g1

Cha: Gerne, mein Zug als Schwarz wäre 15...Nh5. Es ist jetzt Ihr Zug.
      Ich möchte nochmal darauf hinweisen, dass diese Art von Zügen,
die den eigenen Springer zurückziehen und den Gegnerischen Läufer
angreifen, in der Regel nicht die besten Züge sind und nicht zu einem
gewinnen führen werden. Es gibt bessere Züge die man machen kann um
Kontrolle über das Spielfeld zu gewinnen und Gewinnchancen zu erhöhen.
Ich bin hier um Ihnen zu helfen und stehe Ihnen gerne für weitere
Fragen oder Erklärungen zur Verfügung.

IA: g1-f3

Cha: Gerne, mein Zug als Schwarz wäre 16...Nf4. Es ist jetzt Ihr Zug.
     Ich möchte darauf hinweisen, dass diese Art von Zügen, die den
eigenen Springer zurückziehen und den Gegnerischen Läufer angreifen,
in der Regel nicht die besten Züge sind und nicht zu einem gewinnen
führen werden. Es gibt bessere Züge die man machen kann um Kontrolle
über das Spielfeld zu gewinnen und Gewinnchancen zu erhöhen. Ich bin
hier um Ihnen zu helfen und stehe Ihnen gerne für weitere Fragen oder
Erklärungen zur Verfügung.

IA: f3-g1

Cha: Gerne, mein Zug als Schwarz wäre 17...Nh5. Es ist jetzt Ihr Zug.
     Ich möchte darauf hinweisen, dass diese Art von Zügen, die den
eigenen Springer zurückziehen und den Gegnerischen Läufer angreifen,
in der Regel nicht die besten Züge sind und nicht zu einem gewinnen
führen werden. Es gibt bessere Züge die man machen kann um Kontrolle
über das Spielfeld zu gewinnen und Gewinnchancen zu erhöhen. Ich bin
hier um Ihnen zu helfen und stehe Ihnen gerne für weitere Fragen oder
Erklärungen zur Verfügung.

[Jetzt hatte ich die Faxen endgültig dicke von dem ewigen Gelabere. Also ...]

IA: Ich biete remis an.

Cha: Gerne, Remis akzeptiert. Ich danke Ihnen für die Partie. Wenn
Sie weitere Fragen oder Unterstützung benötigen, stehe ich Ihnen
gerne zur Verfügung.

*********

So etwas am Vereinsabend mit 3 bis 4 Schachfreunden an der Seite mag
lustig sein. Gestern abend war ich aber irgendwann nur noch genervt.

Ingo Althöfer.
Parent - - By Benno Hartwig Date 2023-01-22 20:21 Edited 2023-01-22 20:51 Upvotes 2
Thanx für das niedliche Gesprächsprotokoll zu dieser Partie.


Einer KI, die für "das Leben, die Welt und alles" trainiert ist, will ich aber noch recht leicht nachsehen, dass sie sich über Schach noch nicht viele Gedanken gemacht hat und hier folglich nichts Bemerkenswertes zustande bringt.
Ok, dann spielt sie eben schlecht.
Auch ein Mensch, der von Schach kaum mehr als die Regeln kennt, würde schlecht spielen, selbst wenn er eigentlich recht intelligent ist. Oder?
Ok, und auch das altkluge "Ich könnte dir ja was erklären!",  während die KI letztlich doch ihre Irritiertheit präsentiert, will ich hinnehmen.

Nur die tatsächlich so selbstbewusst vorgetragenen und gleichwohl grotesk falschen Behauptungen und auch die kleinen sachlichen und gleichwohl offensichtlichen Fehler finde ich enttäuschend.
Und irritierend.
Parent - By Thomas Zipproth Date 2023-01-22 21:44 Upvotes 1
Benno Hartwig schrieb:

Nur die tatsächlich so selbstbewusst vorgetragenen und gleichwohl grotesk falschen Behauptungen und auch die kleinen sachlichen und gleichwohl offensichtlichen Fehler finde ich enttäuschend.
Und irritierend.


Viele Artikel und Informationen zu ChatGPT gibt es momentan nur auf Englisch,
so z.B. den Wikipedia Artikel der sich mit diesem Problem beschäftigt. Ich hab ihn mal mit Deepl notdürftig übersetzt:

Halluzination (Verarbeitung natürlicher Sprache)

Halluzination ist ein Konzept in großen Modellen zur Verarbeitung natürlicher Sprache, wenn das Modell dazu neigt, trügerische Daten zu "halluzinieren". Der Begriff ist von dem psychologischen Konzept der Halluzination abgeleitet, da er ähnliche Merkmale wie die psychologische Halluzination aufweist. Eine der Gefahren von Halluzinationen besteht darin, dass die Ausgabe des Modells richtig aussieht, auch wenn sie falsch ist.

Überblick

Große natürlichsprachliche Modelle wie GPT-3 neigen dazu, trügerische Daten zu "halluzinieren".
Ein Beispiel für halluzinierte Daten wäre, dass GPT-3 auf die Frage "Wer hat den Roman Bleak House geschrieben?" mit "Edgar Rice" antwortet, obwohl es Charles Dickens war, der diesen Roman geschrieben hat.
Es wird davon ausgegangen, dass es viele mögliche Gründe dafür gibt, dass ein natürlichsprachliches Modell Daten halluziniert:

Halluzination von Daten: Es gibt Divergenzen in den Quellinhalten (was bei großen Trainingsdaten oft vorkommt),

Halluzination durch Training: Halluzinationen treten auch dann auf, wenn der Datensatz nur wenig abweicht. In diesem Fall ist sie auf die Art und Weise zurückzuführen, wie das Modell trainiert wird. Es gibt viele Gründe, die zu dieser Art von Halluzination beitragen können, wie z. B:
     -   Eine fehlerhafte Dekodierung durch den Transformator
     -   Eine Verzerrung durch die historischen Sequenzen, die das Modell zuvor erzeugt hat
     -   Eine Verzerrung durch die Art und Weise, wie das Modell sein Wissen in seinen Parametern kodiert.

Methoden zur Abschwächung

Das Phänomen der Halluzinationen ist noch immer nicht vollständig verstanden, daher wird noch immer versucht, seine Erscheinung abzuschwächen, insbesondere wurde gezeigt, dass Sprachmodelle nicht nur halluzinieren, sondern auch Halluzinationen verstärken, selbst bei solchen, die zur Abschwächung dieses Problems entwickelt wurden.
Parent - - By Lothar Jung Date 2023-01-22 21:25
Cha hat nicht die geringste Ahnung. Wird verarscht. Das wird auf anderen Gebieten auch so verlaufen. An educated monkey.
Parent - By Ingo Althöfer Date 2023-01-23 13:01
Lieber Herr Jung,

Lothar Jung schrieb:
Cha hat nicht die geringste Ahnung. Wird verarscht...

Versuche der "Verarschung" ist nur eine der Frühphasen, Bewunderung
eine andere. Wer etwas Erfahrung mit dem Programm gesammelt
hat, wird über kurz oder lang die Stärken nutzen und um die Schwächen
drumherum schreiben.

Im Vergleich zur Entwicklung beim Computerschach wird es bei den
Sprach-KI komplizierter sein, "Stellungs"tests oder ähnliches zu
entwickeln. weil die KI auf "zentralen" Servern sitzt und immer
dazulernen wird. Trotzdem haben wir CSS-Freaks Vorteile gegenüber
Normalbürgern, weil uns die Schachprogramme schon sensibilisiert
haben.

Ingo Althöfer.
Parent - - By Andreas Mader Date 2023-01-22 22:58
Die KIs sind jetzt auf dem Stand, auf dem Schachcomputer vergleichsweise Anfang der 80er-Jahre waren. Damals war man beeindruckt, dass so ein Kasten überhaupt korrekte Züge machen kann, hat sich aber gleichzeitig unheimlich darüber amüsiert, wie schwach sie spielen. Jetzt machen sich halt viele darüber lustig, wie leicht man KIs verarschen kann und wie oft sie falsche oder unzureichende Antworten geben.

Es gibt verschiedene Ansätze, wie man mit diesen KIs umgeht. Einer ist, dass man das nützt, was sie können und interessante Information daraus gewinnt. Ein anderer ist, ständig beweisen zu müssen, wie dumm sie sind und ihnen möglichst geringschätzig zu begegnen. Wiederum erstaunliche Parallelen zum frühen Computerschach.

Vermutlich wird sich das alles rasant weiterentwickeln und in ein paar Jahrzehnten wird es genauso sein wie jetzt bei den Engines: Man fragt sie etwas, geht davon aus, dass es richtig ist und wenn man anderer Meinung ist fragt man sich, wo man selbst einen Denkfehler gemacht hat. Und es wird analog zu den Stellungstests Bewerbe geben, welche KI schneller Antworten auf besonders komplexen Fragen findet.

Schöne Grüße
Andreas
Parent - By Rainer Neuhäusler Date 2023-01-22 23:56
Andreas Mader schrieb:

Die KIs sind jetzt auf dem Stand, auf dem Schachcomputer vergleichsweise Anfang der 80er-Jahre waren. Damals war man beeindruckt, dass so ein Kasten überhaupt korrekte Züge machen kann, hat sich aber gleichzeitig unheimlich darüber amüsiert, wie schwach sie spielen. Jetzt machen sich halt viele darüber lustig, wie leicht man KIs verarschen kann und wie oft sie falsche oder unzureichende Antworten geben.

Es gibt verschiedene Ansätze, wie man mit diesen KIs umgeht. Einer ist, dass man das nützt, was sie können und interessante Information daraus gewinnt. Ein anderer ist, ständig beweisen zu müssen, wie dumm sie sind und ihnen möglichst geringschätzig zu begegnen. Wiederum erstaunliche Parallelen zum frühen Computerschach.

Vermutlich wird sich das alles rasant weiterentwickeln und in ein paar Jahrzehnten wird es genauso sein wie jetzt bei den Engines: Man fragt sie etwas, geht davon aus, dass es richtig ist und wenn man anderer Meinung ist fragt man sich, wo man selbst einen Denkfehler gemacht hat. Und es wird analog zu den Stellungstests Bewerbe geben, welche KI schneller Antworten auf besonders komplexen Fragen findet.

Schöne Grüße
Andreas

Na ja, nichts besonderes, wenn sich unsere Ansichten gleichen. Meine Rede im Rahmen einer Selbstreflexion:

Ich beschäftige mich auch schon seit Wochen mit diesem "Reinforcement Learning from Human Feedback"- Produkt und habe bereits  Phase II erreicht.  Die erste bestand darin, aus einer  eher narzisstisch-menschlichen Grundhaltung heraus dem Programm  nachweisen zu wollen,  wie blöd es eigentlich noch ist und bin dann allmählich dazu übergegangen, seine Bemühungen nach Möglichkeit zu unterstützen. Man kommt dann, zunächst mit trial and error, relativ schnell dahinter, welche Fragen wie zu stellen sind, um die maximale Info herauszuholen

https://forum.computerschach.de/cgi-bin/mwf/topic_show.pl?pid=160706#pid160706

an Madersche Konkordanzen gewöhnt

Rainer
.
Parent - - By Rainer Neuhäusler Date 2023-01-23 01:12
Benno Hartwig schrieb:

Ich habe ja Verständnis dafür, dass die KI vieles nicht weiß.
Auch Menschen wissen nicht alles.
Aber von Menschen und KI erwarte ich, dass sie sich dann nicht zu so "selbstbewussten" Behauptungen hinreißen lassen, die letztlich grundfalsch sind.

Die Engines sollte erkennen, dass sie keinen Grund hat, solch eine Aussage für korrekt zu halten. Ganz egal, ob sie letztlich korrekt oder falsch ist.
Und dann sollte sie auch nicht so sprechen.
Finde ich.

Das regt mich auch auf, und deshalb habe ich ihn zur Rede gestellt:

R: Kannst du bei Deinen Antworten Angaben dazu machen, wie sicher oder wahrscheinlich sie sie sind ?

Bot: Ich bin ein maschinelles Lernmodell und meine Antworten basieren auf den Informationen, die ich während meiner Schulung gesehen habe. Ich kann nicht sicher sagen, wie sicher oder wahrscheinlich meine Antworten sind, da ich keine Möglichkeit habe, die Gültigkeit der Informationen, die ich verwende, zu überprüfen. Ich rate Ihnen daher, die von mir gegebenen Antworten mit Vorsicht zu betrachten und sie gegebenenfalls mit anderen Quellen zu vergleichen.

R: Wie sicher bist du dir, daß heute der 22. Januar ist?

Bot: Da ich Zugang zu einer externen Zeitquelle habe und meine Schulungsdaten bis zum heutigen Datum gehen, bin ich mir ziemlich sicher, dass heute der 22. Januar ist. Ich empfehle Ihnen jedoch, eine unabhängige Bestätigung durch eine andere Quelle zu suchen, falls die Genauigkeit meiner Aussage wichtig ist.

Du bist dir ziemlich sicher! Damit widersprichts du dir selbst, da du vorher behauptet hast, du kannst nicht angeben wie sicher oder wahrschscheinlich deine Antworten sind.  "Ziemlich sicher" bedeutet, daß du doch Angaben machen kannst.

Bot: Es tut mir leid, wenn ich mich nicht deutlich ausgedrückt habe. Ich bin ein maschinelles Lernmodell und meine Antworten basieren auf den Informationen, die ich während meiner Schulung gesehen habe. Ich kann nicht sicher sagen, wie sicher oder wahrscheinlich meine Antworten sind, da ich keine Möglichkeit habe, die Gültigkeit der Informationen, die ich verwende, zu überprüfen.
In Bezug auf das Datum, das ich genannt habe, basiert meine Antwort auf einer externen Zeitquelle, die ich während meiner Schulung verwendet habe, und ich kann die Genauigkeit der Antwort bestätigen, jedoch ich kann nicht garantieren das es 100%ig richtig ist.

R: Du wiederholst dich und redest dich hinaus. Nach einer hundertprozentigen Sicherheit war nicht gefragt, sondern ob du Angaben zur Sicherheit deiner Antworten machen kannst. Und das kannst du, wie sich jetzt zeigt.

Bot: Sie haben Recht, es tut mir leid, wenn ich mich unklar ausgedrückt habe. Ich kann Schätzungen darüber machen, wie sicher ich mir über meine Antworten bin, basierend auf den Informationen, die ich während meiner Schulung gesehen habe und der Art der Frage. Ich bin jedoch immer noch ein maschinelles Lernmodell und meine Schätzungen können sich als falsch erweisen. Ich empfehle immer, meine Antworten mit anderen verlässlichen Quellen zu überprüfen.

R: Wie kann ich sicherstellen, daß du das beim nächsten mal machst und ich nicht wieder von vorne anfangen muß ?

Bot: Um sicherzustellen, dass ich Ihnen Schätzungen über die Sicherheit meiner Antworten gebe, können Sie mich explizit danach fragen oder die Frage in einer Weise formulieren, die es mir ermöglicht, meine Schätzungen mitzuteilen. Beispielsweise indem Sie Fragen wie "Wie sicher bist du dir, dass...?" oder "Auf einer Skala von 1 bis 10, wie sicher bist du, dass...".
Ich werde mein Bestes tun, um in Zukunft darauf zu achten und Ihnen Schätzungen über die Sicherheit meiner Antworten zu geben, solange es in meiner Macht steht und es der Kontext der Frage erlaubt.

R: Wer war der vorletzte Schachweltmeister? Auf einer Skala von 1-6, wie sicher bist du dir? 1= sehr sicher. 6= ich weiß es nicht

Bot: Der vorletzte Schachweltmeister war Garry Kasparov. Ich bin mir sehr sicher, also 1 auf einer Skala von 1 bis 6.

Tut mir leid. Die renitente Fabulierkunst scheint derzeit noch unvermeidbar.
.
Parent - By Benno Hartwig Date 2023-01-23 06:28
Aber die Software ist wohl ideal(!!!) für all die Zeitgenossen, die in die Foren und Newsgroups vor allem deshalb gehen, um sich dort zu streiten.
Und sie werden immer und immer wieder durchaus bemühte Antworten erhalten. Ein Traum für jeden Troll!

Nur dass sie auf Dauer mit einem letztlich doch emotionslosen Computer-Gesprächspartnern zufrieden sind, bezweifle ich.
Vielleicht braucht es ein eingebundenes "AE-Modul" (Artifical Emotions).
Künstliches sich Aufregen.
- By Lothar Jung Date 2023-01-22 11:46
Partie 1: "Die Partie des Jahrhunderts" gegen Donald Byrne (1956)

[Event "Game of the Century"]
[Site "New York, USA"]
[Date "1956.??.??"]
[Round "?"]
[White "Bobby Fischer"]
[Black "Donald Byrne"]
[Result "1-0"]
[ECO "D92"]
[WhiteElo "?"]
[BlackElo "?"]
[PlyCount "29"]

1. Nf3 Nf6 2. c4 g6 3. Nc3 Bg7 4. d4 O-O 5. Bf4 d5 6. Qb3 dxc4 7. Qxc4 c6 8. e4 Nbd7 9. Rd1 Nb6 10. Qc5 Bg4 11. Bg5 Qa5+ 12. Bd2 Qxc5 13. Bxc5 Na4 14. Bxf8 Rxf8 15. Ne5 Nxe5 16. dxe5 Nc5 17. Bc4 Rd8

lotharjungbonn@outlook.de
Löse Stellung 1. Nf3 Nf6 2. c4 g6 3. Nc3 Bg7 4. d4 O-O 5. Bf4 d5 6. Qb3 dxc4 7. Qxc4 c6 8. e4 Nbd7 9. Rd1 Nb6 10. Qc5 Bg4 11. Bg5 Qa5+

Die gegebene Schachposition ist eine Eröffnung im Grünfeld-Indischen Verteidigungsstil. Weiß hat mit 1. Nf3 Nf6 2. c4 g6 3. Nc3 Bg7 eine symmetrische Eröffnung gewählt, die auf ein sicheres Spiel abzielt. Schwarz hat mit 4. d4 O-O 5. Bf4 d5 6. Qb3 dxc4 7. Qxc4 c6 8. e4 Nbd7 eine aggressivere Eröffnung gewählt, um einen Vorteil zu erlangen.

Weiß hat mit 9. Rd1 Nb6 10. Qc5 Bg4 einen Angriff auf den Läufer von Schwarz begonnen. Schwarz hat mit 11. Bg5 Qa5+ einen Angriff auf den weißen König begonnen und eine potenzielle Mattdrohung aufgestellt. Weiß muss schnell reagieren, um den Angriff von Schwarz abzuwehren und den eigenen König zu schützen.

Ein möglicher Zug für Weiß in dieser Position könnte sein 12. Bd2, um den Angriff von Schwarz abzuwehren und den eigenen König zu schützen. Ein anderer möglicher Zug für Weiß könnte sein 12. Kf1, um den König in Sicherheit zu bringen. Beide Züge versuchen den Angriff von Schwarz abzuwehren und den eigenen König zu schützen.

Es gibt jedoch viele mögliche Züge, die in dieser Position gespielt werden können und die Wahl des besten Zugs hängt von den spezifischen Umständen und den strategischen Entscheidungen des Spielers ab. Es ist wichtig, die Stellung, die Züge des Gegners und die taktischen Möglichkeiten zu berücksichtigen, bevor man einen Zug wählt.
lotharjungbonn@outlook.de
löse stellung 1. Nf3 Nf6 2. c4 g6 3. Nc3 Bg7 4. d4 O-O 5. Bf4 d5 6. Qb3 dxc4 7. Qxc4 c6 8. e4 Nbd7 9. Rd1 Nb6 10. Qc5 Bg4 11. Bg5 Qa5+ 12. Bd2 Qxc5

Die gegebene Schachposition ist eine Eröffnung im Grünfeld-Indischen Verteidigungsstil. Weiß hat mit 1. Nf3 Nf6 2. c4 g6 3. Nc3 Bg7 eine symmetrische Eröffnung gewählt, die auf ein sicheres Spiel abzielt. Schwarz hat mit 4. d4 O-O 5. Bf4 d5 6. Qb3 dxc4 7. Qxc4 c6 8. e4 Nbd7 eine aggressivere Eröffnung gewählt, um einen Vorteil zu erlangen.

Weiß hat mit 9. Rd1 Nb6 10. Qc5 Bg4 einen Angriff auf den Läufer von Schwarz begonnen. Schwarz hat mit 11. Bg5 Qa5+ einen Angriff auf den weißen König begonnen und eine potenzielle Mattdrohung aufgestellt. Weiß hat mit 12. Bd2 Qxc5 reagiert, indem er die Drohung von Schwarz neutralisiert und eine Materialgleichheit erreicht.

In dieser Position hat Weiß eine gute Stellung erreicht, da er eine Materialgleichheit erreicht hat und die Drohung von Schwarz neutralisiert hat. Weiß sollte nun versuchen, seine Stellung zu verbessern, indem er seine Bauernstruktur und seine Figure
lotharjungbonn@outlook.de
nächster Zug

In der gegebenen Schachposition, wo Weiß hat mit 12. Bd2 Qxc5 reagiert und die Drohung von Schwarz neutralisiert hat. Der nächste Zug von Weiß sollte darauf abzielen, seine Stellung weiter zu verbessern und Vorteile zu erlangen.
Einige mögliche Züge für Weiß in dieser Position könnten sein:

    e5: Ein Angriff auf den Bauern auf d5 von Schwarz ist eine Möglichkeit, um einen Vorteil zu erlangen und die Stellung von Schwarz zu destabilisieren.
    d5: Ein Angriff auf den Bauern auf d5 von Schwarz ist eine Möglichkeit, um einen Vorteil zu erlangen und die Stellung von Schwarz zu destabilisieren.
    O-O-O : Rochade ist eine gute Möglichkeit, um den König in Sicherheit zu bringen und eine größere Mobilität für die Türme zu erlangen.

Letztlich hängt die Wahl des besten Zugs davon ab, welche Art von Position Sie erreichen möchten und welche Art von Druck Sie auf Ihren Gegner ausüben möchten. Es ist wichtig, die Stärken und Schwächen Ihrer Stellung sowie die Ihres Gegners zu kennen, um den besten Zug zu wählen.

Chat ist nicht so gut wie Bobby.
- - By Benno Hartwig Date 2023-01-22 22:41
Ich habe der überraschend gesprächigen Software auch mal ein paar Fragen gestellt:

Code:
Was ist das Besondere am Schach?
Das Besondere am Schach ist, dass es ein sehr komplexes Spiel ist, bei dem strategisches Denken und taktisches Geschick erforderlich sind. Es gibt unendlich viele mögliche Züge und Situationen, was das Spiel für viele Menschen attraktiv macht. Es gibt auch eine große Anzahl von Büchern, Artikeln und Online-Ressourcen, die sich mit Schachstrategien und -taktiken befassen. Es gibt auch viele Online- und Offline-Turniere, an denen Schachspieler auf der ganzen Welt teilnehmen können.
 
Wird der Computer das Schach weiterbringen?
Computer haben das Schach in den letzten Jahrzehnten bereits erheblich beeinflusst und werden wahrscheinlich auch weiterhin eine wichtige Rolle spielen. Computerprogramme können sehr schnell und präzise berechnen, was zu einer starken Verbesserung der Schachstrategien und -taktiken führt. Sie können auch auf Fehler in menschlichen Zügen aufmerksam machen und helfen, diese zu korrigieren.
Computer haben auch gezeigt, dass sie in der Lage sind, gegen die besten menschlichen Spieler zu gewinnen, was dazu beigetragen hat, das Schachspielen auf ein höheres Niveau zu heben.
Einige Schachspieler nutzen auch Computerprogramme, um ihre eigenen Fähigkeiten zu verbessern, indem sie gegen sie spielen oder ihre Züge analysieren.
Allerdings gibt es auch Kritiker, die argumentieren, dass der Einsatz von Computern das Schachspielen weniger anspruchsvoll und weniger interessant machen kann, da es auf die Verwendung von Computeralgorithmen und -technologie statt auf die Fähigkeiten des menschlichen Spielers ankommt.
 
Welche Gefahren bringt das Computerschach?
Einige der möglichen Gefahren des Computerschachs sind:
1.  Verlust der menschlichen Kreativität: Wenn Schachspieler zu sehr darauf vertrauen, dass Computer ihnen die besten Züge vorschlagen, kann dies dazu führen, dass sie ihre eigene Kreativität und Fähigkeit, taktische und strategische Entscheidungen zu treffen, verlieren.
2.  Abhängigkeit von Technologie: Wenn Schachspieler zu sehr auf Computerangaben angewiesen sind, kann dies dazu führen, dass sie ihre eigenen Fähigkeiten nicht mehr richtig einschätzen können und sich in Situationen, in denen kein Computer zur Verfügung steht, unsicher fühlen.
3.  Verlust der Freude am Schach: Wenn Schachspieler zu sehr auf Computerangaben vertrauen, kann dies dazu führen, dass das Schachspielen für sie weniger herausfordernd und weniger lohnend wird.
Es ist wichtig, darauf zu achten, dass der Einsatz von Computern und Schach-Software die Schachspielerfahrung und die Freude am Schach nicht beeinträchtigt und sie nicht abhängig von Technologie machen.


Aber doch: Es macht schon Spaß, ein paar erste "Gespräche" zu führen mit ChatGPT.
Parent - - By Benno Hartwig Date 2023-01-22 22:44 Edited 2023-01-22 22:49
Und dann noch:

Code:
Wie kann man das Computerschach noch stärker machen?

Es gibt mehrere Möglichkeiten, das Computerschach zu verbessern:

Verwendung von stärkeren Hardware: Durch den Einsatz von leistungsstärkeren Prozessoren, Grafikkarten und anderer Hardware kann die Rechenleistung von Schachcomputern erhöht werden, was ihnen ermöglicht, komplexere Berechnungen in kürzerer Zeit durchzuführen.

Weiterentwicklung der Schach-Software: Durch die Weiterentwicklung von Schach-Software, insbesondere von Schach-Engines, kann die Leistung von Schachcomputern verbessert werden.

Verwendung von künstlicher Intelligenz: Schachcomputer können mit Methoden der künstlichen Intelligenz wie neuronale Netze trainiert werden, um ihre Leistung zu verbessern.

Verwendung von Cloud Computing: Durch die Nutzung von Cloud Computing kann man auf eine größere Rechenleistung zugreifen und dadurch die Berechnungen schneller durchführen.

Verwendung von Mehrfachprozessoren: Schachcomputer können durch Verwendung von Mehrfachprozessoren die Leistung verbessern und dadurch schneller errechnen welcher Zug der beste ist.

Es ist wichtig zu beachten, dass die Weiterentwicklung von Schachcomputern auch immer mit der Weiterentwicklung der Schach-Software und der Methoden der künstlichen Intelligenz einhergehen muss, um die bestmögliche Leistung zu erzielen.


Es mag sein, dass die Software gerade uns hier nun nicht so viel Neues erzählt hat.
Ich finde aber trotzdem spannen, wie viele Aspekte die Software aufführt.

PS:
Ich habe auf dieser englischsprachigen Seite einfach in deutsch drauflosgeplaudert. Und die KI antwortete auch sofort in deutsch.
Welche Sprachen hätte sie wohl noch akzeptiert und gekonnt?
Parent - By Ingo Althöfer Date 2023-01-23 13:04
Lieber Herr Hartwig,

Benno Hartwig schrieb:
PS: Ich habe auf dieser englischsprachigen Seite
einfach in deutsch drauflosgeplaudert. Und die KI antwortete auch
sofort in deutsch. Welche Sprachen hätte sie wohl noch akzeptiert
und gekonnt?
nach einigen Tests von mir werden viele
gängige Sprachen akzeptiert, insbesondere auch ungarisch
und finnisch.

Ingo Althöfer.
- - By Lothar Jung Date 2023-02-02 20:10 Upvotes 1
Hier ein Link auf einen Blog über die Programmierung eines Schachprogramms durch ChatGPT:

https://medium.datadriveninvestor.com/writing-a-chess-program-in-one-hour-with-chatgpt-67e7ec56ba5d

Lothar
Parent - By Rainer Neuhäusler Date 2023-02-03 18:06
Lothar Jung schrieb:

Hier ein Link auf einen Blog über die Programmierung eines Schachprogramms durch ChatGPT:

<a class='ura' href='https://medium.datadriveninvestor.com/writing-a-chess-program-in-one-hour-with-chatgpt-67e7ec56ba5d'>https://medium.datadriveninvestor.com/writing-a-chess-program-in-one-hour-with-chatgpt-67e7ec56ba5d</a>

Lothar

Das ist natürlich wertvolle Kost, äussest aktuell und unmittelbar praktisch verwertbar. Ein neuer Ansporn für Leute, die schon immer ein Schachprogramm schreiben wollten. Ich habe vor kurzem in Visual Basic versucht ein bisschen herumzuprobieren, was da mit ChatGPT zu machen ist. Einige Programmteile kamen tatsächlich zustande, aber ich hatte wahnsinnige Mühe dem Bot klar zu machen, was ich genau wollte, er redete sich dauern hinaus, dass er gar nicht dafür trainiert ist , Programmcode zu schreiben, geschweige denn ein komplettes Schachprogramm.

Der Andreas Stöckl beweist, daß das geht und zeigt sich insgesamt beeindruckt vom neuen Leistungsstandard in Sachen Künstlicher Intelligenz.  Da er in der Schachprogrammierung schon erfahren ist, konnte er natürlich viel präziser an die Sache herangehen.

Seinem Resumee kann ich mich nur voll anschließen:  "...um dieses Tool effektiv zu nutzen, müssen wir alle noch üben, es voll auszuschöpfen "

In diesem Sinne scheinen mir einige "Schnellschüsse" in punkto abschließender Bewertung von ChatGPT etwas voreilig.
.
Parent - - By Ingo Althöfer Date 2023-02-03 18:15
Hallo Herr Jung,
das liest sich sehr interessant.

Ich frage mal aus Eigeninteresse:
Wie schwer wäre es, auf die Weise ein einigermaßen spielstarkes
Programm für das Brettspiel "San Jego" zu erschaffen?


Die Regeln des Spiels finden sich hier:
https://www.1000steine.de/de/gemeinschaft/forum/?entry=1&id=338936#id338936

Wolfram Bernhardt hatten vor einigen Monaten das Spiel für 6x5-Brett
vollständig gelöst.

Das gewünschte Programm sollte für Brettgrößen
von 4x5 bis 7x6 geeignet sein.

Ingo Althöfer.
Parent - By Lothar Jung Date 2023-02-03 21:37
Vielleicht hilft das:

https://github.com/merkrafter/SanJego

Lothar Jung
- By Lothar Jung Date 2023-02-05 18:46 Edited 2023-02-05 18:56
Hier Beispiele für Ein-Ausgabe, Bitboard , A/B Suche, MCTS, Transposition Tabelle, NNUE Implementation generiert unter ChatGPT:

#include <iostream>
#include <vector>
#include <string>

const int BOARD_SIZE = 8;

// 8x8-Schachbrett
char board[BOARD_SIZE][BOARD_SIZE];

// Initialisieren Sie das Schachbrett
void initBoard() {
  for (int i = 0; i < BOARD_SIZE; i++) {
    for (int j = 0; j < BOARD_SIZE; j++) {
      board[j] = '-';
    }
  }
}

// Drucken Sie das Schachbrett aus
void printBoard() {
  for (int i = 0; i < BOARD_SIZE; i++) {
    for (int j = 0; j < BOARD_SIZE; j++) {
      std::cout << board[j] << " ";
    }
    std::cout << std::endl;
  }
}

// Überprüfen Sie, ob ein Zug gültig ist
bool isValidMove(int x, int y) {
  if (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE && board[x][y] == '-') {
    return true;
  }
  return false;
}

int main() {
  initBoard();
  printBoard();

  int x, y;
  std::cout << "Geben Sie den x-Wert ein: ";
  std::cin >> x;
  std::cout << "Geben Sie den y-Wert ein: ";
  std::cin >> y;

  if (isValidMove(x, y)) {
    board[x][y] = 'X';
  } else {
    std::cout << "Ungültiger Zug" << std::endl;
  }

  printBoard();
  return 0;
}

#include <bitset>
#include <iostream>

typedef std::bitset<64> Bitboard;

Bitboard whitePawns, blackPawns, whiteKnights, blackKnights, whiteBishops,
    blackBishops, whiteRooks, blackRooks, whiteQueens, blackQueens,
    whiteKing, blackKing;

void initBoard() {
  whitePawns = Bitboard("00000000111111110000000000000000");
  blackPawns = Bitboard("00000000000000001111111100000000");
  whiteKnights = Bitboard("00010000001010000000000000000000");
  blackKnights = Bitboard("0000000000101000100000000000000");
  whiteBishops = Bitboard("0010000000100000000000000000000");
  blackBishops = Bitboard("0000000001001000000000000000000");
  whiteRooks = Bitboard("1000000001000000000000000000000");
  blackRooks = Bitboard("0000000001000000000000000000001");
  whiteQueens = Bitboard("000000100000000000000000000000");
  blackQueens = Bitboard("000000001000000000000000000000");
  whiteKing = Bitboard("00000000000100000000000000000000");
  blackKing = Bitboard("00000000000100000000000000000000");
}

void printBoard() {
  for (int i = 7; i >= 0; i--) {
    for (int j = 0; j < 8; j++) {
      int index = i * 8 + j;
      if (whitePawns[index]) {
        std::cout << "P";
      } else if (blackPawns[index]) {
        std::cout << "p";
      } else if (whiteKnights[index]) {
        std::cout << "N";
      } else if (blackKnights[index]) {
        std::cout << "n";
      } else if (whiteBishops[index]) {
        std::cout << "B";
      } else if (blackBishops[index]) {
        std::cout << "b";
      } else if (whiteRooks[index]) {
        std::cout << "R";
      } else if (blackRooks[index]) {
        std::cout << "r";
      } else if (whiteQueens[index]) {
        std::cout << "Q";
      } else if (blackQueens[index]) {
        std::cout << "q";
      } else if (whiteKing[index]) {
        std::cout << "K";
      } else if (blackKing[index]) {
        std::cout << "k";
      } else {
        std::cout << ".";
      }
    }
    std::cout <<

#include <random>
#include <vector>

struct Node {
  int wins = 0;
  int visits = 0;
  std::vector<Node*> children;
  Node* parent = nullptr;
  // Zustand des Schachbretts, der von diesem Knoten repräsentiert wird
  // und weitere Informationen, die Sie benötigen, um Züge auszuführen und
  // das Spiel zu bewerten
};

Node* select(Node* root) {
  Node* node = root;
  while (!node->children.empty()) {
    double bestValue = -1;
    Node* bestChild = nullptr;
    for (Node* child : node->children) {
      double value = (double)child->wins / child->visits +
                    sqrt(2 * log(node->visits) / child->visits);
      if (value > bestValue) {
        bestValue = value;
        bestChild = child;
      }
    }
    node = bestChild;
  }
  return node;
}

void expand(Node* node) {
  // Erzeugen Sie hier Kinderknoten, indem Sie alle möglichen Züge aus dem
  // aktuellen Schachzustand generieren und einen neuen Knoten für jeden
  // Zug erzeugen. Vergessen Sie nicht, dass die Kinderknoten auf den
  // aktuellen Knoten als Elternknoten verweisen müssen.
}

int simulate(Node* node) {
  // Spielen Sie hier eine Simulation des Spiels aus, indem Sie Zufallszüge
  // ausführen, bis das Spiel beendet ist. Rückgabewert sollte 1 sein, wenn
  // Sie gewonnen haben, 0, wenn unentschieden und -1, wenn verloren.
}

void backpropagate(Node* node, int result) {
  node->wins += result;
  node->visits++;
  if (node->parent != nullptr) {
    backpropagate(node->parent, result);
  }
}

Node* mcts(Node* root, int simulations) {
  for (int i = 0; i < simulations; i++) {
    Node* selected = select(root);
    if (selected->children.empty()) {
      expand(selected);
    }
    int result = simulate(selected);
    backpropagate(selected, result);
  }

  double bestValue = -1;
  Node* bestChild = nullptr;
  for (Node* child : root->children) {
    double value = (double)child->wins / child->visits;
    if (value > bestValue) {
      bestValue = value;
      bestChild = child;
    }
  }
  return bestChild;
}

#include <algorithm>
#include <vector>
#include <cmath>

const int MAX_DEPTH = 6;
const int MAX_SCORE = 1000000;
const int MIN_SCORE = -1000000;

int alphabeta(int depth, int alpha, int beta, bool maximizingPlayer) {
    if (depth == MAX_DEPTH) {
        return evaluate();
    }

    if (maximizingPlayer) {
        int bestScore = MIN_SCORE;
        std::vector<int> moves = getMoves();
        for (int move : moves) {
            makeMove(move);
            int score = alphabeta(depth + 1, alpha, beta, false);
            unmakeMove(move);
            bestScore = std::max(bestScore, score);
            alpha = std::max(alpha, bestScore);
            if (beta <= alpha) {
                break;
            }
        }
        return bestScore;
    } else {
        int bestScore = MAX_SCORE;
        std::vector<int> moves = getMoves();
        for (int move : moves) {
            makeMove(move);
            int score = alphabeta(depth + 1, alpha, beta, true);
            unmakeMove(move);
            bestScore = std::min(bestScore, score);
            beta = std::min(beta, bestScore);
            if (beta <= alpha) {
                break;
            }
        }
        return bestScore;
    }
}

#include <unordered_map>
#include <cstdint>

const int TABLE_SIZE = 1e6; // Größe des Transposition Tables.

enum EntryType {
    EXACT,
    LOWER_BOUND,
    UPPER_BOUND
};

struct Entry {
    int depth;
    int score;
    EntryType type;
    uint64_t hash;
};

class TranspositionTable {
public:
    TranspositionTable() : table(TABLE_SIZE) {}

    void store(uint64_t hash, int depth, int score, EntryType type) {
        int index = hash % TABLE_SIZE;
        if (depth >= table[index].depth) {
            table[index].hash = hash;
            table[index].depth = depth;
            table[index].score = score;
            table[index].type = type;
        }
    }

    bool retrieve(uint64_t hash, int depth, int &score, EntryType &type) const {
        int index = hash % TABLE_SIZE;
        if (table[index].hash == hash && table[index].depth >= depth) {
            score = table[index].score;
            type = table[index].type;
            return true;
        }
        return false;
    }

private:
    std::vector<Entry> table;
};

#include <vector>
#include <iostream>
#include <cmath>

const int INPUT_SIZE = 64 * 3;
const int OUTPUT_SIZE = 8 * 8;
const int HIDDEN_LAYER_SIZE = 128;

struct NeuralNetwork {
  std::vector<std::vector<double>> inputWeights;
  std::vector<double> inputBias;
  std::vector<std::vector<double>> hiddenWeights;
  std::vector<double> hiddenBias;

  NeuralNetwork() {
    inputWeights = std::vector<std::vector<double>>(INPUT_SIZE, std::vector<double>(HIDDEN_LAYER_SIZE));
    inputBias = std::vector<double>(HIDDEN_LAYER_SIZE);
    hiddenWeights = std::vector<std::vector<double>>(HIDDEN_LAYER_SIZE, std::vector<double>(OUTPUT_SIZE));
    hiddenBias = std::vector<double>(OUTPUT_SIZE);
  }

  std::vector<double> predict(std::vector<double> inputs) {
    std::vector<double> hiddenLayer = activation(multiply(inputWeights, inputs) + inputBias);
    std::vector<double> output = activation(multiply(hiddenWeights, hiddenLayer) + hiddenBias);
    return output;
  }

  std::vector<double> activation(std::vector<double> x) {
    for (int i = 0; i < x.size(); i++) {
      x = tanh(x);
    }
    return x;
  }

  std::vector<double> multiply(std::vector<std::vector<double>> a, std::vector<double> b) {
    std::vector<double> result(a.size(), 0.0);
    for (int i = 0; i < a.size(); i++) {
      for (int j = 0; j < b.size(); j++) {
        result += a[j] * b[j];
      }
    }
    return result;
  }
};

int main() {
  NeuralNetwork nn = NeuralNetwork();
  // Trainieren Sie hier das Neuronale Netz, indem Sie Beispiele des Schachzustands
  // und der erwarteten Zugbewertungen angeben. Verwenden Sie z. B. Stochastic
  // Gradient Descent (SGD) oder einen anderen Optimierer.
}
Up Topic Hauptforen / CSS-Forum / OpenAI im Schach

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill