Ich habe darüber nachgedacht, ein Logikspiel zu entwickeln, das Einsteins Puzzle ähnelt und bei jeder neuen Spielwiederholung unterschiedliche Hinweise enthält.
Welche Datenstrukturen würden Sie verwenden, um mit den verschiedenen Entitäten (Haustiere, Hausfarben, Nationalitäten usw.), Abzugsregeln usw. umzugehen, um sicherzustellen, dass die von Ihnen angegebenen Hinweise auf eine einzigartige Lösung hinweisen?
Es fällt mir schwer darüber nachzudenken, wie ich die Abzugsregeln dazu bringen kann, mit den möglichen Hinweisen zu spielen. Jeder Einblick wäre dankbar.
logic
data-structure
puzzle
taserian
quelle
quelle
Antworten:
Beeindruckend. Dies scheint tatsächlich eine Situation zu sein, in der semantische KI-Netze der alten Schule, wie Richard Bartle dachte, dass sie für die Zukunft von Spielen wichtig sein würden, als er Künstliche Intelligenz und Computerspiele schrieb , nützlich wären. Grundsätzlich haben Sie ein paar Datenlisten (Datenbanktabellen, was auch immer), von denen die erste Regeln festlegt, wie Dinge miteinander in Beziehung stehen können, wie zum Beispiel:
Dann haben Sie Instanzen der Kategorien:
Diese Datenstrukturen kapseln die Situation nicht vollständig - Sie benötigen die Eindeutigkeitsbeschränkungen, und einige der Kategorien benötigen Metaregeln, z. B.
POSITION
die Behandlung von "rechts von", "links von" und "next" zu "Konzepten zum Beispiel - aber die Struktur des Problems scheint sie stark zu suggerieren.Keine Ahnung, ob dies Sie sehr weit bringen wird, aber ich hoffe, es hilft.
quelle
Ich empfehle, den Python-Code für Constraint Satisfaction Problems (CSPs) zu lesen, der im AIMA-Projekt enthalten ist . Sie verwenden ein Wörterbuch (assoziative Array- / Hash-Tabelle), um gültige Einschränkungen zu verfolgen. Es gibt auch Implementierungen mehrerer Algorithmen, die zur Lösung von CSPs verwendet werden, wie z. B. Min-Konflikte und AC3.
Der Code enthält als Beispiel ein Beispiel für ein Zebra-Problem, wie das, mit dem Sie verknüpft haben.
quelle
Das geht eigentlich sehr tief. Seltsam, dass Wikipedia es nie erwähnt.
Was Sie suchen, sind sehr harte Beweise, die wahrscheinlich mit Dingen wie Fitch-Beweisen erreicht werden können . Wir versuchen also, Dinge aus unseren gegebenen Daten abzuleiten. Es gibt viele Fitch Proof Builder , die viel Arbeit für Sie erledigen. Aber einige Übungen sind einfach nicht zu beweisen.
Ich weiß nicht, ob der Benutzer die Berechnungen durchführen soll. Wenn ja, beachten Sie Dinge wie 3SAT , die für die Polynomzeit unlösbare Probleme darstellen.
Was die Datenstrukturen betrifft, die Sie verwenden möchten, möchten Sie eine Art
Rule
Klasse haben. Die Regel kann je nach Typ beliebig sein. Es gibt nicht viele Regeln in Prädikatenlogiken , daher kann dies durch Erben überwunden werden (if, iff und oder, not ...). Diese Regeln müssen nur ausgewertet werden. Und das einzige, was eine Regel tun kann, ist, wahr oder falsch zurückzugeben. Denn genau das machen Sie mit Prädikatenlogiken. An der Universität wurde mir empfohlen, dieses Buch von John Kelly zu lesen .Zurück zu den Klassen: Sie sollten diese Probleme so sehen, als würden Sie normale Berechnungen mit Mathematik implementieren. Was ist ein
+
Operator? Es enthält zwei Parameter, die eine neue Gleichung für sich oder nur eine Zahl sein können. Ich denke, Sie haben das gleiche mit Regeln. Sie können neue Regeln als Parameter oder nur einen Booleschen Wert (sogenanntes Prädikat) haben.Ich hoffe das hilft dir sehr, besonders die Referenzen. Wenn Sie mehr wissen wollen oder wenn ich in die falsche Richtung gehe, sagen Sie es mir bitte.
quelle
Rule
Unterricht eine gute Idee ist. Die Modellierung dieser Einschränkungen erfolgt meiner Meinung nach immer noch durch Prädikatenlogik.Ich habe keine gute Antwort, aber auf der Suche nach Hinweisen zu der gleichen Art von Problem habe ich dieses Repository auf github gefunden:
https://github.com/nateinaction/Zebra-Puzzle
Es enthält eine Logik zum Auswählen von Hinweisen und zum Entscheiden, wie viele Hinweise Sie benötigen würden, um das Rätsel lösbar zu machen.
quelle
Es gibt dies beim Lösen.
Natürlich denke ich, dass es nicht allzu schwierig wäre, rückwärts zu arbeiten. Das heißt, Sie haben eine Liste wie diese:
Fred Red Dog
Steve Blue Cat
Bill Purple Whale
Eric Cyan Dolphin
Welches könnte leicht generiert werden, und dann eine Reihe von Regeln daraus bilden.
Was die Aufbewahrung betrifft, warum nicht eine Reihe von einzelnen Dingen, also [Fred, Steve, Bill, Eric] und eine Reihe der Antworten [Fred, Red, Dog]. Dann haben Sie 'NAME macht (nicht) ACTION OBJECT'.
Ist eine einzigartige Lösung wirklich wichtig, wenn Sie sich darauf konzentrieren? Solange Ihr Spiel sie in die Listen aufteilen kann und aktivieren Sie "Set 1 enthält keinen Wal".
quelle