Структури даних для логічних ігор / Правила відрахування / Достатній набір підказок?


11

Я розмовляв над розробкою логічної гри, подібної до головоломки Ейнштейна , яка мала б різні натяки для кожної нової гри.

Які структури даних ви б використовували для обробки різних утворень (домашніх тварин, кольорів будинків, національностей тощо), правил відрахування тощо, щоб гарантувати, що надані вами підказки вказують на унікальне рішення?

Мені важко думати про те, як змусити правила відрахування грати разом з можливими підказками; будь-яке розуміння буде вдячне.


1
Я не думаю, що було б дуже цікаво грати. Після того, як ви вирішите це один раз , повторне виконання з іншими правилами не сильно відрізнятиметься від гри в судоку.
o0 '.

4
З іншого боку, люди роблять сотні судоку, перш ніж їм нудно. І якщо ви зв'язали відповіді на якусь дію у світі, а не просто набрали номер чи ім’я, люди навіть не скаржаться на це судоку.

Це нагадує мені про цю гру: nick.com/games/series.html
CeeJay

3
Я хотів би запропонувати поглянути на Еверетт Käser гри «s - він зробив тонну ігор такого роду, зокрема , Шерлок який був натхненний цієї самої головоломки, але і деякі з інших ігор, як Honeycomb готелю або його останній грі , Місіс Хадсон . Це може допомогти вам побачити подібні речі в дії.
Майкл Мадсен

@Joe: те, що ти кажеш, технічно правильно, але тут важливо знати, що ти (він) робиш. Зробити гру, схожу на судоку, це добре, якщо ви знаєте, що це робите, хоча це майже напевно призведе до лайних результатів, якщо ви думаєте, що робите щось інше.
o0 '.

Відповіді:


4

Ого. Це насправді схоже на ситуацію, коли семантичні полотна AI для старої школи, як, на думку Річарда Бартла, матимуть важливе значення для майбутнього ігор, коли він пише штучний інтелект та комп'ютерні ігри . У вас в основному є кілька списків даних (таблиці баз даних, що завгодно), перший з яких визначає правила про те, як все може стосуватися один одного, наприклад:

a PERSON must LIVE IN a DOMICILE
a PERSON must OWN an ANIMAL
a PERSON must DRINK a BEVERAGE
a PERSON must SMOKE a CIGARETTE BRAND
a PERSON must BE OF a NATIONALITY
a DOMICILE must BE IN a POSITION
a DOMICILE must BE OF a COLOR

Тоді у вас є екземпляри категорій:

ANIMAL: dog snail zebra fox horse
BEVERAGE: milk tea OJ coffee water
CIGARETTE BRAND: Kools Parliaments Luckies OldGold Chesterfields
NATIONALITY: Englishman Spaniard Ukrainian Japanese Norwegian
POSITION: first second third fourth fifth
COLOR: red green yellow ivory blue

Ці структури даних повністю не охоплюють ситуацію - потрібні обмеження унікальності, а для деяких категорій потрібні мета-правила, як-от POSITIONобробка "праворуч", "ліворуч" та "далі" наприклад, "поняттям", але структура проблеми, здається, сильно їх пропонує.

Данно, якщо це відведе вас дуже далеко, але я сподіваюся, що це допоможе.


4

Моя рекомендація - переглянути код Python для проблем задоволення обмежень (CSP), що надаються в рамках проекту AIMA . Вони використовують Словник (асоціативний масив / хеш-таблицю) для відстеження дійсних обмежень. Крім того, є реалізація декількох алгоритмів, що використовуються для вирішення CSP, таких як min-конфлікти та AC3.

Код містить зразок проблеми Zebra як приклад, як той, з яким ви зв’язалися.


1

Це насправді дуже глибоко. Дивно, що Вікіпедія ніколи про це не згадує.

Те, що ви шукаєте, - дуже важкі докази, які, ймовірно, можуть бути досягнуті за допомогою таких речей, як доказів Fitch . Тож ми намагаємось вирахувати речі з наших даних. Є багато будівельників Fitch доказів, які роблять для вас багато роботи. Але деякі вправи просто не підтверджують.

Я не знаю, чи повинен користувач робити розрахунки. Якщо це так, пам’ятайте про такі речі, як 3SAT , які є невід’ємними проблемами для поліноміального часу.

