Zwei-Spieler-Spiele. Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen. Schach. Schach (2)

Ähnliche Dokumente
Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen

Zwei-Spieler-Spiele. Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen. Schach. Schach (2)

Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen

Zwei-Spieler-Spiele. Einführung in die Methoden der Künstlichen Intelligenz. Suche bei Spielen. Schach. Schach (2)

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Praktikum Algorithmen-Entwurf (Teil 7)

Der Alpha-Beta-Algorithmus

Der Bestimmtheitssatz

Intelligente Systeme

6. Spiele Arten von Spielen. 6. Spiele. Effizienzverbesserung durch Beschneidung des Suchraums

Übersicht. Künstliche Intelligenz: 6. Spiele Frank Puppe 1

Android will doch nur spielen. Ein Spieleframework stellt sich vor

Einführung in Heuristische Suche

Thinking Machine. Idee. Die Thinking Machine Visualisierung versucht, die Denkprozesse eines Schachcomputers sichtbar zu machen

Übersicht. 5. Spiele. I Künstliche Intelligenz II Problemlösen 3. Problemlösen durch Suche 4. Informierte Suchmethoden

Überblick. Mathematik und Spiel. Ohne Glück zum Sieg. Bedeutung der Strategie. Zwei Hauptaspekte

Künstliche Intelligenz - Optimierungsprobleme - Suche in Spielbäumen

Spiele als Suchproblem

Uninformierte Suche in Java Informierte Suchverfahren

Kombinatorische Spiele mit Zufallselementen

Grundlagen der Künstlichen Intelligenz Einführung Minimax-Suche Bewertungsfunktionen Zusammenfassung. Brettspiele: Überblick

Semesterprojekt Implementierung eines Brettspiels (inklusive computergesteuerter Spieler)

Relationen und DAGs, starker Zusammenhang

Einführung in die Methoden der Künstlichen Intelligenz. Suchverfahren / Uninformierte Suche

Informatik II Übung 09. Benjamin Hepp 3 May 2017

Motivation für Suchverfahren. Einführung in die Methoden der Künstlichen Intelligenz. Suchverfahren / Uninformierte Suche

11.1 Grundlagen - Denitionen

KI und Sprachanalyse (KISA)

2. Spiele. Arten von Spielen. Kombinatorik. Spieler haben festgelegte Handlungsmöglichkeiten, die durch die Spielregeln definiert werden.

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer)

Wissensbasierte Suche

Uninformierte Suche in Java Informierte Suchverfahren

der Künstlichen Intelligenz

Hallo Welt für Fortgeschrittene

Einführung in die Methoden der Künstlichen Intelligenz. Suchverfahren / Uninformierte Suche

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Suchverfahren. Kapitel Algorithmische Suche

4 Probabilistische Analyse und randomisierte Algorithmen

Datenstrukturen & Algorithmen

Seminar: Randomisierte Algorithmen Auswerten von Spielbäumen Nele Küsener

Kap. 3: Sortieren (3)

Informatik II, SS 2014

7. Sortieren Lernziele. 7. Sortieren

Proseminar: Geschichte des Computers Schachprogrammierung Die Digitale Revolution

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Asymptotische Laufzeitanalyse: Beispiel

Informatik II Übung 09

5 Zwei spieltheoretische Aspekte

Kapitel 2: Sortier- und Selektionsverfahren Gliederung

Vier Gewinnt Nicolas Schmidt Matthias Dietsche Bernhard Weiß Benjamin Ruile Datum: Tutor: Prof. Schottenloher Spieltheorie

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Spiele. Programmierpraktikum WS04/05 Lange/Matthes 106

Auswählen nach Rang (Selektion)

Aufgabe 2 - Spiele mit Zyklen Gegeben sei folgendes einfache Spiel:

Graphalgorithmen Minimale Spannbäume. Kruskal: Minimaler Spannbaum

Algorithmen und Datenstrukturen 1 Kapitel 5

Berühmte Informatiker

21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

6 Quicksort. die mittlere Laufzeit Θ(n log n) beträgt und. die in der asymptotischen Notation verborgenen Konstanten sehr klein sind.

TD-Gammon. Michael Zilske

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Programmierkurs Prolog, SS 2000

Informatik II Übung 10. Benjamin Hepp 10 May 2017

Algorithmen und Datenstrukturen Heapsort

Spiele (antagonistische Suche) Übersicht. Typen von Spielen. Spielbaum. Spiele mit vollständiger Information

Spieltheorie. Fabian Schmidt Fabian Schmidt Spieltheorie / 46

