Kursaufgaben zu künstlicher Intelligenz und maschinellem Lernen (1. Grundlagen des Knowledge Engineering)


Dieser Artikel ist der erste Teil der Aufgabe für den Kurs Künstliche Intelligenz und Maschinelles Lernen (1. Grundlagen des Knowledge Engineering)

Dieser Artikel dient nur als Lernreferenz!


 Zu anderen Kapiteln springen:

1. Grundlagen des Knowledge Engineering

2. Funktionsnäherung

3. Fuzzy-Logik

4. Funktionsoptimierung


Inhaltsverzeichnis

1. Grundlagen des Knowledge Engineering

1.1 Analyse und Lösung von Problem 1

1.1.1 Was sind die Merkmale von Wissen?

1.1.2 Welche Methoden zur Wissensdarstellung in intelligenten Systemen gibt es?

1.1.3 Kernpunkte mehrerer typischer Wissensdarstellungsmethoden

1.1.4 Auswahl und Etablierung geeigneter Wissensrepräsentationsmethoden in der Praxis

1.2 Analyse und Lösung von Problem 2

1.3 Analyse und Lösung von Problem drei

1.3.1 Was ist Suche?

1.3.2 Welche verschiedenen Suchmethoden gibt es? Was sind die Merkmale jedes einzelnen?

1.3.3 Wählen Sie einen Suchalgorithmus, um das Schiebespiel mit Holzklötzen abzuschließen

1.4 Analyse und Lösung von Problem 4

1.4.1 Was ist Argumentation?

1.4.2 Was sind die wichtigsten Argumentationsmethoden? Was sind die Merkmale der einzelnen Argumentationsarten?

1.4.3 Argumentationsbeispiele

1. Grundlagen des Knowledge Engineering


1.1 Analyse und Lösung von Problem 1

F1: Was sind die Merkmale von Wissen? Welche Methoden zur Wissensrepräsentation in intelligenten Systemen gibt es? Schreiben Sie die Hauptpunkte von drei typischen Methoden zur Wissensdarstellung auf. Wie wählt man eine geeignete Wissensrepräsentationsmethode aus und etabliert sie in der Praxis?

1.1.1 Was sind die Merkmale von Wissen?

       Wissen ist verarbeitete Information (Feigenbaum), die Fakten, Überzeugungen und heuristische Regeln umfasst (Hayes-Roth). Wissen besteht aus Symbolen, den Beziehungen zwischen Symbolen und den Regeln oder Prozessen zur Verarbeitung dieser Symbole. Wissen fügt Informationen Kontextinformationen hinzu, bietet mehr Bedeutung und ist daher nützlicher und wertvoller. Wissen verändert sich im Laufe der Zeit dynamisch und neues Wissen kann auf der Grundlage von Regeln und vorhandenem Wissen abgeleitet werden.

       Die Merkmale des Wissens sind:

       (1) Relative Korrektheit: Unter bestimmten Bedingungen und Umständen ist Wissen im Allgemeinen korrekt und vertrauenswürdig;

       (2) Unsicherheit: Unsicherheit mit vier Inhalten: Unsicherheit durch Zufälligkeit, Unsicherheit durch Unschärfe, Unsicherheit durch Unvollständigkeit, Unsicherheit durch Erfahrungssicherheit;

       (3) Darstellbarkeit und Verfügbarkeit: Wissen kann dargestellt und genutzt werden.

1.1.2 Welche Methoden zur Wissensdarstellung in intelligenten Systemen gibt es?

       Die Wissensdarstellung intelligenter Systeme umfasst Prädikatenlogik , Produktion, Framework, semantisches Netzwerk, Skript, Prozedur, objektorientiert und Petri-Netz (Petri-Netzwerk), Glaubensnetzwerk (Belief Network), Ontologie und andere Wissensdarstellungsmethoden.

1.1.3 Kernpunkte mehrerer typischer Wissensdarstellungsmethoden

1. Darstellung der Prädikatenlogik

       Die Darstellung in der Prädikatenlogik stellt einen Teil des Wissens als Prädikatenausdruck in der klassischen Logik dar. Sie eignet sich zum Ausdruck von Sachwissen wie Status, Attributen und Konzepten von Dingen. Sie kann auch zum Ausdruck von regulärem Wissen verwendet werden, das eine eindeutige kausale Beziehung zwischen Dingen aufweist. Unsicheres Wissen kann nicht effektiv dargestellt werden, und diese Darstellungsmethode kann den internen Zusammenhang des Wissens nicht gut widerspiegeln.

       Schritte zum Ausdrücken von Wissen mithilfe von Prädikatsformeln:

       (1) Prädikate und Individuen definieren und die genaue Bedeutung jedes Prädikats und Individuums bestimmen;

       (2) Weisen Sie den Variablen in jedem Prädikat entsprechend der auszudrückenden Sache oder dem auszudrückenden Konzept spezifische Werte zu.

       (3) Verwenden Sie entsprechend der Semantik des auszudrückenden Wissens geeignete Verbindungssymbole, um verschiedene Prädikate zu einer Prädikatsformel zu verbinden.

