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



4.5. Зацикливание при вычислении >допускается можно предотвратить, например, таким способом: подсчитывать число переходов, сделанных к настоящему моменту. При этом модель должна будет искать пути только некоторой ограниченной длины. Модифицируйте так отношение >допускается. Указание: добавьте третий аргумент — максимально допустимое число переходов:

>допускается( Состояние, Цепочка, Макс_переходов)

4.4. Планирование поездки

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

• По каким дням недели есть прямые рейсы из Лондона в Любляну?

• Как в четверг можно добраться из Любляны в Эдинбург?

• Мне нужно посетить Милан, Любляну и Цюрих; вылетать нужно из Лондона во вторник и вернуться обратно в Лондон в пятницу. В какой последовательности мне следует посещать эти города, чтобы ни разу на протяжении поездки не пришлось совершать более одного перелета в день.

Центральной частью программы будет база данных, содержащая информацию о рейсах. Эта информация будет представлена в виде трехаргументного отношения:

>расписание( Пункт1, Пункт2, Список_рейсов)

где >Список_рейсов — это список, состоящий из структурированных объектов вида:

>Время_отправления / Время_прибытия / Номер_рейса

> / Список_дней_вылета

>Список_дней_вылета — это либо список дней недели, либо атом "ежедневно". Одно из предложений, входящих в >расписание могло бы быть, например, таким:

>расписание( лондон, эдинбург,

> [ 9:40 / 10:50 / bа4733/ ежедневно,

>   19:40 / 20:50 / bа4833 / [пн, вт, ср, чт, пт, сб]] ).

Время представлено в виде структурированных объектов, состоящих из двух компонент — часов и минут, объединенных оператором ">:".

Главная задача состоит в отыскании точных маршрутов между двумя заданными городами в определенные дни недели. Ее решение мы будем программировать в виде четырехаргументного отношения:

>маршрут( Пункт1, Пункт2, День, Маршрут)

Здесь >Маршрут — это последовательность перелетов, удовлетворяющих следующим критериям:

(1) начальная точка маршрута находится в >Пункт1;

(2) конечная точка — в >Пункт2;

(3) все перелеты совершаются в один и тот же день недели — >День;

(4) все перелеты, входящие в >Маршрут, содержатся в определении отношения >расписание;

(5) остается достаточно времени для пересадки с рейса на рейс.

Маршрут представляется в виде списка структурированных объектов вида