Informatik II, SS 2016

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Masterarbeit. Alpha-Beta-Pruning. Oliver Kock. Bochum, Februar Fakultät für Mathematik Ruhr-Universität Bochum

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

Einführung in die Methoden der Künstlichen Intelligenz. Klausurvorbereitung Überblick, Fragen,...

Wiederholung. Divide & Conquer Strategie

Algorithmen und Datenstrukturen

13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Programmierung von Strategiespielen

Einführung in die Künstliche Intelligenz. 6. Spiele

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Algorithmen und Datenstrukturen

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Klausur. 18. Juli 2008, 10:15-12:15 Uhr. Name:... Matrikelnummer:... Anzahl beschriebener Blätter (ohne Aufgabenblatt):... D(p) : Y = p x X + p y

Künstliche Intelligenz am Zug: Können Programme gegen menschliche Spieler gewinnen?

9. Natürliche Suchbäume

Suchen und Sortieren Sortieren. Heaps

Guten Morgen und Willkommen zur Saalübung!

Grundlagen: Algorithmen und Datenstrukturen

Wiederholung. Datenstrukturen und. Bäume. Wiederholung. Suchen in linearen Feldern VO

MoGo Seminar Knowledge Engineering und Lernern in Spielen Sommersemester 2010

Spieltheorie Gemischte Strategien

Knowledge Engeneering und Lernen in Spielen

Range-Search. Operationen: Welche Datenstrukturen sind geeignet? Arrays? Listen? AVL-Bäume? Splay-Bäume?

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Transkript:

Einführung in die Methoden der Künstlichen Intelligenz Suche bei Spielen PD Dr. David Sabel SoSe 24 Ziel dieses Abschnitts Intelligenter Agent für Zweipersonenspiele Beispiele: Schach, Dame, Mühle,... Annahme zunächst: Spiele mit genau zwei Gegnern Kein Zufall im Spiel (keine Würfel, Kartenmischen) etc. Stand der Folien: 9. Mai 24 D. Sabel KI SoSe 24 Suche bei Spielen 2/39 Schach Schach (2) Gute Strategien zum Schachspielen schon entwickelt bevor es Computer gab Untersuchungen zu Gewinnstrategien (Eröffnungen,... ) Bewerten von Spielsituationen Im Wesentlichen 2 Ansätze für Programme zum Schachspielen Verwende bekannte Schachtheorien (Verteidigung, Angriff, Bedrohung, Decken, Mittelfeld,... ). Versuche die menschliche Methode zu Programmieren 2 Absuchen aller Möglichkeiten, um den nächsten guten Zug zu finden. Moderne erfolgreiche Schachprogramme: verwenden im Wesentlichen das Absuchen verwenden statische Bewertung der Spielsituationen zusätzlich Bibliotheken für Eröffnung und Endspiel D. Sabel KI SoSe 24 Suche bei Spielen 3/39 D. Sabel KI SoSe 24 Suche bei Spielen 4/39

Spielbäume Beispiel: TicTacToe Zwei Spieler: genannt imierer und imierer Zustand (Knoten): Darstellung der Spielsituation und welcher Spieler am Zug ist Wurzel: Aktuelle Spielsituation Kinder von Knoten K: mögliche Spielsituationen nach einem Zug Spieler wechselt Blätter mit Gewinnwert bewertet. Schach: = imierer hat gewonnen = imierer hat gewonnen = Remis Spielfeld: imierer: X imierer: O X O X X X O O schreiben abwechselnd ihr Symbol in ein freies Feld Gewinner: Spieler hat sein Symbol in einer Reihe (horizontal, vertikal, diagonal) D. Sabel KI SoSe 24 Suche bei Spielen 5/39 D. Sabel KI SoSe 24 Suche bei Spielen 6/39 Beispiel:TicTacToe, Spielbaum -Suche () X X O X O O O O O X O O O O O X O X O X O O X X Eingabe: Spielsituation, Nachfolgerfunktion, Bewertung Ausgabe: Nächster optimaler Zug Informelle Beschreibung der -Suche: Bewerte alle Blätter Berechne den Wert der anderen Knoten: Stufenweise von unten nach oben über die Werte der Kinder wird maximiert bzw. minimiert je nachdem welcher Spieler am Zug ist Dabei: Züge merken, damit der optimale Zug bekannt ist Welchen Zug soll machen? D. Sabel KI SoSe 24 Suche bei Spielen 7/39 D. Sabel KI SoSe 24 Suche bei Spielen 8/39