2. Produktionsnotation _ _

       Die Produktionsnotation wird auch Produktionsregelnotation genannt . Der Begriff „ Produktion “ wurde erstmals 1943 vom amerikanischen Mathematiker E. Post vorgeschlagen. Er wird mittlerweile in vielen Bereichen verwendet und hat sich zur am häufigsten verwendeten Methode zur Wissensdarstellung in der künstlichen Intelligenz entwickelt . Derzeit ist in Expertensystemen die Produktionsdarstellung die am häufigsten verwendete Form der Wissensdarstellung. Die Grundform ist: PàQ oder wenn P, dann Q, P ist die Prämisse der Produktion und Q ist die Konsequenz der Produktion oder wird als Schlussfolgerung oder Operation bezeichnet. Stellen Sie eine Gruppe von Produktionen zusammen und lassen Sie sie zusammenarbeiten und zusammenarbeiten. Die von einer Produktion generierten Schlussfolgerungen können als bekannte Tatsache für eine andere Produktion verwendet werden, um die Lösung des Problems zu finden. Ein solches System wird als Produktionssystem bezeichnet. Im Allgemeinen besteht ein Produktionssystem aus drei Teilen: einer Regelbasis, einer umfassenden Datenbank und einem Steuerungssystem (Inferenzmaschine). Die Beziehung zwischen ihnen ist in der folgenden Abbildung dargestellt. Die Grundstruktur ist in Abbildung 1-1 dargestellt.

 Abbildung 1-1 Strukturdiagramm der Produktionsdarstellung (Produktionssystem)

       Darunter ist die Regelbasis eine Sammlung von WENN-DANN-Regeln; die umfassende Datenbank zeichnet den Anfangszustand, die Zwischenergebnisse und den Zielzustand der Problemlösung auf; das Steuerungssubsystem führt den Identifizierungsverhaltenszyklus aus und wählt die aktivierten Regeln und die Ausführung in jedem Zyklus aus Zu seinen Aktionen gehören im Allgemeinen Matcher, Konfliktlöser und Regelinterpreter.

       Die allgemeinen Schritte zur Lösung von Problemen in Produktionssystemen sind:

       (1) Initialisieren Sie die umfassende Datenbank und senden Sie die ersten bekannten Fakten des Problems an die umfassende Datenbank.

       (2) Wenn in der Regelbasis eine ungenutzte Regel vorhanden ist und deren Prämisse mit den bekannten Fakten in der umfassenden Datenbank übereinstimmen kann, fahren Sie fort; wenn es keine solche Tatsache gibt, fahren Sie mit Schritt (5) fort;

       (3) Führen Sie die aktuell ausgewählte Regel aus, markieren Sie die Regel und senden Sie die nach Ausführung der Regel erhaltene Schlussfolgerung an die umfassende Datenbank. Wenn im Abschluss der Regel bestimmte Aktionen angegeben sind, führen Sie diese Aktionen aus;

       (4) Überprüfen Sie, ob die Lösung des Problems in der umfassenden Datenbank enthalten ist. Wenn sie enthalten ist, beenden Sie den Problemlösungsprozess. Andernfalls fahren Sie mit Schritt (2) fort.

       (5) Bitten Sie den Benutzer, weitere bekannte Fakten zum Problem anzugeben. Wenn er diese bereitstellen kann, fahren Sie mit Schritt (2) fort; andernfalls beenden Sie den Problemlösungsprozess.

       (6) Wenn in den Regeln keine ungenutzten Regeln mehr vorhanden sind, wird der Problemlösungsprozess beendet.

3. Framework- Notation _

       Framework: Eine Datenstruktur, die die Eigenschaften des betreffenden Objekts (einer Sache, eines Ereignisses oder eines Konzepts) beschreibt. Ein Rahmen besteht aus mehreren Strukturen, die als „Slots“ bezeichnet werden, und jeder Slot kann entsprechend der tatsächlichen Situation in mehrere „Flächen“ unterteilt werden. Ein Slot wird verwendet, um einen Aspekt der Eigenschaften des betreffenden Objekts zu beschreiben. Eine Facette wird verwendet, um einen Aspekt der entsprechenden Eigenschaft zu beschreiben. Die Attributwerte, die Schlitze und Seiten besitzen, werden als Schlitzwerte bzw. Seitenwerte bezeichnet. Die spezifische Struktur ist in Abbildung 1-2 dargestellt.

 Abbildung 1-2 Strukturdiagramm der Rahmendarstellung

4. Semantische Netzwerkdarstellung _

       (1) Knoten im semantischen Netzwerk: stellen verschiedene Dinge, Konzepte, Situationen, Attribute, Aktionen, Zustände usw. dar. Jeder Knoten kann mehrere Attribute haben und wird im Allgemeinen durch einen Rahmen oder ein Tupel dargestellt. Darüber hinaus kann ein Knoten auch ein semantisches Subnetzwerk sein und eine mehrstufige verschachtelte Struktur bilden.

       (2) Bögen im semantischen Netzwerk: stellen verschiedene semantische Verbindungen dar und zeigen eine bestimmte semantische Beziehung zwischen den Knoten an, die sie verbinden.

       (3) Sowohl Knoten als auch Bögen müssen identifiziert werden, um verschiedene Objekte und verschiedene semantische Verbindungen zwischen Objekten zu unterscheiden. Semantische Grundelemente können durch Tripel beschrieben werden . Seine Struktur kann durch ein grundlegendes Netzwerkelement dargestellt werden. Wenn beispielsweise A und B zur Darstellung von Knoten 1 bzw. Knoten 2 im Triplett verwendet werden und R zur Darstellung der semantischen Verbindung zwischen A und B verwendet wird, ist die Struktur des entsprechenden grundlegenden Netzwerkelements in Abbildung 1 dargestellt. 3.

