8 головоломка: Разрешимость и кратчайшее решение

Я создал решатель 8 головоломок, используя поиск в ширину. Теперь я хотел бы изменить код для использования эвристики. Буду признателен, если кто-нибудь ответит на следующие два вопроса:

Решаемость

Как мы решаем, разрешима ли головоломка 8? (данные начальное состояние и целевое состояние) Вот что говорит Википедия:

Инвариант - это четность перестановки всех 16 квадратов плюс четность расстояния такси (количество строк плюс количество столбцов) пустого квадрата от нижнего правого угла.

К сожалению, я не мог понять, что это значит. Было немного сложно понять. Может кто-нибудь объяснить на более простом языке?

Самое короткое решение

Учитывая эвристику, гарантируется ли кратчайшее решение с использованием алгоритма A*? Чтобы быть более конкретным, будет ли первый узел в открытом списке всегда иметь глубину (или количество движений, сделанных таким жирным), которая является минимальной из глубин всех узлов, присутствующих в открытом списке?

Должна ли эвристика удовлетворять некоторым условиям, чтобы приведенное выше утверждение было верным?

Правка : Как получается, что допустимая эвристика всегда обеспечивает оптимальное решение? И как проверить, допустима ли эвристика?

Я бы использовал эвристики, перечисленные здесь

Manhattan Distance 
Linear Conflict 
Pattern Database 
Misplaced Tiles
Nilsson's Sequence Score 
N-MaxSwap X-Y 
Tiles out of row and column

Для уточнения от Эяля Шнайдера:

введите здесь описание изображениявведите здесь описание изображения введите здесь описание изображения



person Ranjith    schedule 17.02.2013    source источник
comment
Объявление № 2: да, алгоритм A* гарантирует нахождение оптимального решения, если вы используете допустимую эвристику (никогда не переоценивайте)   -  person John Dvorak    schedule 17.02.2013
comment
Можно ли как-нибудь проверить допустимость эвристики? Я хочу использовать различные эвристики, указанные на этой странице: heuristicswiki.wikispaces.com/N+-+Puzzle< /а>   -  person Ranjith    schedule 17.02.2013
comment
Хотелось бы, чтобы кто-нибудь смог объяснить, как проверить допустимость эвристики.   -  person Ranjith    schedule 17.02.2013


Ответы (3)


Я коснусь только вопроса разрешимости. Некоторый фон в перестановках необходим.

Перестановка — это переупорядочивание упорядоченного множества. Например, 2134 — это переупорядочивание списка 1234, где 1 и 2 меняются местами. Перестановка имеет свойство четности; это относится к четности числа инверсий. Например, в следующей перестановке видно, что существует ровно 3 инверсии (23,24,34):

1234
1432

Это означает, что перестановка имеет нечетную четность. Следующая перестановка имеет четную четность (12, 34):

1234
2143

Естественно, тождественная перестановка (которая сохраняет порядок элементов) имеет четную четность.

Любое состояние в головоломке 15 (или головоломке 8) можно рассматривать как перестановку конечного состояния, если рассматривать его как конкатенацию строк, начиная с первой строки. Обратите внимание, что каждый допустимый ход изменяет четность перестановки (поскольку мы меняем местами два элемента, и количество инверсий, включающих элементы между ними, должно быть четным). Следовательно, если вы знаете, что пустой квадрат должен пройти четное количество шагов, чтобы достичь своего конечного состояния, то перестановка также должна быть четной. В противном случае вы получите нечетную перестановку конечного состояния, которая обязательно отличается от него. То же самое с нечетным количеством шагов для пустого квадрата.

Согласно предоставленной вами ссылке в Википедии, приведенные выше критерии достаточны и необходимы для решения данной головоломки.