-Suche (2) Beispiel, TicTacToe Algorithmus -Suche Datenstrukturen: Nachfolgerfunktion, Wert(Zustand) für Endsituationen, Datenstruktur für Spielzustand, Spieler O Funktion max(zustand,spieler): NF := alle Nachfolgezustände zu (Zustand,Spieler); if NF = then return Wert(Zustand) else if Spieler == imierer then return max{max(z, Spieler) Z NF } else // Spieler ist imierer return min{max(z, Spieler) Z NF } endif endif X O X O O O O O O X O X O O X wobei Spieler = der jeweils anderen Spieler Implementierung: sollte zus. den Weg speichern, damit der nächste optimale Zug als Ausgabe zur Verfügung steht. X O O X O O X X D. Sabel KI SoSe 24 Suche bei Spielen 9/39 D. Sabel KI SoSe 24 Suche bei Spielen /39 in Haskell -Eigenschaften minmax endzustand wert nachfolger spieler zustand = go (zustand,[]) spieler where go (zustand,p) spieler endzustand zustand = (wert zustand,reverse $ zustand:p) otherwise = let l = nachfolger spieler zustand in case spieler of imierer -> imierer -> maximumby (\(a,_) (b,_) -> compare a b) [go (z,zustand:p) imierer z <- l] minimumby (\(a,_) (b,_) -> compare a b) [go (z,zustand:p) imierer z <- l] kann als Tiefensuche durchgeführt werden Laufzeit O(c d ) bei mittlerer Verzweigungrate c und Blättern in Tiefe d Praktisches Problem: Bei mittelschweren Spielen: unmöglich in annehmbarer Zeit berechenbar TicTacToe: Vom leeren Spielfeld aus: 9! = 362.88 Zugfolgen, geht gerade noch Daher: Abwandlung des Verfahrens! D. Sabel KI SoSe 24 Suche bei Spielen /39 D. Sabel KI SoSe 24 Suche bei Spielen 2/39

mit Tiefenschranke Beispiel: Heuristische Bewertung für TicTacToe Suche nur bis zur einer bestimmten Tiefe k Bewerte die Knoten in Tiefe k mit einer Heuristik Beispiele für die Bewertungsfunktion: Schach: Materialvorteil, evtl. Stellungsvorteil, Gewinnsituation,... Mühle: Material, #Mühlen, Bewegungsfreiheit,... (#einfach X-besetzte Zeilen/Spalten/Diag) * + (# doppelt X-besetzte Zeilen/Spalten/Diag) * 5 + (2, falls Gewinnsituation) - (#einfach O-besetzte Zeilen/Spalten/Diag) * - (# doppelt O-besetzte Zeilen/Spalten/Diag) * 5 - (2, falls Verlustsituation) D. Sabel KI SoSe 24 Suche bei Spielen 3/39 D. Sabel KI SoSe 24 Suche bei Spielen 4/39 Bewertungsfunktionen Beispiel: TicTacToe Güte bestimmt Güte des Verfahrens muss algorithmisch (möglichst schnell) berechenbar sein sollte Endzustände entsprechend minimal und maximal bewerten Es gilt (in Spielen ohne Zufall): Berechnung des besten Zuges ist unabhängig von den exakten Werten der Bewertungsfunktion; Die Ordnung zwischen den Spielsituationen bestimmt. Sieg Niederlage Unentschieden Bewertung - Bewertung 2 5 Bewertung 3 Bewertung und Bewertung 2 führen zum gleichen optimalen Zug, da Sieg > Unentschieden > Niederlage Bewertung 3 hat eine andere Ordnung: Sieg > Unentschieden = Niederlage und kann daher zu anderem optimalen Zug führen D. Sabel KI SoSe 24 Suche bei Spielen 5/39 D. Sabel KI SoSe 24 Suche bei Spielen 6/39

Einwand Tiefenbeschränkte -Suche Wenn man ein sehr gute Bewertungsfunktion hat: Warum ausführen und nicht gleich nur die Bewertungen der Kinder anschauen? Üblicherweise: Je tiefer man geht, umso besser wird die Bewertungsfunktion! Mittlere Verzweigungrate c Tiefenschranke m Laufzeit O(c m ), wenn die Heuristik in konstanter Zeit berechenbar ist D. Sabel KI SoSe 24 Suche bei Spielen 7/39 D. Sabel KI SoSe 24 Suche bei Spielen 8/39 Optimierung der -Suche: Beispiele Optimierung der -Suche: Beispiele A A k B E B k E C D F G H (A, M ax) = max{(b, M in), (E, M in)} = max{min{(c, M ax), (D, M ax)}, min{(f, M ax), (G, M ax), (H, M ax)}} C D F k G H (A, M ax) = max{(b, M in), (E, M in)} = max{k, min{k, (G, ), (H, )}} Wenn k k : = k = Knoten (bzw. Teilbäume) G und H braucht man nicht betrachten! D. Sabel KI SoSe 24 Suche bei Spielen 9/39 D. Sabel KI SoSe 24 Suche bei Spielen 2/39