Abbildung 1-3 Strukturdiagramm der semantischen Netzwerkdarstellung

       Zu den häufig verwendeten semantischen Beziehungen gehören Zugehörigkeit, Inklusion, Attribut, Zeit, Raum und Ähnlichkeit.

       Der Hauptprozess zur Lösung von Problemen im semantischen Netzwerksystem:

       (1) Konstruieren Sie ein Netzwerksegment gemäß den Anforderungen des zu lösenden Problems, in dem die Kennungen einiger Knoten oder Bögen leer sind, was das zu lösende Problem widerspiegelt.

       (2) Verwenden Sie dieses Netzwerksegment, um in der Wissensdatenbank nach passenden Netzwerken zu suchen und die erforderlichen Informationen zu finden. Natürlich ist diese Art der Übereinstimmung im Allgemeinen nicht vollständig und enthält Unsicherheiten, sodass das Problem der Unsicherheitsanpassung gelöst werden muss.

       (3) Wenn das semantische Netzwerkfragment der Frage mit einem bestimmten semantischen Netzwerkfragment in der Wissensdatenbank übereinstimmt, ist die Tatsache, dass es mit der Abfrage übereinstimmt, die Lösung des Problems.

5. Darstellung des Petri- Netzwerks _ _

       Das Konzept des Petri-Netzes wurde erstmals 1962 vom deutschen Gelehrten Cah Abam Petri vorgeschlagen. Es dient der Konstruktion von Systemmodellen und der Analyse dynamischer Eigenschaften und wurde später nach und nach als Methode zur Wissensdarstellung eingesetzt.

       Es gibt drei Grundelemente des Petri-Netzes: Position, Transformation und Beschriftung. S = (P, T, Y)

Abbildung 1-4 Strukturdiagramm der Petri-Netz-Wissensdarstellung

       Für komplexeres Wissen verwenden Petri-Netze normalerweise ein Oktett, um die kausale Beziehung zwischen Wissen darzustellen. Die spezifische Form ist: (P, T, D, I, O, f, α , β).

       P ist eine endliche Menge von Positionen, bezeichnet als P={p1, p2,…,pn};

       T ist eine endliche Menge von Transformationen, bezeichnet als t={t1, t2,…,tn};

       D ist eine endliche Menge von Aussagen, bezeichnet als D={d1, d2,…,dn};

       I ist die Eingabefunktion, die die Zuordnung von Position zu Transformation darstellt;

       O ist die Ausgabefunktion, die die Abbildung von der Transformation zur Position darstellt;

       f ist eine Korrelationsfunktion, die die Stärke der Regel angibt, mit einem Wertebereich von [0, 1];

       α ist die Korrelationsfunktion, die die Glaubwürdigkeit des Satzes entsprechend der Position [0, 1] darstellt;

       β ist die Korrelationsfunktion, die die Abbildung von Positionen auf Aussagen darstellt.

1.1.4 Auswahl und Etablierung geeigneter Wissensrepräsentationsmethoden in der Praxis

       Das Problem der Wissensrepräsentation ist eines der Kernthemen der Forschung zur künstlichen Intelligenz. 1) Das gleiche Problem kann auf viele verschiedene Arten ausgedrückt werden. Einige Darstellungsmethoden sind für bestimmte Probleme effektiver, während andere Darstellungsmethoden möglicherweise nicht geeignet oder keine guten Darstellungsmethoden sind. 2) Bei der Darstellung und Lösung komplexerer Probleme reicht es bei weitem nicht aus, eine einzige Wissensdarstellungsmethode zu verwenden. Oftmals muss ein Methodenmix eingesetzt werden. 3) Bei der Auswahl einer Wissensdarstellungsmethode sollten Sie auch die Funktionen und Features berücksichtigen, die die verwendete Programmiersprache bietet, damit diese Darstellungsmethoden besser beschrieben werden können.

       Unter diesen Darstellungsmethoden gehören Prädikatenlogik, Produktionssysteme und Zustandsraumrepräsentation zur Kategorie der unstrukturierten Wissensrepräsentation, während semantische Netzwerke, Frameworks, objektorientierte und Skripttechnologien zur Kategorie der strukturierten Wissensrepräsentation gehören. Jede dieser Darstellungsmethoden hat ihre eigenen Vorteile und eignet sich für unterschiedliche Situationen. Die aktuelle Wissensrepräsentation wird im Allgemeinen aus spezifischen Anwendungen vorgeschlagen. Obwohl sie sich weiterentwickelt und verändert hat, konzentriert sie sich immer noch auf praktische Anwendungen und es fehlt eine systematische Wissensrepräsentationstheorie. Und da diese Wissensdarstellungsmethoden alle auf Domänenwissen ausgerichtet sind, hat die Darstellung des gesunden Menschenverstandswissens noch keine großen Fortschritte gemacht, was ein dringendes Problem darstellt, das gelöst werden muss. Die Wissensrepräsentation ist für Expertensysteme sehr wichtig. Wissen kann auf viele Arten klassifiziert werden, beispielsweise als A-priori-Wissen und A-posteriori-Wissen, prozedurales, deklaratives und stillschweigendes Wissen. Logische Methoden, Produktionen, semantische Netzwerke und Frames sind häufig verwendete Methoden zur Wissensdarstellung in Expertensystemen. Skripte und Ontologien sind häufig verwendete Methoden zum Verstehen natürlicher Sprache. Die Zustandsraummethode wird häufig in Steuerungssystemen und Robotersystemen verwendet. Die objektorientierte Wissensdarstellungsmethode ist eine umfassende Methode. Jede Wissensdarstellungsmethode hat ihre Vor- und Nachteile. Bevor Sie ein wissensbasiertes System entwerfen, sollten Sie entscheiden, welche Methode das Problem besser lösen kann, und das am besten geeignete Werkzeug für das spezifische Problem auswählen.


