Автор: Андрей
Мне нравится игра "Пятнашки". Её можно сократить до "Пятёрок" |
|
Ну “пятерки” так “пятерки”.
Возможно я не совсем понял что Вы имели ввиду под словами “ начинать надо с обучения передвигать фишку из точки А в точку Б. Кто первый честно научит робота просто двигать пальцем по команде - станет мегагуру ИИ”
Но, я думаю, походу дела разберёмся
Методику составления “пятерок” я вижу так:
Мы имеем шестиместную плашку (М1, M2,…,M6)
M1 M2 M3
M4 M5 M6
Имеем пять костяшек-фишек (F1,F2,…,F5). Каждая фишка в определенный момент занимает какое-то одно место.
Ну и имеем одно свободное место “дырку” – D
Для начала нужно придумать какую-то простенькую логику. Пусть она будет такой:
(предлагаю сразу пояснять примером)
Введем понятие различия состояния плашки через суммарное число ”сдвигов”, необходимых для перевода текущего состояния плашки в целевое (целевое состояние достигнуто, когда все номера фишек совпадают с номерами мест, а шестое место занимает D)
Так, для примера
F2 _D_F1
F4 F5 F3
Для F1 нужно осуществить 2 сдвига, для F3 – один, для F2 – один, а для F4 – ноль
В сумме нужно 4-ре сдвига. Понятие сдвиг несколько формальное.
Для устранения несоответствия текущего состояния плашки и целевого, можно использовать 4-ре оператора (сдвинуть в дырку левую фишку, правую, верхнюю, нижнюю)
Цель – уменьшить общее кол-во сдвигов, требующееся для достижения целевого состояния.
Если несколько возможных сдвигов приводят к одинаковым результатам (например, уменьшение общего кол-ва сдвигов на 1), то сдвигается фишка, стоящая на месте с меньшим номером.
Если сдвиги не уменьшают общего кол-ва, то так же двигается фишка, стоящая на месте с меньшим номером и т.п.
Ну это вроде Вашего “создавал новые знания (методом тыка!)”
Результаты сдвигов (состояния плашки) запоминаются.
Перед тем как осуществить новый сдвиг, необходимо посмотреть (вспомнить) не встречалось ли формируемое состояние ранее, если встречалось, то сделать иной допустимый сдвиг (типа “память – опыт”), чтобы не топтаться на месте. Человеку приходится порой несколько раз по кругу погонять фишки, прежде чем он вспомни, что подобная ситуация уже наблюдалась
“Обратные” сдвиги запрещены (т.е. если сдвинули F2 c M1 на M2, то следующим шагом нельзя сдвинуть её обратно )
Ну как-то так...
Большого труда запрограммировать данную методику не составит труда, было бы время )
На больших плашках имет смысл учитывать не сумму всех сдвигов до целевого состояния,а только влияние возможных замещений D (чтобы более походило на логику человека)