Beispiel mit konkreten Werten Symmetrischer Fall A A B l E 3 E 3 4 2-2 5 C D F l G H (A, M in) = min{(b, M ax), (E, M ax)} = min{l, max{l, (G, ), (H, )}} Wenn l l : = l D. Sabel KI SoSe 24 Suche bei Spielen 2/39 D. Sabel KI SoSe 24 Suche bei Spielen 22/39 Alpha-Beta-Suche Kürzt genau diese Fälle weg Durch Verwendung eines Suchfensters [α, β] Tiefensuche mit Tiefenschranke notwendig Anpassung der Tiefenschranke im folgenden Algorithmus implizit Algorithmus α β-suche Aufruf: AlphaBeta(Zustand,Spieler,,+ ) Funktion: AlphaBeta(Zustand,Spieler,α,β) Wenn Tiefenschranke erreicht, bewerte die Situation, return Wert 2 Sei NF die Folge der Nachfolger von (Zustand,Spieler) 3 Wenn Spieler = imierer: β l := ; for-each L NF β l := min{β l, AlphaBeta(L,imierer,α,β)} if β l α then return β l endif// verlasse Schleife β := min{β, β l } end-for return β l 4 Wenn Spieler = imierer α l := ; for-each L NF α l := max{α l, AlphaBeta(L,imierer,α,β)} if α l β then return α l endif// verlasse Schleife α := max{α, α l } end-for return α l D. Sabel KI SoSe 24 Suche bei Spielen 23/39 D. Sabel KI SoSe 24 Suche bei Spielen 24/39

In Haskell Alpha-Beta-Suche: Beispiel a alphabeta wert nachfolger maxtiefe neginfty infty spieler zustand = ab neginfty infty spieler zustand where ab tiefe alpha beta spieler zustand null (nachfolger spieler zustand) maxtiefe <= tiefe = wert zustand otherwise = let l = nachfolger spieler zustand in case spieler of imierer -> maximize tiefe alpha beta l imierer -> minimize tiefe alpha beta l maximize tiefe alpha beta xs = it_maximize alpha neginfty xs where it_maximize alpha alpha_l [] = alpha_l it_maximize alpha alpha_l (x:xs) = let alpha_l = max alpha_l (ab (tiefe+) alpha beta imierer x) in if alpha_l >= beta then alpha_l else it_maximize (max alpha alpha_l ) alpha_l xs minimize tiefe alpha beta xs = it_minimize beta infty xs where it_minimize beta beta_l [] = beta_l it_minimize beta beta_l (x:xs) = let beta_l = min beta_l (ab (tiefe+) alpha beta imierer x) in if beta_l <= alpha then beta_l else it_minimize (min beta beta_l ) beta_l xs b 2 4 - b 2 4 - a c 6-2 β = α l = c 6-2 D. Sabel KI SoSe 24 Suche bei Spielen 25/39 a D. Sabel KI SoSe 24 Suche bei Spielen β = 26/39 α l = Reihenfolge der Nachfolger b β = β l = Eigenschaften Alpha-Beta c b 2 3 4 a 5 c 5 5 6 7 8 Beide Bäume sind gleich c 5 8 7 6 5 Außer: Nachfolger in umgekehrter Reihenfolge Reihenfolge bestimmt Güte von Alpha-Beta Abhilfe: Nachfolger vorsortieren Heuristik zum Sortieren verwenden a 5 b 4 4 3 2 Zur Erinnerung: 2 4-6 -2 : Laufzeit O(c d a ) bei α = Tiefenschranke d und β = Verzweigungrate c α l = Alpha-Beta-Suche: Worst-Case: b Wie β = β l = 2 Best-Case O(c d 2 ) Bei guter Vorsortierung O(c d 2 ) (Daumenregel) 2 4-6 -2 Bei zufälliger Vorsortierung O(c 3d 4 ) a Bei guter Vorsortierung: β = α l = Bei gleichen Ressourcen kann man in mit Alpha-Beta-Suche doppelt so tief vorausschauen als bei -Suche! b c β = 2 β l = 2 c D. Sabel KI SoSe 24 Suche bei Spielen 27/39 D. Sabel KI SoSe 24 Suche bei Spielen 28/39 2 4-6 -2