1.2 Analyse und Lösung von Problem 2

F2: Verwenden Sie mindestens zwei Wissensdarstellungsmethoden, um die folgende Aussage auszudrücken:

       (1) Jede Kraft hat eine gleiche und entgegengesetzte Reaktionskraft;

       Die erste Methode: Prädikatenlogikdarstellung

Das Definitionsprädikat lautet wie folgt: F(x) – x ist eine Kraft; FF(x,y) – x ist die Reaktionskraft von y; EQ(x,y) – x und y sind gleich groß; EP(x ,y)-x und y Die Richtung ist entgegengesetzt; dann gibt es:

       Die zweite Methode: Produktionsausdruck

       Die dritte Methode: semantische Netzwerkdarstellung

 Abbildung 1-5 Semantische Netzwerkdarstellung Q2-1

       (2) Li Wens Klassenlehrer gab jedem Klassenkameraden ein Geschenk;

       Die erste Methode: Prädikatenlogikdarstellung

Die Prädikate sind wie folgt definiert: ST(x) – x ist ein Klassenkamerad; NA(x) – x ist Li Wen; GIFT(x, y) – x gibt y ein Geschenk; TE(x, y) – x ist ys The Zu den Schulleitern gehören:

       Die zweite Methode: Produktionsausdruck

       Die dritte Methode: semantische Netzwerkdarstellung

 Abbildung 1-6 Semantische Netzwerkdarstellung Q2-2

       (3) Wang Li ist die Managerin der Tianfa Computer Company. Sie ist 35 Jahre alt. Das Unternehmen befindet sich in der Nanhuan Street Nr. 50 .

       Die erste Methode: Prädikatenlogikdarstellung

Das Definitionsprädikat lautet wie folgt: N(x)-x ist Wang Li; A(x)-x ist 35 Jahre alt; L(x)-x liegt bei Nr. 50 Nanhuanjie; C(x)-x ist Tianfa Computer Company; MA( x,y) – x ist der Manager von y, dann:

        Die zweite Methode: Produktionsausdruck

        Die dritte Methode: semantische Netzwerkdarstellung

 Abbildung 1-7 Semantische Netzwerkdarstellung Q2-3


1.3 Analyse und Lösung von Problem drei

F3: Was ist Suche? Welche unterschiedlichen Suchmethoden gibt es? Was sind die Merkmale jedes einzelnen? Wählen Sie einen Suchalgorithmus, um das folgende Schiebeblockspiel abzuschließen:

B B B W W W E

Darunter ist B ein schwarzer Holzblock, W ein weißer Holzblock und E ein Feld. Die Spielregeln lauten: Jeder Holzblock kann in ein angrenzendes Feld verschoben werden oder es können bis zu zwei andere Holzblöcke in ein Feld springen Raum. Das ultimative Ziel des Spiels ist es, alle weißen Holzklötze links von den schwarzen Holzklötzen zu bewegen (unabhängig von der Position der Felder).

1.3.1 Was ist Suche?

       Der Prozess der ständigen Suche nach verfügbarem Wissen basierend auf der tatsächlichen Situation des Problems und der Konstruktion einer kostengünstigeren Argumentationsroute, um eine zufriedenstellende Lösung des Problems zu erreichen, wird als Suche bezeichnet. Beispielsweise wird die Suche nach einer Argumentationsroute von den ersten Fakten bis zur endgültigen Antwort durchgeführt zum Problem gefunden wird. Dieser Weg weist zeitlich und räumlich die geringste Komplexität auf.