Щодо структур даних, які ви хочете використовувати, я думаю, ви хочете мати якийсь Ruleклас. Правило може бути будь-яким, залежно від типу. У логіці предикатів не так багато правил , тому це можна подолати шляхом успадкування (if, iff, and, or, not ...). Ці правила лише повинні бути оцінені. І єдине, що може зробити правило, - це повернути справжнє або хибне. Тому що це ви робите з логікою предикатів. В університеті мені рекомендували прочитати цю книгу Джона Келлі .

Повернення до класів: Ви повинні побачити ці проблеми, як, наприклад, реалізацію звичайних обчислень з математики. Що таке +оператор? Він містить два параметри, які можуть бути новим рівнянням самі по собі, або просто число. Я думаю, у вас те ж саме з Правилами. Вони можуть мати нові правила як параметр або просто булеві (так званий предикат).

Я сподіваюся, що це вам дуже допоможе, особливо посилання. Якщо ви хочете дізнатися більше, або якщо я йду в неправильному напрямку, будь ласка, скажіть мені.


Проблема - це не просто докази предикативної логіки над обмеженою (і крихітною!) Моделлю, або я б відповів, а не ставив щедрості. Мета - не вирішити проблему - мета - автоматично зробити проблему цікавим чином.

@Joe Проблема, навіть для крихітного набору, все одно буде проблемою 3SAT. Якщо ви створюєте лише І-і-ІЛИ, це може призвести до незадоволених речей, тому я думаю, що було б дуже важко просто створити випадкову головоломку. Загадка повинна містити хоча б деякі обмеження. Іноді, зворотні міркування можуть бути відповіддю (мати рішення, залишити справи)
Marnix

Загальна логіка предиката насправді складніше, ніж 3SAT; однак, сучасні алгоритми доведення дійсно дуже хороші на практиці. Крім цього, просто створити модель, головоломку та перевірити рішення можна за лінійний час - фокус полягає в тому, щоб надані обмеження створювали унікальне рішення, яке можна знайти.

@Joe, чи є такі обмеження, що ми можемо бути впевнені у створенні цієї головоломки? Ще було питання: яку структуру даних використовувати. Тому я все ще думаю, що Ruleклас - це гарна ідея. Моделювання цих обмежень все ще виконується логікою предиката, на яку я думаю.
Marnix

0

Я не маю гарної відповіді, але шукаючи підказки щодо тієї ж проблеми, я знайшов це сховище в github:

https://github.com/nateinaction/Zebra-Puzzle

Він містить деяку логіку для вибору підказки та визначення кількості підказок, які вам знадобляться, щоб зробити головоломку вирішуваною.


-1

Там це на вирішенні.

Звичайно, я думаю, що не би було надто складно працювати назад; тобто є такий список:

  • Фред Ред Собака

  • Стів Блакитний кіт

  • Біл Фіолетовий кит

  • Ерік Ціан Дельфін

Які можна легко створити, а потім скласти з цього набір правил.

Щодо зберігання, чому б не набір кожної окремої речі, так [Фред, Стів, Білл, Ерік] та набір відповіді [Фред, Ред, Собака]. Тоді є "NAME робить (не) ОБ'ЄКТ ДІЇ".

Коли ви переходите до цього, чи справді має унікальне рішення? Поки ваша гра може розділити їх на списки, і встановіть прапорець "Встановити 1 не містить китів".


2
Хитрість полягає в тому, що ви хочете, щоб проблема все ще була важкою. Якщо створені вами правила визнають 90% можливих комбінацій вагомими відповідями, це вже не цікава загадка.

Я думаю, що це правдивий момент - але чи не це рішення просто зменшити кількість наведених підказок?
Качка комуніста

1
Ні. Невизначення, швидше за все, призведе до багатьох вагомих висновків. Перевизначення, ймовірно, призведе до одного дуже очевидного висновку. Хороша логічна головоломка уникає обох.

Ага так, я це якось пропустив. Я спробую і додам кращого рішення, якщо зможу придумати його.
Качка комуніста

Джо: Цілком вірно з вашим першим коментарем. Головоломка, яка дає вам змогу заклинати волю-неволі, не стільки головоломка, скільки художній проект дитячого садка.
тасеріан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.