Saya telah memikirkan mengembangkan game logika yang mirip dengan Einstein Puzzle , yang akan memiliki set petunjuk yang berbeda untuk setiap replay game baru.
Struktur data apa yang akan Anda gunakan untuk menangani entitas yang berbeda (hewan peliharaan, warna rumah, kebangsaan, dll.), Aturan deduksi, dll. Untuk menjamin bahwa petunjuk yang Anda berikan menunjukkan solusi unik?
Saya mengalami kesulitan memikirkan bagaimana cara mendapatkan aturan deduksi untuk bermain bersama dengan kemungkinan petunjuk; wawasan apa pun akan dihargai.
logic
data-structure
puzzle
taserian
sumber
sumber
Jawaban:
Wow. Ini sebenarnya tampak seperti situasi di mana web semantik AI sekolah lama, seperti yang menurut Richard Bartle akan penting bagi masa depan game ketika ia menulis Artificial Intelligence dan Computer Games , akan bermanfaat. Anda pada dasarnya memiliki beberapa daftar data (tabel database, apa pun), yang pertama menentukan aturan tentang bagaimana hal-hal dapat saling berhubungan, seperti:
Maka Anda memiliki contoh kategori:
Struktur data ini tidak sepenuhnya merangkum situasi - Anda memerlukan batasan keunikan, dan beberapa kategori memerlukan meta-rules, seperti
POSITION
penanganan kebutuhan "di sebelah kanan", "di sebelah kiri", dan "berikutnya untuk "konsep, misalnya - tetapi struktur masalah tampaknya sangat menyarankan mereka.Tidak tahu apakah ini akan membawa Anda terlalu jauh, tapi saya harap ini membantu.
sumber
Rekomendasi saya adalah melihat kode Python untuk Constraint Satisfaction Problems (CSPs) yang disediakan dengan proyek AIMA . Mereka menggunakan Kamus (array asosiatif / tabel hash) untuk melacak kendala yang valid. Juga, ada implementasi dari beberapa algoritma yang digunakan untuk menyelesaikan CSP, seperti konflik kecil dan AC3.
Kode termasuk contoh masalah Zebra sebagai contoh, seperti yang Anda tautkan.
sumber
Ini sebenarnya sangat dalam. Aneh bahwa Wikipedia tidak pernah menyebutkannya.
Apa yang Anda cari adalah bukti yang sangat sulit yang mungkin, bisa dicapai dengan hal-hal seperti bukti Fitch . Jadi kami mencoba untuk mengurangi hal-hal dari data yang kami berikan. Ada banyak pembangun bukti Fitch yang melakukan banyak pekerjaan untuk Anda. Tetapi beberapa latihan tidak membuktikan.
Saya tidak tahu apakah pengguna harus melakukan perhitungan. Jika demikian, perhatikan hal-hal seperti 3SAT , yang merupakan masalah yang tidak dapat diatasi untuk waktu polinomial.
Adapun struktur data yang ingin Anda gunakan, saya pikir Anda ingin memiliki semacam
Rule
kelas. Aturannya bisa apa saja, tergantung jenisnya. Tidak ada banyak aturan dalam logika predikat , jadi ini bisa diatasi dengan mewarisi (jika, iff, dan, atau, tidak ...). Aturan-aturan ini hanya perlu dievaluasi. Dan satu-satunya hal yang dapat dilakukan aturan, adalah mengembalikan benar atau salah. Karena itulah yang Anda lakukan dengan predikat logika. Di universitas, saya direkomendasikan untuk membaca buku ini oleh John Kelly .Kembali ke kelas: Anda akan melihat masalah-masalah ini seperti yang Anda lihat menerapkan perhitungan normal dengan matematika. Apa itu
+
operator? Ini berisi dua parameter, yang bisa berupa persamaan baru dengan sendirinya, atau hanya angka. Saya pikir Anda memiliki hal yang sama dengan Aturan. Mereka dapat memiliki Aturan baru sebagai parameter, atau hanya boolean (disebut predikat).Saya harap ini banyak membantu Anda, terutama referensi. Jika Anda ingin tahu lebih banyak, atau jika saya pergi ke arah yang salah, tolong beri tahu saya.
sumber
Rule
kelas adalah ide yang bagus. Pemodelan kendala ini masih dilakukan oleh predikat logika saya rasa.Saya tidak punya jawaban yang baik, tetapi mencari petunjuk tentang masalah yang sama, saya menemukan repositori ini di github:
https://github.com/nateinaction/Zebra-Puzzle
Ini berisi beberapa logika untuk memilih petunjuk dan memutuskan berapa banyak petunjuk yang Anda perlukan untuk membuat teka-teki yang dapat dipecahkan.
sumber
Ada ini untuk menyelesaikannya.
Tentu saja, saya pikir tidak akan terlalu sulit untuk bekerja mundur; yang memiliki daftar seperti ini:
Fred Red Dog
Steve Blue Cat
Bill Purple Whale
Eric Cyan Dolphin
Yang bisa dibuat dengan mudah, dan kemudian membuat seperangkat aturan dari itu.
Adapun penyimpanan, mengapa tidak satu set setiap hal yang terpisah, jadi [Fred, Steve, Bill, Eric] dan satu set jawaban [Fred, Red, Dog]. Kemudian miliki 'NAMA tidak (tidak) TINDAKAN OBYEK'.
Ketika Anda membahasnya, apakah solusi unik benar-benar penting? Selama game Anda dapat membaginya menjadi daftar, dan centang 'set 1 tidak mengandung Paus'.
sumber