1.3.2 Welche verschiedenen Suchmethoden gibt es? Was sind die Merkmale jedes einzelnen?

       Es gibt Blindsuche, heuristische Suche, UND/ODER-Baumsuche, Spielbaumsuche und Einschränkungszufriedenheitssuche.

       (1) Je nachdem, ob heuristische Informationen verwendet werden, können sie in Blindsuche und heuristische Suche unterteilt werden. Die Blindsuche wird auch als informationsfreie Suche bezeichnet, dh sie sucht nur nach der vorgegebenen Steuerungsstrategie und den erhaltenen Zwischeninformationen während des Suchvorgangs wird nicht verwendet. Wird zur Verbesserung von Kontrollstrategien verwendet. Heuristische Suche bezieht sich auf das Hinzufügen heuristischer Informationen zum Problem in der Suche, um die Suche in die vielversprechendste Richtung zu lenken, den Problemlösungsprozess zu beschleunigen und die optimale Lösung zu finden.

       (2) Klassifiziert nach der Art und Weise, wie das Problem dargestellt wird, kann es in Zustandsraumsuche und UND/oder Baumsuche unterteilt werden. Die Zustandsraumsuche bezieht sich auf die Suche, die durchgeführt wird, wenn die Zustandsraummethode zur Lösung des Problems verwendet wird, und/oder die Baumsuche bezieht sich auf die Suche, die durchgeführt wird, wenn die Problemreduktionsmethode zur Lösung des Problems verwendet wird.

       (3) Die beiden grundlegendsten Suchmethoden im Spiel: Maximin-Analysemethode und α-β-Beschneidungstechnologie;

       (4) Backtracking-Suche nach Problemen mit der Erfüllung von Einschränkungen, Algorithmusidee: Jedes Mal, wenn einer Variablen ein Wert zugewiesen wird und keine legale Zuweisung vorliegt (wenn die Einschränkung nicht erfüllt ist), muss die vorherige Zuweisung der Variablen aufgehoben und neu zugewiesen werden. Dies ist ein Rückzieher.

1.3.3 Wählen Sie einen Suchalgorithmus, um das Schiebeblockspiel abzuschließen

B B B W W W E

Darunter ist B ein schwarzer Holzblock, W ein weißer Holzblock und E ein Feld. Die Spielregeln lauten: Jeder Holzblock kann in ein angrenzendes Feld verschoben werden, oder es können bis zu zwei andere Holzblöcke übersprungen werden einen Raum betreten. Das ultimative Ziel des Spiels ist es, alle weißen Holzklötze links von den schwarzen Holzklötzen zu bewegen (unabhängig von der Position der Felder).

1. A*(A-Star ) -Algorithmus

       Der A-Star-Algorithmus ist ein Graphsuchalgorithmus, der häufig zur Pfadfindung verwendet wird. Es handelt sich um einen Algorithmus, der auf der Breitensuche basiert und die Eigenschaften des Dijkstra-Algorithmus und des Best- Fit- Algorithmus kombiniert.

       Es berechnet die Priorität jedes Knotens anhand der Gleichung (1-1) und wählt dann den Knoten mit der höchsten Priorität als nächsten zu durchquerenden Knoten aus. Prioritätsfunktion:

 In der Formel sind g(x) die Kosten des Knotens n vom Startpunkt aus, h(n) die geschätzten Kosten des Knotens n vom Endpunkt, was die heuristische Funktion des A*-Algorithmus ist, und h(n) die geschätzten Kosten des Knotens n vom Endpunkt.

       Die heuristische Funktion beeinflusst das Verhalten des A*-Algorithmus hauptsächlich unter folgenden Gesichtspunkten:

       1) Im Extremfall, wenn die heuristische Funktion h(n) immer 0 ist, wird die Priorität des Knotens durch den Ursprung bestimmt und der Algorithmus degeneriert zum Dijkstra-Algorithmus.

       2) Im anderen Extremfall, wenn h(n) viel größer als h(n) ist, gibt es zu diesem Zeitpunkt nur einen Effekt, und dies wird zu einer Best-First-Suche.

       3) Wenn h(n) immer kleiner oder gleich den Kosten vom Knoten n zum Endpunkt ist, was als akzeptable Heuristik A* bezeichnet wird, dann findet der A*-Algorithmus garantiert den kürzesten Weg. Wenn der Wert jedoch kleiner ist, durchläuft der Algorithmus mehr Knoten, wodurch der Algorithmus langsamer wird.

       4) Wenn h(n) genau den Kosten vom Knoten n zum Endpunkt entspricht, findet der A*-Algorithmus den besten Pfad und ist sehr schnell. Dies ist jedoch schwierig, da es schwierig ist, genau herauszufinden, wie weit Sie vom Ende entfernt sind.

       5) Wenn der Wert von h(n) größer ist als die Kosten vom Knoten n zum Endpunkt, kann der A*-Algorithmus nicht garantieren, den kürzesten Weg zu finden, ist aber zu diesem Zeitpunkt sehr schnell.

       Aus den obigen Informationen können wir erkennen, dass die Geschwindigkeit und Genauigkeit des Algorithmus durch Anpassen der heuristischen Funktion gesteuert werden kann. Denn in manchen Fällen ist der kürzeste Weg möglicherweise nicht notwendig, wir hoffen jedoch, so schnell wie möglich einen Weg zu finden. Auch hier ist der A*-Algorithmus flexibler.

