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

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

Жанры

Неизвестно

Шрифт:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Откуда - Куда : Номер_рейса : Время_отправления

Мы еще будем пользоваться следующими вспомогательными предикатами:

(1) рейс( Пункт1, Пункт2, День, N_рейса, Вр_отпр, Вр_приб)

Здесь сказано, что существует рейс N_рейса между Пункт1 и Пункт2 в день недели День с указанными временами отправления и прибытия.

(2) вр_отпр( Маршрут, Время)

Время– это время отправления по маршруту Маршрут.

(3) пересадка( Время1, Время2)

Между Время1 и Время2 должен существовать промежуток не менее 40 минут для пересадки с одного рейса на другой.

Задача нахождения маршрута напоминает моделирование недетерминированного автомата из предыдущего раздела:

Состояния автомата соответствуют городам.

Переход из состояния в состояние соответствует перелету из одного города в другой.

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

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

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

(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. Там же приводится и пример базы данных расписания.

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

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

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

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

Старый, но крепкий 2

Крынов Макс
2. Культивация без насилия
Фантастика:
рпг
уся
эпическая фантастика
5.00
рейтинг книги
Старый, но крепкий 2

Неучтенный элемент. Том 5

NikL
5. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 5

Симеон Гордый

Балашов Дмитрий Михайлович
4. Государи московские
Научно-образовательная:
история
7.89
рейтинг книги
Симеон Гордый

По прозвищу Святой. Книга вторая

Евтушенко Алексей Анатольевич
2. Святой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
По прозвищу Святой. Книга вторая

Ахтимаг

Бабкин Михаил Александрович
Фантастика:
фэнтези
детективная фантастика
7.38
рейтинг книги
Ахтимаг

Кодекс Охотника. Книга ХХХ

Винокуров Юрий
30. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга ХХХ

Я снова царь. Книга XXXIII

Дрейк Сириус
33. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова царь. Книга XXXIII

Эволюционер из трущоб. Том 4

Панарин Антон
4. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 4

Император

Эберс Георг Мориц
Проза:
историческая проза
5.00
рейтинг книги
Император

Русский флаг

Борщаговский Александр Михайлович
Научно-образовательная:
история
6.25
рейтинг книги
Русский флаг

Бояръ-Аниме. Газлайтер. Том 30

Володин Григорий Григорьевич
30. История Телепата
Фантастика:
альтернативная история
аниме
фэнтези
6.67
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 30

Голодный гоблин

Карр Джон Диксон
Детективы:
классические детективы
5.00
рейтинг книги
Голодный гоблин

Лондон

Резерфорд Эдвард
The Big Book
Проза:
историческая проза
6.67
рейтинг книги
Лондон

Воплощение Похоти

Некрасов Игорь
1. Воплощение Похоти
Фантастика:
юмористическое фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Воплощение Похоти