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




Планирование поездки - часть 3


Существуют два случая:

(1)        Прямой рейс: если существует прямой рейс между пунктами Пункт1 и Пункт2, то весь маршрут состоит только из одного перелета:

        маршрут( Пункт1, Пункт2, День, [Пункт1-Пункт2 : Nр : Отпр]):-
              рейс( Пункт1, Пункт2, День, Np, Отпр, Приб).

(2)        Маршрут с пересадками: маршрут между пунктами Р1 и Р2 состоит из первого перелета из P1 в некоторый промежуточный пункт Р3 и маршрута между Р3 и Р2. Кроме того, между окончанием первого перелета и отправлением во второй необходимо оставить достаточно времени для пересадки.

        маршрут( Р1, Р2, День, [Р1-Р3 : Nр1 : Отпр1 | Маршрут]) :-
              маршрут( Р3, Р2, День, Маршрут ),
              рейс( Р1, Р3, День, Npl, Oтпpl, Приб1),
              вр_отпр( Маршрут, Отпр2),
              пересадка( Приб1, Отпр2).

Вспомогательные отношения рейс, пересадка и вр_отпр запрограммировать легко; мы включили их в полный текст программы планировщика поездки на рис. 4.5. Там же приводится и пример базы данных расписания.

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

Вот некоторые примеры вопросов к планировщику:

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

            ?- рейс( лондон, любляна, День, _, _, _ ).



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