2. Ergebnisse und Analyseanweisungen

       Verwenden Sie den A*-Algorithmus, um das Spiel mit den verschiebbaren Holzklötzen zu implementieren. Schreiben Sie mehrere A*-Klassen und -Methoden in JAVA. Sie können das Laufergebnis im Terminal erhalten. Abbildung 1-8. Das Terminal-Laufergebnisdiagramm (Runde 1). Das Ergebnis ist wie in der Abbildung (Runde 1) dargestellt:

 Abbildung 1-8 Ergebnisdiagramm des Terminalbetriebs (Runde 1)

 Abbildung 1-9 Flussdiagramm zum Verschieben von Blöcken (Runde 1)

       Um die Korrektheit des Programms und die Universalität des Algorithmus zu beweisen, habe ich die folgende experimentelle Überprüfung und Ergebnisse von vier verschiedenen Ausgangssituationen hinzugefügt.

Runde 2. Ausgangssituation 1.

B B B E W W W

 Abbildung 1-10 Ergebnisdiagramm des Terminalbetriebs (Runde 2)

 Abbildung 1-11 Flussdiagramm zum Verschieben von Blöcken (Runde 2)

Runde 3. Ausgangssituation 2.

B E B B W W W

 Abbildung 1-12 Ergebnisdiagramm des Terminalbetriebs (Runde 3)

 Abbildung 1-13 Flussdiagramm zum Verschieben von Blöcken (Runde 3)

Runde 4. Ausgangssituation 3.

E B B B W W W

 Abbildung 1-14 Ergebnisdiagramm des Terminalbetriebs (Runde 4)

 Abbildung 1-15 Flussdiagramm zum Verschieben von Blöcken (Runde 4)

Runde 5. Ausgangssituation 4.

B W B B W W W

 Abbildung 1-16 Ergebnisdiagramm des Terminalbetriebs (Runde 5)

 Abbildung 1-17 Flussdiagramm zum Verschieben von Blöcken (Runde 5)

3. Quellcode

Der Quellcode wird im Ordner AStarToBlockProblem gespeichert und Sie können Main.java direkt ausführen.

/*
    主程序:Main.java
*/
// main function
public class Main {
    public static void main(String[] args) {
        AStar aStar = new AStar();
        System.out.println("Rround 1");
        aStar.run(new GameBoard("BBBWWW "));
        System.out.println("Rround 2");
        aStar.run(new GameBoard("BBB WWW"));
        System.out.println("Rround 3");
        aStar.run(new GameBoard("B BBWWW"));
        System.out.println("Rround 4");
        aStar.run(new GameBoard(" BBBWWW"));
        System.out.println("Rround 5");
        aStar.run(new GameBoard("BWB WBW"));
    }
}
/*
    子类:GameBoard.java
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class GameBoard {
    private List<Character> board;
    public GameBoard() {
        board.add('B');
        board = Arrays.asList('B', 'B', 'B', 'W', 'W', 'W', ' ');
    }
 
    public GameBoard(List<Character> board) {
        this.board = board;
    }
 
    public GameBoard(String configuration) {
        board = new ArrayList<>();
        for (int i = 0; i < configuration.length(); i++) {
            board.add(configuration.charAt(i));
        }
    }
 
    public boolean isSolved() {
        int numWhiteFound = 0;
        for (Character tile : board) {
            if (tile.equals('W')) {
                numWhiteFound++;
                if (numWhiteFound == 3) {
                    return true;
                }
            } else if (tile.equals('B')) {
                return false;
            }
        }
        return false;
    }
 
    public List<GameBoard> getPossibleMoves() {
        int indexOfSpace = board.indexOf(' ');
        List<GameBoard> possibleMoves = new ArrayList<>();
        for (int i = 1; i <= 3; i++) {
            if (indexOfSpace < board.size() - i) {
                GameBoard boardSlideLeft = clone();
                swap(boardSlideLeft.board, indexOfSpace, indexOfSpace+i);
                possibleMoves.add(boardSlideLeft);
            }
        }
        for (int i = 0; i <= 2; i++) {
            if (indexOfSpace > i) {
                GameBoard boardSlideRight = clone();
                swap(boardSlideRight.board, indexOfSpace, indexOfSpace-(i+1));
                possibleMoves.add(boardSlideRight);
            }
        }
        return possibleMoves;
    }
 
    private void swap(List<Character> list, int index1, int index2) {
        Character temp = list.get(index1);
        list.set(index1, list.get(index2));
        list.set(index2, temp);
    }
 
    @Override
    public GameBoard clone() {
        return new GameBoard(new ArrayList<>(board));
    }
 
    public List<Character> getBoard() {
        return board;
    }
 
    public void setBoard(List<Character> board) {
        this.board = board;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        GameBoard gameBoard = (GameBoard) o;
        return Objects.equals(board, gameBoard.board);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(board);
    }
 
    @Override
    public String toString() {
        return board.toString();
    }
}
/*
    子类:Heuristic.java
*/
public class Heuristic {
    public static int easyHeuristic(GameBoard gameBoard) {
        int num = 0;
        for (Character character : gameBoard.getBoard()) {
            if (character.equals('B')) {
                num++;
            } else if (character.equals('W')) {
                return num;
            }
        }
        return num;
    }
}
/*
    子类:Astar.java
*/
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
public class AStar {
    public AStar() {
    }
 
    public void run(GameBoard startingGameboard) {
        PriorityQueue<Path> frontier = new PriorityQueue<>();
        List<GameBoard> closed = new ArrayList<>();
        frontier.add(new Path(startingGameboard));
        while(!frontier.isEmpty()) {
            Path path = frontier.poll();
            if (path.getLastItem().isSolved()) {
                System.out.println(path);
                return;
            }
            closed.add(path.getLastItem());
            for (GameBoard gameBoard : path.getLastItem().getPossibleMoves()) {
                if (!closed.contains(gameBoard)) {
                    Path cloned = path.clone();
                    cloned.addToPath(gameBoard, costBetweenMoves(gameBoard, path.getLastItem()));
                    frontier.add(cloned);
                }
            }
        }
        System.out.println("No solution found!");
    }
 
    private int costBetweenMoves(GameBoard board1, GameBoard board2) {
        int index1 = board1.getBoard().indexOf(' ');
        int index2 = board2.getBoard().indexOf(' ');
        if (Math.abs(index1 - index2) == 3) {
            return 2;
        }
        return 1;
    }
}
/*
    子类:Path.java
*/
import java.util.ArrayList;
import java.util.List;
public class Path implements Comparable<Path> {
    private int cost = 0;
    private List<GameBoard> boards;
    public Path() {
        boards = new ArrayList<>();
    }
 
    public Path(GameBoard gameBoard) {
        this();
        boards.add(gameBoard);
    }
 
    public void addToPath(GameBoard gameBoard, int cost) {
        boards.add(gameBoard);
        this.cost += cost;
    }
 
    public int getCost() {
        return cost;
    }
 
    public List<GameBoard> getBoards() {
        return boards;
    }
 
    public GameBoard getLastItem() {
        return boards.get(boards.size() - 1);
    }
 
    public int getCostIncludingHeuristic() {
        int heuristic = 0;
        if (!boards.isEmpty()) {
            heuristic = Heuristic.easyHeuristic(boards.get(boards.size() -1));
        }
        return cost + heuristic;
    }
 
    public int compareTo(Path other) {
        return getCostIncludingHeuristic() - other.getCostIncludingHeuristic();
    }
 
    @Override
    public Path clone() {
        Path other = new Path();
        other.cost = cost;
        other.boards = new ArrayList<>(boards);
        return other;
    }
 
    @Override
    public String toString() {
        String str = "Cost: " + cost + "\n";
        for (GameBoard board : boards) {
            str += board + "\n";
        }
        return str;
    }
}

1.4 Analyse und Lösung von Problem 4

F4: Was ist Argumentation? Was sind die wichtigsten Argumentationsarten? Was sind die Merkmale der einzelnen Argumentationsarten? Gehen Sie davon aus, dass folgende Fakten bekannt sind:

       (1) Studierende des Fachbereichs Informatik müssen Programmierkurse belegen;

       (2) Die C-Sprache ist ein Programmierkurs.

       (3) Xiao Wang ist Studentin in der Computerabteilung.

Überprüfung: Xiao Wang hat die Sprache C gelernt .

1.4.1 Was ist Argumentation?

       Unter Argumentation versteht man das Erreichen von Schlussfolgerungen durch eine bestimmte Strategie auf der Grundlage bekannter Fakten (Beweise) und Wissen. Frühe Arbeiten zum automatisierten Denken konzentrierten sich auf den Beweis maschineller Theoreme. Das zentrale Problem des maschinellen Theorembeweises besteht darin, herauszufinden, ob die Entscheidungsformel ein gültiges (oder inkonsistentes) allgemeines Verfahren ist. Im Jahr 1930 etablierte Herbrand eine wichtige Methode zum Beweis von Theoremen, und seine Methode legte den Grundstein für den Beweis von maschinellen Theoremen. Die Hauptarbeit zum Beweis des Maschinensatzes wurde 1965 von Robinson geleistet. Er etablierte das sogenannte Reduktionsprinzip, das den Beweis des Maschinensatzes zur Anwendungsstufe brachte. Später erschienen natürliche Ableitungsmethoden und Gleichungsumschreibungen. Diese Methoden sind der Reduktionsmethode in einigen Aspekten überlegen, weisen jedoch alle naturgemäß Kombinationsprobleme auf und sind durch ihre Widerspenstigkeit eingeschränkt.

