ВУЗ:
Составители:
Рубрика:
66
В качестве второго примера решения таких задач рассмотрим задачу
нахождения плана переупорядочивания кубиков, представленную на
следующем рисунке.
На каждом шаге разрешается переставлять только один кубик. Кубик
можно взять только тогда, когда его верхняя поверхность свободна. Кубик
можно поставить либо на стол, либо на другой кубик. Для того,
чтобы
получить требумое состояние, необходимо получить последовательность
ходов, реализующую данную трансформацию. В качестве примера будет
рассмотрен общий случай данной задачи, когда имеется произвольное число
кубиков в столбиках. Число столбиков ограничено некоторым максимальным
значением.
Проблемную ситуацию можно представить как список столбиков.
Каждый столбик, в свою очередь, представляется списком кубиков, из
которых он
составлен. Кубики упорядочены в списке таким образом, что
самый верхний кубик находится в голове списка. «Пустые» столбики
изображаются как пустые списки. Таким образом, исходную ситуацию на
рисунке можно записать как терм [[c, a, b], [], []].
Целевая ситуация- это любая конфигурация кубиков, содержащая
столбик, составленный из имеющихся кубиков в указанном порядке. Таких
ситуаций три:
[[a, b, c], [], []];
[[], [a, b, c], []];
[[], [], [a, b, c]].
Пример 75: решение задачи о перемещении кубиков.
domains
list=symbol*
% описывает состояние одного столбика кубиков
sit=list*
% описывает состояние всех столбиков
sits=sit*
% описывает путь из начальной вершины в целевую вершину
predicates
after(sit,sit)
% определяет переход из одной вершины пространства состояния в
другую, то есть описывает все возможные правила перекладывания кубиков
C
A
B
A
B
C
Страницы
- « первая
- ‹ предыдущая
- …
- 64
- 65
- 66
- 67
- 68
- …
- следующая ›
- последняя »