Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КММ Лекции 01.docx
Скачиваний:
68
Добавлен:
08.04.2015
Размер:
1.83 Mб
Скачать

Мини-кейс: Маршрут Сочи - Элиста

Требуется найти наиболее короткий маршрут для проезда на автомашине из Сочи в Элисту. На схеме и в таблице показаны дороги между наиболее важными населенными пунктами – узлами дорог.

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

Город

Расстояние, км.

Город

Расстояние, км.

Армавир - Кропоткин

83

Кропоткин - Усть-Лабинск

73

Армавир - Майкоп

110

Майкоп - Туапсе

166

Армавир - Ставрополь

112

Майкоп - Усть-Лабинск

176

Армавир - Усть-Лабинск

151

Мин. Воды - Светлоград

145

Армавир - Черкесск

113

Мин. Воды - Сухуми

313

Ипатово - Кропоткин

230

Мин. Воды - Черкесск

90

Ипатово - Светлоград

94

Светлоград - Ставрополь

84

Ипатово - Элиста

130

Сочи - Сухуми

130

Краснодар - Тихорецк

143

Сочи - Туапсе

82

Краснодар - Туапсе

160

Ставрополь - Черкесск

110

Краснодар - Усть-Лабинск

68

Сухуми - Черкесск

240

Кропоткин - Ставрополь

150

Тихорецк - Усть-Лабинск

105

Кропоткин - Тихорецк

64

Тихорецк - Элиста

406

  1. Определите кратчайший по расстоянию маршрут, без учета каких-либо предпочтений по маршруту.

  1. Как увеличится длина маршрута, если в пути необходимо посетить Мин. Воды? Тихорецк?

Решение задачи.

В базовом варианте эту задачу можно отнести к сетевому типу задач на кратчайший маршрут.

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

При этом необходимо добиться, чтобы один из выбранных участков включал Сочи, один Элисту, а все остальные участки пути составляли непрерывный маршрут. Чтобы получился непрерывный маршрут нужно, чтобы каждый из городов, упомянутых в таблице (кроме Сочи и Элисты, разумеется), встречался в списке два раза. В этом случае окажется, что для каждого города имеется и входящий путь и исходящий.

Следует отметить, что организовать лист Excel для решения задачи можно по-разному. Количество переменных и метод решения задачи «Поиском решения» тоже будут различны.

Мы предпочтем метод, основанный на перекрестной таблице.

Для этого построим квадратную таблицу, включающую 15 упомянутых городов. Города помимо Сочи и Элисты отсортированы в таблице по алфавиту.

В таблицу C3:Q17 нужно записать расстояние между всеми парами городов.

Предварительно заполним таблицу большими числами, символизирующими, что часть маршрутов отсутствует в реальности (запрещена), например 9999 км. Понятно, что все города соединены со всеми, но мы будем полагать, что если маршрут между двумя городами включает в себя какой-либо из остальных городов, перечисленных в таблице, то прямого пути нет. Это позволит легко модифицировать таблицу расстояний. Затем перепишем из данных известные расстояния. На следующем рисунке (Рис. 1) показана получившаяся таблица. Для удобства представления в книге таблица максимально сжата, поэтому числа 9999, не умещающиеся в ячейках, показаны в ней решетками. В файле задачи к этой таблице применено также условное форматирование, чтобы во всех ячейках содержащих число 9999 шрифт получал серый не выделяющийся цвет.

Рис. 1

Здесь нужно сказать еще несколько слов об организации данных.

Сейчас таблица содержит данные о расстояниях только над диагональю C3-Q17. Задачу можно решать и так. Но удобнее ввести в таблицу и симметричные маршруты: например, не только Армавир-Майкоп, но и Майкоп-Армавир. Опыт показывает, что это удобнее при модификации таблицы.

Средствами Excel это делается элементарно.

Скопируем диапазон C3:Q17. Щелкнем какую-нибудь ячейку снизу - С19, например, правой кнопкой мыши и выберем Специальная вставка\Транспонировать. Получим таблицу, симметричную исходной относительно диагонали и расположенную в ячейках C19:Q33. Теперь в ячейке C35, скажем, напишем формулу =ЕСЛИ(C19=C3;9999;ЕСЛИ(C19<C3;C19;C3)) и растянем до столбца Q, а затем до строки 49. Формула будет заполнять таблицу большими числами 9999, если в обеих таблицах сверху данный маршрут помечен 9999. А если это не так, то выберет меньшее из расстояний и это будет реальное расстояние между городами.

Результат вычислений из C35:Q49 снова скопируем и вставим в ячейку C3 специальной вставкой по значениям. Получим следующую таблицу (Рис. 2).

Рис. 2

Вспомогательные таблицы можно стереть.

Теперь создадим таблицу переменных. Для этого поступим как при решении транспортных задач. Скопируем диапазон B2:Q17, вставим его в ячейку B19 и сотрем таблицу расстояний C20:Q34.

В нижней таблице фон области D20:Q34 удобно подкрасить каким-нибудь пастельным цветом – это будет область переменных задачи. В каждой из ячеек может содержаться 1, показывающая, что маршрут задействован, или 0, который покажет, что маршрут не используется.

Формулы

Кроме этого в 36 строке в ячейках с D36 по O36 нужно ввести специальную формулу {=ТРАНСП(R21:R33)} – так как невозможно ввести условие, что значения в столбце R, равны соответствующим значениям в строке 35, и вводить сравнения по отдельным ячейкам очень неудобно, создадим строку 36 ТРАНСПОНИРОВАННУЮ из столбца R.

В общем, строка 36 получается из столбца R, если его «положить» на бок против часовой стрелки или отразить в зеркале, поставленном по диагонали ячеек.

Для того, чтобы это сделать, выделим область D36:O36, нажмем равно и найдем в списке функций функцию массива =ТРАНСП(…). В качестве параметра укажем столбец R21:R33 (включаем все пункты кроме начального и конечного).

Далее нужно закончить ввод формулы нажатием трех кнопоксразу:Shift+Ctrl+Enter. Удобнее нажать и держать сначала две кнопкиShift и Ctrl, а затем, не отпуская их, щелкнутьEnterили мышкой кнопкуOK. Это – стандартный прием при вводе формул массива.

Результат расчета:

Если это решение перевести на человеческий язык, получим маршрут: Сочи – Туапсе – Краснодар – Усть-Лабинск – Кропоткин – Ипатово – Элиста.

  1. Как изменить ограничения задачи для того, чтобы заехать в Мин. Воды?

  1. Что нужно изменить в задаче, чтобы минимизировать не расстояние, а время в пути?