1.4.2 Was sind die wichtigsten Argumentationsmethoden? Was sind die Merkmale der einzelnen Argumentationsarten?

       Je nach Argumentationsrichtung können Argumentationsmethoden in Vorwärtsargumentation und Rückwärtsargumentation unterteilt werden. Vorwärtsdenken ist die vorwärtsgerichtete Verwendung von Regeln, um ausgehend von bekannten Bedingungen auf das Ziel hinzuarbeiten. Die Grundidee besteht darin, zu überprüfen, ob die Prämisse einer Regel durch die bekannten Fakten in der dynamischen Datenbank erfüllt ist. Wenn sie erfüllt ist, wird die Schlussfolgerung der Regel in die dynamische Datenbank eingefügt und dann überprüft, ob die Prämisse anderer Regeln erfüllt ist ; Wiederholen Sie den Vorgang. Der Vorgang wird fortgesetzt, bis das Ziel durch eine bestimmte Regel verdrängt wird oder keine neue Schlussfolgerung mehr verdrängt wird. Da diese Argumentationsmethode von der Prämisse der Regel zur Schlussfolgerung führt, wird sie als Vorwärtsargumentation bezeichnet. Da beim Vorwärtsdenken Daten in einer dynamischen Datenbank zum „Auslösen“ von Regeln für das Denken verwendet werden, wird es auch als datengesteuertes Denken bezeichnet. Reverse Reasoning, auch Reverse Reasoning genannt, ist die umgekehrte Verwendung von Regeln. Zunächst wird das Ziel als Hypothese verwendet, um zu sehen, ob es eine Regel gibt, die die Hypothese stützt, d die Hypothese, und schauen Sie sich dann die Regeln an, deren Schlussfolgerung mit der Hypothese übereinstimmt. Ob die Prämisse begründet ist. Wenn die Prämisse etabliert ist (in der dynamischen Datenbank abgeglichen wird), wird die Hypothese verifiziert und die Schlussfolgerung in die dynamische Datenbank eingegeben; andernfalls wird die Prämisse der Regel zum Hypothesensatz hinzugefügt und diese Hypothesen werden eine nach der anderen verifiziert, bis die Zielhypothese wird verifiziert. Da das umgekehrte Denken von der Annahme ausgeht, dass das Lösungsziel festgelegt ist, und Regeln zum Rückwärtsdenken verwendet, wird es auch als zielorientiertes Denken bezeichnet. Das Denken kann in deterministisches Denken und Unsicherheitsdenken unterteilt werden. Deterministisches Denken, jede Regel ist deterministisch, und die vom Benutzer angegebenen Fakten sind ebenfalls deterministisch, aber Zufälligkeit, Unschärfe und Unvollständigkeit können dazu führen. Nichtdeterminismus, diese nichtdeterministischen Probleme erfordern nicht- deterministisches Denken.

       Im Verlauf kann die logische Grundlage des Denkens in deduktives Denken, induktives Denken und Standarddenken unterteilt werden. Deduktives Denken: der Prozess des Denkens ausgehend von bekanntem Allgemeinwissen zu einer Schlussfolgerung, die für eine individuelle Situation geeignet ist, d ist eine Methode des Denkens vom Einzelnen zum Allgemeinen; Standarddenken: Auch Standarddenken genannt, bezieht sich auf das Denken, das auf der Annahme basiert, dass bestimmte Bedingungen bereits erfüllt sind, wenn das Wissen unvollständig ist. Wenn sich während des Argumentationsprozesses herausstellt, dass die ursprüngliche Hypothese falsch ist, sollten die ursprüngliche Hypothese und alle aus der Hypothese abgeleiteten Schlussfolgerungen widerrufen und die Situation entsprechend der neuen Situation erneut behandelt werden. Entsprechend der Gewissheit des verwendeten Wissens kann es in deterministisches Denken und Unsicherheitsdenken unterteilt werden. Deterministisches Denken: Das beim Denken verwendete Wissen und die daraus abgeleiteten Schlussfolgerungen können genau ausgedrückt werden und ihr Wahrheitswert ist entweder wahr oder falsch. Ungewissheit beim Denken: Das beim Denken verwendete Wissen und die daraus abgeleiteten Schlussfolgerungen sind nicht völlig sicher und ihr Wahrheitswert liegt zwischen wahr und falsch. Entsprechend der Monotonie des Argumentationsprozesses kann er in monotones Denken und nichtmonotones Denken unterteilt werden. Monotones Denken: Während des Denkprozesses, wenn das Denken voranschreitet und neues Wissen hinzukommt, zeigen die abgeleiteten Schlussfolgerungen einen monoton zunehmenden Trend und kommen dem Endziel immer näher. Es wird keine Wiederholungen im Denkprozess geben, d. h. Es wird keine Wiederholungen geben. Durch die Hinzufügung neuer Erkenntnisse wird die zuvor abgeleitete Schlussfolgerung zunichte gemacht, sodass die Argumentation zu einem bestimmten vorherigen Schritt zurückkehrt. Nicht-monotones Denken: Während des Denkprozesses stärkt das Hinzufügen neuen Wissens die abgeleitete Schlussfolgerung nicht nur nicht, sondern negiert sie auch, was dazu führt, dass das Denken zu einem vorherigen Schritt zurückkehrt und von vorne beginnt. Nichtmonotones Denken liegt vor, wenn das Wissen unvollständig ist.

1.4.3 Argumentationsbeispiele

Gehen Sie davon aus, dass folgende Fakten bekannt sind:

       (1) Studierende des Fachbereichs Informatik müssen Programmierkurse belegen;

       (2) Die C-Sprache ist ein Programmierkurs.

       (3) Xiao Wang ist Studentin in der Computerabteilung.

Überprüfung: Xiao Wang hat die Sprache C gelernt.

Beweis: Weil

       Xiao Wang ist Studentin am Fachbereich Informatik. Alle Studierenden des Fachbereichs Informatik müssen Programmierkurse belegen.

       Also belegt Xiao Wang einen Programmierkurs

       Weil C-Sprache ein Programmierkurs ist

       Also hat Xiao Wang die C-Sprache gelernt.


 Weitere Kapitel der Kursaufgabe „Künstliche Intelligenz und maschinelles Lernen“: 2. Funktionsnäherung ; 3. Fuzzy-Logik ; 4. Funktionsoptimierung

Guess you like

Origin blog.csdn.net/HISJJ/article/details/130298027