Optimierungen von Alpha-Beta Strategie zur Vermeidung des Horizonteffekts Optimierungen Speicherung von bewerteten Stellungen Nutzung von Symmetrien Probleme: Manchmal: Tiefere Suche schlechter als nicht so tiefe Suche Horizonteffekt: Durch Tiefenschranke wird genau der gute Zug übersehen Falls bei Suche in Tiefe d ein Zug am Knoten K besonders gut (imierer) ist: besonders gut: alle Brüder von K haben schlechtere Bewertung Dann Suche K mit größerer Tiefe ab Tiefere Suche ist auch ratsam bei Zugzwang, denn Erhöht den Suchhorizont ohne Vergrößerung des Suchraums D. Sabel KI SoSe 24 Suche bei Spielen 29/39 D. Sabel KI SoSe 24 Suche bei Spielen 3/39 Mehr als 2 Spieler 3-Spieler-Baum Spieler S Wir erläutern nur die Probleme (keine Lösung) Erkenntnis: Probleme sind wesentlich schwieriger Vereinfachung: Genau 3 Spieler Blattbewertung: Statt Wert, nun Drei-Tupel (A, B, C): Ergebnis des jeweiligen Spielers Spieler S 2 Spieler S 3 (,2,) (,,3) (,,4) (,,2) (3,,2) (4,,) (,3,2) (,2,) D. Sabel KI SoSe 24 Suche bei Spielen 3/39 D. Sabel KI SoSe 24 Suche bei Spielen 32/39

3-Spieler-Baum: Bewertung () 3-Spieler-Baum: Bewertung () Spieler S Strategie: Jeder maximiert sein eigenes Ergebnis (,3,2) Spieler S Strategie: Spieler und Spieler 3 verbünden sich Ziel: imiere Ergebnis von Spieler 2 (,,3) Spieler S 2 (,,3) (,3,2) Spieler S 2 (,,3) (,2,) Spieler S 3 (,,3) (,,4) (3,,2) (,3,2) Spieler S 3 (,,3) (,,4) (3,,2) (,2,) (,2,) (,,3) (,,4) (,,2) (3,,2) (4,,) (,3,2) (,2,) (,2,) (,,3) (,,4) (,,2) (3,,2) (4,,) (,3,2) (,2,) D. Sabel KI SoSe 24 Suche bei Spielen 33/39 D. Sabel KI SoSe 24 Suche bei Spielen 34/39 Nicht-eindeutige Strategie Spiele mit Zufall Spieler S Spieler S 2 Strategie: Jeder maximiert sein eigenes Ergebnis (,-,-) (,,)? (,,) (,-,-) (-,-,)? Wir betrachten nur 2-Spieler-Spiele Mit Zufall: Z.B. Würfeln, Kartenmischen, etc. Naiver Ansatz: Verwende (bzw. α β) über alle Möglichkeiten Spieler S 3 (,,) (,,) (,-,-) (-,-,) Besser: Benutze die Wahrscheinlichkeit und den Erwartungswert (,,) (,-,-) (-,,-) (,,) (,-,-) (,-,-) (-,-,) (,,) D. Sabel KI SoSe 24 Suche bei Spielen 35/39 D. Sabel KI SoSe 24 Suche bei Spielen 36/39

Spielbaum mit Zufallsknoten Eigenschaften (würfelt) (Zug) (würfelt) (Zug) 3.2 A 3.2 B (=.6*4 +.4*2) 2.3 C (=.3*3+.7*2).6.4.3.7 D4 E2 F3 G2 p Satz Es gilt: Wenn Wahrscheinlichkeit eine Rolle spielt, dann ist die Berechnung des Zuges mit dem besten Erwartungswert abhängig von den exakten Werten der Bewertungsfunktion; nicht nur von der relativen Ordnung auf den Situationen. 4 6 2 9 3 7 6 2 D. Sabel KI SoSe 24 Suche bei Spielen 37/39 D. Sabel KI SoSe 24 Suche bei Spielen 38/39 Beweis durch Gegenbeispiel (Zug) 7.4 6.7 (würfelt) (Zug) 6.7 (=.7+.3*2) 7.4 6.3 (=.*2+.9*8) (=.*3+.9*6).7.3..9 2 23 86 = Die Bewertungsfunktion muss vorsichtig gewählt werden! D. Sabel KI SoSe 24 Suche bei Spielen 39/39