person Eyal Schneider    schedule 17.02.2013
comment
Я понял, что означает паритет. Теперь перейдем к предложению: четность перестановки всех 9 квадратов плюс четность расстояния такси (количество строк плюс количество столбцов) пустого квадрата из правого нижнего угла Итак, мы получим четность состояние как целое число, рассматривая его как перестановку целевого состояния, которое следует добавить к некоторому другому числу. ( паритет расстояния такси ) Теперь, разве расстояние такси само по себе не является числом? Что означает его паритет? - person Ranjith; 17.02.2013
comment
@Ranjith: это означает простую четность числа. Вы можете рассматривать его как 0 и 1, поэтому добавление четности просто проверяет четность суммы. - person Eyal Schneider; 17.02.2013
comment
@Ranjith: Теперь критерии разрешимости просты: головоломка разрешима тогда и только тогда, когда следующие два равны: 1) четность количества шагов, которые должен сделать пустой квадрат (просто вычислите четность манхэттенского расстояния между начальное и конечное положение). 2) Четность перестановки, представленной начальным состоянием, по сравнению с целевым состоянием. - person Eyal Schneider; 17.02.2013
comment
Я отредактировал вопрос и добавил три изображения: первое изображение, показывающее одно состояние и два состояния цели. Второе и третье изображения показывают, можно ли достичь двух целевых состояний. Не могли бы вы посмотреть на них и сказать, правильно ли я это сделал или нет. Я хочу быть уверен, что я все правильно понял. - person Ranjith; 17.02.2013
comment
@Ranjith-SR2GF: Да, вроде все нормально, за исключением опечатки в случае B, где число 3 представлено как четное число... - person Eyal Schneider; 17.02.2013
comment
Любая идея о каком-то конкретном методе проверки допустимости эвристической функции, отличном от проб и ошибок... - person Ranjith; 17.02.2013
comment
@Ranjith-SR2GF: Вы должны доказать, что ваша эвристическая функция допустима. - person Eyal Schneider; 17.02.2013

Алгоритм A* гарантированно находит (одно, если имеется более одного одинакового короткого решения) кратчайшее решение, если ваша эвристика всегда недооценивает реальные затраты (в вашем случае реальное количество необходимых ходов для решения).

Но на лету я не могу придумать хорошую эвристику для вашей проблемы. Нужно немного подумать, чтобы найти такую ​​эвристику.

Настоящее искусство использования A* состоит в том, чтобы найти эвристику, которая всегда занижает реальные затраты, но как можно меньше ускоряет поиск.


Первые идеи для такой эвристики:

  1. Довольно простая, но верная эвристика, которая всплыла в моей голове, — это манхэттенское расстояние от пустого поля до конечного пункта назначения.
  2. Сумма манхэттенского расстояния каждого поля до его конечного пункта назначения, деленная на максимальное количество полей, которые могут изменить положение за один ход. (Я думаю, что это довольно хорошая эвристика)
person MrSmith42    schedule 17.02.2013
comment
Любая идея о части разрешимости? - person Ranjith; 17.02.2013
comment
@Ranjith - SR2GF: я еще не знаю, что такое разрешимость. Наивный способ: попробуй найти решение, если его нет, то и не найдешь ;-) - person MrSmith42; 17.02.2013
comment
Но это займет много времени! - person Ranjith; 17.02.2013
comment
@Ranjith - SR2GF: О разрешимости: 1. В целом эти головоломки решаемы. 2. Неразрешимую головоломку можно сделать разрешимой, если в начале поменять местами два соседних поля. Таким образом, одна из возможностей состоит в том, чтобы попытаться решить головоломку и параллельно попытаться решить головоломку, поменяв местами поля одной соседней пары. Если решение модифицированной версии найдено, исходная головоломка не разрешима. - person MrSmith42; 17.02.2013
comment
Это хорошая идея — параллельно решать исходную и замененную головоломки. Было бы лучше, если бы я мог напрямую проверить разрешимость. - person Ranjith; 17.02.2013
comment
Спасибо за ответ на вторую часть вопроса. - person Ranjith; 17.02.2013

Для всех, кто придет, я попытаюсь объяснить, как ОП получил пары значений, а также как он определяет выделенные, то есть инверсии, поскольку мне потребовалось несколько часов, чтобы понять это. Сначала пары. Сначала возьмите целевое состояние и представьте его как одномерный массив (например, A) [1,2,3,8,0,4,7,5]. Каждое значение в этом массиве имеет свой собственный столбец в таблице (идущий вниз, что является первым значением пары). Затем переместитесь на 1 значение вправо в массиве (i + 1) и пройдите весь путь снова вниз, значение второй пары. например (состояние A): первый столбец, второе значение начнет [2,3,8,0,4,7,5] уменьшаться. второй столбец начнется [3,8,0,4,7,5] и т. д..

хорошо теперь для инверсий. для каждого из двух парных значений найдите их местоположение INDEX в начальном состоянии. если левый ИНДЕКС > правый ИНДЕКС, то это инверсия (выделено). первые четыре пары состояния A: (1,2),(1,3),(1,8),(1,0)
1 находится в индексе 3
2 находится в индексе 0
3 > 0, поэтому инверсия.

1 равно 3
3 равно 2
3 > 2, поэтому инверсия

1 – это 3
8 – это 1
3 > 2, поэтому инверсия

1 равно 3
0 равно 7
3 ‹ 7, поэтому нет инверсии

Сделайте это для каждой пары и подсчитайте общее количество инверсий. Если оба четные или оба нечетные (Манхэттенское расстояние белого пятна и общее количество инверсий), то это разрешимо. Надеюсь это поможет!

person David    schedule 02.01.2017