
- •Количественные методы в менеджменте
- •Содержание курса
- •Тема 1 Линейная оптимизация
- •Кейс: На кондитерской фабрике «Алиса».
- •Надстройка «Поиск решения» (Solver) и ее диалоговое окно.
- •Подключение надстройки «Поиск решения».
- •Интерфейс «Поиск решения»
- •Постановка задачи оптимизации для надстройки «Поиск решения» ( Solver ).
- •В ms Office 2003 и 2007
- •В ms Office 2010
- •Продолжение: Жаль…, ведь мы все так любим Батончик!
- •Продолжение 2: Рыночные ограничения.
- •Продолжение 3: Что если?
- •Кейс «Инвестиционная компания»
- •Расчет финансовых характеристик.
- •Irr (всд)
- •Мини-кейс: Формирование команд
- •Мини-кейс: Ремонт автодорог.
- •Мини-кейс: Маршрут Сочи - Элиста
- •Обеденный перерыв
Мини-кейс: Маршрут Сочи - Элиста
Требуется найти наиболее короткий маршрут для проезда на автомашине из Сочи в Элисту. На схеме и в таблице показаны дороги между наиболее важными населенными пунктами – узлами дорог.
Местность вблизи Кавказа пересеченная, поэтому схема часто не дает правильного представления о реальных расстояниях между городами вдоль шоссейных дорог.
Город |
Расстояние, км. |
|
Город |
Расстояние, км. |
Армавир - Кропоткин |
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 |
Определите кратчайший по расстоянию маршрут, без учета каких-либо предпочтений по маршруту.
Как увеличится длина маршрута, если в пути необходимо посетить Мин. Воды? Тихорецк?
Решение задачи.
В базовом варианте эту задачу можно отнести к сетевому типу задач на кратчайший маршрут.
Переменные должны показывать, входит каждый из участков дорог, перечисленных в таблице, в маршрут пути или нет. Такой выбор лучше всего организовать с помощью двоичных переменных.
При этом необходимо добиться, чтобы один из выбранных участков включал Сочи, один Элисту, а все остальные участки пути составляли непрерывный маршрут. Чтобы получился непрерывный маршрут нужно, чтобы каждый из городов, упомянутых в таблице (кроме Сочи и Элисты, разумеется), встречался в списке два раза. В этом случае окажется, что для каждого города имеется и входящий путь и исходящий.
Следует отметить, что организовать лист 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. Это – стандартный прием при вводе формул массива.
Результат расчета:
Если это решение перевести на человеческий язык, получим маршрут: Сочи – Туапсе – Краснодар – Усть-Лабинск – Кропоткин – Ипатово – Элиста.
Как изменить ограничения задачи для того, чтобы заехать в Мин. Воды?
Что нужно изменить в задаче, чтобы минимизировать не расстояние, а время в пути?