Программирование на языке Пролог для искусственного интеллекта


         

представлением доски каждое решение


В соответствии с принятым в программе 1 представлением доски каждое решение имело вид

        [1/Y1, 2/Y2, 3/Y3, ..., 8/Y8]

так как ферзи расставлялись попросту в последовательных вертикалях. Никакая информация не была бы потеряна, если бы Х-координаты были пропущены. Поэтому можно применить более экономное представление позиции на доске, оставив в нем только Y-координаты ферзей:

        [Y1, Y2, Y3, ..., Y8]

Чтобы не было нападений по горизонтали, никакие два ферзя не должны занимать одну и ту же горизонталь. Это требование накладывает ограничение на Y-координаты: ферзи должны занимать все горизонтали с 1-й по 8-ю. Остается только выбрать порядок следования этих восьми номеров. Каждое решение представляет собой поэтому одну из перестановок списка:

        [1, 2, 3, 4, 5, 6, 7, 8]

Такая перестановка S является решением, если каждый ферзь в ней не находится под боем (список S - "безопасный"). Поэтому мы можем написать:

        решение( S) :-

              перестановка( [1, 2, 3, 4, 5, 6, 7, 8], S),

              безопасный( S).




Рис. 4. 8.    (а)     Расстояние по Х между Ферзь и Остальные

равно 1.

(b)    Расстояние по Х между Ферзь

и Остальные равно 3

Отношение перестановка мы уже определила в гл. 3, а вот отношение безопасный

нужно еще определить. Это определение можно разбить на два случая:

(1)        S - пустой список. Тогда он, конечно, безопасный, ведь нападать не на кого.

(2)        S - непустой список вида [Ферзь | Остальные]. Он безопасный, если список Остальные - безопасный и Ферзь

не бьет ни одного ферзя из списка Остальные.

На Прологе это выглядит так:


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий