Я размышлял о разработке логической игры, похожей на головоломку Эйнштейна , в которой были бы разные наборы подсказок для каждого нового игрового воспроизведения.
Какие структуры данных вы бы использовали для обработки различных объектов (домашних животных, цветов домов, национальностей и т. Д.), Правил вычетов и т. Д., Чтобы гарантировать, что предоставленные вами подсказки указывают на уникальное решение?
Мне трудно думать о том, как заставить правила дедукции подойти к возможным подсказкам; Любое понимание будет оценено.
logic
data-structure
puzzle
taserian
источник
источник
Ответы:
Вау. Это на самом деле похоже на ситуацию, когда семантические сети ИИ старой школы, как полагал Ричард Бартл, будут важны для будущего игр, когда он писал « Искусственный интеллект и компьютерные игры» , которые были бы полезны. В основном у вас есть пара списков данных (таблиц базы данных и т. Д.), Первый из которых определяет правила о том, как вещи могут относиться друг к другу, например:
Тогда у вас есть экземпляры категорий:
Эти структуры данных не полностью инкапсулируют ситуацию - вам нужны ограничения уникальности, а некоторым категориям нужны мета-правила, такие как
POSITION
обработка «справа от», «слева от» и «следующий» к «понятиям», например - но структура проблемы, кажется, настоятельно рекомендует их.Не знаю, если это приведет вас очень далеко, но я надеюсь, что это поможет.
источник
Моя рекомендация состоит в том, чтобы взглянуть на код Python для проблем удовлетворения ограничений (CSP), предоставляемый с проектом AIMA . Они используют словарь (ассоциативный массив / хэш-таблицу), чтобы отслеживать действительные ограничения. Также есть реализации нескольких алгоритмов, используемых для решения CSP, таких как минимальные конфликты и AC3.
Код включает в себя пример задачи Zebra в качестве примера, например, тот, на который вы ссылаетесь.
источник
Это идет очень глубоко на самом деле. Странно, что Википедия никогда не упоминает о нем.
То , что вы ищете очень жесткие доказательства , которые могут, вероятно, быть достигнуты с такими вещами как Fitch доказательства . Таким образом, мы пытаемся вычесть вещи из наших данных. Есть много Fitch доказательств строителей , которые делают много работы для вас. Но некоторые упражнения просто не для доказательства.
Я не знаю , если пользователь должен делать расчеты. Если да, то знать о таких вещах , как 3SAT , которые невыполнимая задача для полиномиального времени.
Что касается структур данных , которые вы хотите использовать, я думаю , что вы хотите иметь какой - то
Rule
класс. Правило может быть что угодно, в зависимости от типа. Есть не много правил в предикатных логик , так что это может быть преодолена путем наследования (если, тогда и только тогда, и, или, не ...). Эти правила должны быть оценены только. И единственное правило может сделать, это вернуть истинным или ложным. Потому что это то , что вы делаете с предикатных логик. В университете я рекомендовал читать эту книгу Джона Келли .Возвращаясь к классам: вы должны увидеть эти проблемы, как если бы вы выполняли обычные вычисления с помощью математики. Что такое
+
оператор? Она содержит два параметра, которые могут быть новое уравнение само по себе, или только номер. Я думаю, что у вас то же самое с правилами. Они могут иметь новые правила в качестве параметра или просто логическое значение (так называемый предикат).Я надеюсь, что это вам очень поможет, особенно ссылки. Если вы хотите узнать больше, или если я иду в неправильном направлении, пожалуйста, скажите мне.
источник
Rule
класс - хорошая идея. Я думаю, что моделирование этих ограничений все еще выполняется логикой предикатов.У меня нет хорошего ответа, но, ища подсказки по той же проблеме, я нашел этот репозиторий на github:
https://github.com/nateinaction/Zebra-Puzzle
Он содержит некоторую логику для выбора подсказок и решения, сколько подсказок вам понадобится, чтобы сделать головоломку разрешимой.
источник
Есть это на решение этого.
Конечно, я думаю, что не было бы слишком сложно работать задом наперед; то есть список как это:
Фред Ред Дог
Стив Блю Кэт
Билл Фиолетовый Кит
Эрик Сайан Дельфин
Которые могут быть легко сгенерированы, а затем составить набор правил из этого.
Что касается хранения, почему бы не набор каждой отдельной вещи, поэтому [Фред, Стив, Билл, Эрик] и набор ответов [Фред, Ред, Дог]. Затем имейте «ИМЯ (не) ДЕЙСТВИТЕЛЬНЫЙ ОБЪЕКТ».
Когда вы приступаете к этому, действительно ли уникальное решение имеет значение? Пока ваша игра может разбивать их на списки и проверять «набор 1 не содержит китов».
источник