Чтение онлайн

на главную - закладки

Жанры

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

Братко Иван

Шрифт:

• Отношение

переход
автомата соответствует отношению
расписание
.

• Модель автомата находит путь в графе переходов между исходным и конечным состояниями; планировщик поездки находит маршрут между начальным н конечным пунктами поездки.

Неудивительно поэтому, что отношение

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

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

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

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

 рейс( Пункт1, Пункт2, День, Np, Отпр, Приб).

(2) Маршрут с пересадками: маршрут между пунктами

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

маршрут( P1, Р2, День, [P1-Р3 : Nр1 : Отпр1 | Маршрут]) :-

 маршрут( Р3, Р2, День, Маршрут ),

 рейс( P1, Р3, День, Npl, Oтпpl, Приб1),

 вр_отпр( Маршрут, Отпр2),

 пересадка( Приб1, Отпр2).

Вспомогательные отношения

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

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

% ПЛАНИРОВЩИК ВОЗДУШНЫХ МАРШРУТОВ

:- op( 50, xfy, :).

рейс( Пункт1, Пункт2, День, Np, ВрОтпр, ВрПриб) :-

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

 принадлежит( ВрОтпр / ВрПриб / Nр / СписДней, СписРейсов),

 день_выл( День, СписДней).

принадлежит( X, [X | L] ).

принадлежит( X, [Y | L] ) :-

 принадлежит( X, L ).

день_выл( День, СписДней) :-

 принадлежит( День, СписДней).

день_выл( День, ежедневно) :-

 принадлежит( День, [пн, вт, ср, чт, пт, сб, вс] ).

маршрут( P1, P2, День, [P1-Р2 : Np : ВрОтпр] ) :-

% прямой рейс

 рейс( P1, P2,
День, Np, ВрОтпр, _ ).

маршрут( P1, Р2, День, [Pl-P3 : Np1 : Oтпp1 | Маршрут]) :-

% маршрут с пересадками

 маршрут( Р3, P2, День, Маршрут ),

 рейс( P1, Р3, День, Npl, Oтпp1, Приб1),

 вр_отпр( Маршрут, Отпр2),

 пересадка( Приб1, Отпр2).

вр_отпр( [P1-Р2 : Np : Отпр | _ ], Отпр).

пересадка( Часы1 : Минуты1, Часы2 : Минуты2) :-

 60 * (Часы2-Часы1) + Минуты2 - Минуты1 >= 40

% БАЗА ДАННЫХ О РЕЙСАХ САМОЛЕТОВ

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

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

13:40 / 14:50 / ba4773 / ежедневно,

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

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

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

11:40 / 12:50 / bа4752 / ежедневно,

18:40 / 19:50 / bа4822 / [пн, вт, ср, чт, пт] ] ),

расписание( лондон, любляна,

 [13:20 / 16:20 / ju201 / [пт],

13:20 / 16:20 / ju213 / [вс] ] ).

расписание( лондон, цюрих,

 [ 9:10 / 11:45 / bа614 / ежедневно,

14:45 / 17:20 / sr805 / ежедневно ] ).

расписание( лондон, милан,

 [ 8:30 / 11:20 / bа510 / ежедневно,

11:00 / 13:50 / az459 / ежедневно ] ).

расписание( любляна, цюрих,

 [11:30 / 12:40 / ju322 / [вт,чт] ] ).

расписание( любляна, лондон,

 [11:10 / 12:20 / yu200 / [пт],

11:25 / 12:20 / yu212 / [вс] ] ).

расписание( милан, лондон,

 [ 9:10 / 10:00 / az458 / ежедневно,

12:20 / 13:10 / bа511 / ежедневно ] ).

расписание( милан, цюрих,

 [ 9:25 / 10:15 / sr621 / ежедневно,

12:45 / 13:35 / sr623 / ежедневно ] ).

расписание( цюрих, любляна,

Поделиться:
Популярные книги

Санек 2

Седой Василий
2. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 2

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

Без Чести

Щукин Иван
4. Жизни Архимага
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Без Чести

Безродный

Коган Мстислав Константинович
1. Игра не для слабых
Фантастика:
боевая фантастика
альтернативная история
6.67
рейтинг книги
Безродный

Огненный князь

Машуков Тимур
1. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь

Ваше Сиятельство 4т

Моури Эрли
4. Ваше Сиятельство
Любовные романы:
эро литература
5.00
рейтинг книги
Ваше Сиятельство 4т

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Кодекс Крови. Книга V

Борзых М.
5. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга V

Девятое правило дворянина

Герда Александр
9. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Девятое правило дворянина

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3

Под маской, или Страшилка в академии магии

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.78
рейтинг книги
Под маской, или Страшилка в академии магии