Необходимо найти кратчайший путь между 2-мя заданными городами. Построим линейную модель и с помощью надстройки Поиск решения решим задачу.
В статье
Поиск решения MS EXCEL (6.3). Задача коммивояжера (полный граф, линейная модель)
рассматривались модели, в которых коммивояжёру требуется посетить все имеющиеся города. В этой задаче посещение всех городов не требуется.
Задача
Имеется 11 городов, координаты которых известны. Маршруты проложены только между некоторыми городами (неполный граф). Найти кратчайший путь между 2-мя заданными городами. Построить Линейную модель.
Создание модели
Так как даны координаты городов, то сначала найдем расстояния между ними (см.
файл примера
).
Расстояния рассчитаем с помощью формулы: =
КОРЕНЬ((ИНДЕКС($C$7:$D$17;ПОИСКПОЗ($A30;$A$7:$A$17;0);1)-ИНДЕКС($C$7:$D$17;ПОИСКПОЗ(B$29;$A$7:$A$17;0);1))^2 +(ИНДЕКС($C$7:$D$17;ПОИСКПОЗ($A30;$A$7:$A$17;0);2)-ИНДЕКС($C$7:$D$17;ПОИСКПОЗ(B$29;$A$7:$A$17;0);2))^2)
Теперь создадим линейную модель для решения задачи с помощью
Поиска решения
.
Совет
: Вводная статья про
Поиск решения
в MS EXCEL 2010
находится здесь
.
Обратите внимание, что не все города соединены сообщением (столбцы J:M), например нет прямого маршрута между Москвой и Парижем. Также для модели принципиально направление маршрута: Москва — Лондон, это не тоже самое, что Лондон-Москва (при необходимости список маршрутов можно расширить).
Переменные (выделено зеленым)
. В качестве переменных модели следует взять номера маршрутов между городами: если маршрут включен в кратчайший путь, то переменная =1, если нет, то =0.
Ограничения (выделено синим)
. Необходимо, чтобы из каждого города, в котором побывал путешественник, был входящий и выходящий маршрут. Так как входящий маршрут обозначается 1, а исходящий -1, то их сумма, равная 0, будет означать, что в город вошли и вышли (включен в кратчайший путь). Исключение составляют город – начальная точка путешествия (сумма =-1) и город – конечная точка (сумма =1). Изменяя ограничение в синем столбце, можно задавать начальные и конечные пункты путешествия.
Целевая функция (выделено красным)
.
Длина маршрута должна быть минимальной.
Примечание
: для удобства настройки
Поиска решения
используются
именованные диапазоны
.
Выберите Линейный метод поиска решения, т.к. созданная модель является линейной.
Найденное
Решение
Поиск решения
гарантировано найдет самый короткий маршрут, т.к. модель линейная.
Изменив начальный и конечный пункт путешествия, и перезапустив
Поиск решения
, получим другой маршрут.
Будьте внимательны, не все пары конечных и начальных пунктов допустимы. Например, задав путешествие из Москвы в Копенгаген,
Поиск решения
не найдет маршрут, т.к. для этого потребуется «двигаться назад», а в маршрутах между городами обратные пути не прописаны (маршруты, конечно, можно добавить в столбцы J:M, но не забудьте изменить и другие формулы).
Решение задачи коммивояжера при помощи надстройки MS Excel «Поиск решения»
Метод полного перебора
Мощным средством анализа данных MS Excel является надстройка «Поиск решения». С ее помощью можно определить, при каких значениях указанных влияющих ячеек формула в целевой ячейке принимает нужное значение (минимальное, максимальное или равное какой-либо величине). Для процедуры поиска решения можно задать ограничения, причем не обязательно, чтобы при этом использовались те же влияющие ячейки, данные которых, определяют значение целевой ячейки. Для расчета заданного значения применяются различные математические методы поиска. Вы можете установить режим, в котором полученные значения переменных автоматически заносятся в таблицу. Кроме того, результаты работы программы могут быть оформлены в виде отчета.
Программа Поиск решений – дополнительная надстройка табличного процессора MS Excel, которая предназначена для решения определенных систем уравнений, линейных и нелинейных задач оптимизации, используется с 1991 года.
Размер задачи, которую можно решить с помощью базовой версии этой программы, ограничивается такими предельными показателями: количество неизвестных (decision variable) – 200; количество формульных ограничений (explicit constraint) на неизвестные – 100; количество предельных условий (simple constraint) на неизвестные – 400.
Постановка задачи коммивояжера, которую необходимо решить посредством надстройки «Поиск решения» методом полного перебора следующая:
«Сотруднику компании ООО «Новые технологии» Петрову Н.И. необходимо обновить программный продукт автоматизированного учета в пяти организациях: А, Б, В, Г и Д. Он решил начать свой обход с организации «А», так как она находится на первом этаже дома, в котором проживает Петров. Сотруднику необходимо, спланировать свой маршрут таким образом, чтобы к концу рабочего дня обойти все организации в определенном порядке и выполнив свою работу, вернутся домой (в пункт «А»). В каком порядке Петрову следует обходить организации, чтобы его замкнутый тур был кратчайшим? Если расстояния между каждой парой организаций заданы следующей квадратной матрицей (5×5):
Решение: Разместим исходные данные на рабочем листе (рис 2.1). Заменим знак числом 10000 (на результат решения исключение пути не оказывает влияния).
Рисунок 2.1 Исходные данные задачи
Ячейка | Формула | Примечание |
B9 | = СУММ(B4:B8) | Распространяем на диапазон B9:F9 |
G4 | = СУММ(B4:F4) | Распространяем на диапазон G4:G8 |
C19 | =СУММПРОИЗВ(B4:F8;B13:F17) | Целевая функция |
E19 | =B4+C5+D6+E7+F8 | Исключение пути |
B23 | =$C$10-C10+4*C5 | Распространяем на диапазон B23:E23 |
B24 | =$D$10-C10+4*C6 | Распространяем на диапазон B24:E24 |
B25 | =$E$10-C10+4*C7 | Распространяем на диапазон B25:E25 |
B26 | =$F$10-C10+4*C8 | Распространяем на диапазон B26:E26 |
1. Запускаем надстройку MS Excel «Поиск решения» командой Сервис/ Поиск решения. И заполняем (рис. 2.2).
2. Для того чтобы выполнялись условия однократного посещения сотрудником организаций и в то же время запланированный Петровым маршрут был пройден полностью, введем ограничения: в строки B9, G4 заводим формулы из таблицы 1 и распространяем их на соответствующие диапазоны B9:F9 и G4:G8. Задаем следующие данные $B$9:$F$9=1 и $G$4:$G$8=1 в Ограничения окна «Поиск решения». Таким образом, мы можем отследить порядок обхода организаций сотрудником, оценить правильность выбора и оптимальность его маршрута.
3. Выбираем ячейку B19 и устанавливаем ее адрес в Целевую ячейку окна «Поиск решения», чтобы определить длину наикратчайшего маршрута. Для этого в ячейку B19 предварительно заносим соответствующую формулу из таблицы 1. Когда программа «Поиск решения» вычислит оптимальный маршрут Петрова и станет известен порядок обхода организаций (из Матрицы переменных) будут известны и расстояния между конкретными парами организаций. Затем при помощи простых математических подсчетов программа рассчитает протяженность оптимального маршрута.
4. Устанавливаем еще одно ограничение в окно «Поиск решения»: $E$19=0. В указанную ячейку вводим формулу из таблицы 1 и исключаем таким образом, заведомо ложный порядок движения Петрова в порядке обхода организаций.
5. В связи с тем, что ячейки диапазона B4:F8 – изменяемые, в Ограничение окна «Поиск решения» необходимо добавить строку B$4$:F$8$=двоичное.
6. Заводим в ячейки B23; B24; B25; B26 соответствующие формулы из таблицы 1 и распространяем их на следующие диапазоны: B23:E23 B24:E24; B25:E25; B26:E26 для учета всех возможных вариантов обхода организаций сотрудником и выбора из них оптимального. Формулы задаем таким образом, чтобы обеспечить исключение ложного пути, соблюдая условие задачи об обходе всех организаций по одному разу.
7. Добавляем в Ограничения окна «Поиск решения» $B$23:$E$26 ≤ 3.
Рисунок 2.2 Окно «Поиск решения»
Так как это линейная модель, то необходимо фиксировать в окне Параметры поиска решений на позицию Линейная модель и Неотрицательные значения (рис. 2.3). После того, как все поля и ячейки заполнены нажимаем кнопку «Выполнить» и появляется окно диалога с описанием результатов процесса оптимизации. Чтобы отобразить найденное решение в ячейках листа, устанавливаем переключатель «Сохранить найденное решение» и нажимаем кнопку ОК. Найденная минимальная величина помещается в целевую ячейку, а переменные ячейки заполняются оптимальными значениями переменных, которые удовлетворяют установленным ограничениям.
Рисунок 2.3 Окно «Параметры поиска решения»
Таким образом, получаем следующий результат. Если Петров переходит из организации в организацию, то на рис. 2.4 в диапазоне B4:F8 мы будем наблюдать порядок его перемещений. Если видим, что в ячейке, которая отнесена к организации «В» стоит единица, значит сотрудник посетил эту организацию следующей за пунктом «А». Если в ячейке ноль – сотрудник организацию не посещал.
Рисунок 2.4 Результаты решения задачи коммивояжера
В ходе анализа полученных результатов, приходим к выводу: наиболее оптимальным маршрут Петрова будет в том случае, если он начал свой путь с организации «А», посетит другие организации в следующем порядке «В», затем «Д», далее «Б» и «Г», из которой вернется к началу своего пути (в организацию «А»). представим путь схематически:
Длина кратчайшего маршрута (значение целевой ячейки) в результате составит – 21.
Задача решена. Кратчайший маршрут Петрова найден.
ЗАКЛЮЧЕНИЕ
Задача коммивояжера была поставлена в 1934 году. Ее сущность заключается в поиске оптимального маршрута движения при необходимости посетить все запланированные объекты с наименьшими финансовыми и временными издержками. Как правило, речь идет о простом перемещении по заданным точкам, либо с перевозкой груза небольшого формата на транспортном средстве.
Задача коммивояжера является одной из знаменитых задач теории комбинаторики и пользуется популярностью благодаря тому, что к ней сводится большое количество практических задач.
Среди современных практических приложений задачи можно выделить: доставку продуктов в магазин со склада, работу почтальона по разноске корреспонденции, мониторинг объектов (нефтяные вышки, базовые станции сотовых операторов), изготовление отверстий на специализированном станке.
Для решения задачи коммивояжера используют различные группы простейших методов: полный и случайный перебор, жадный и деревянный алгоритмы, метод имитации отжига. Широкое применение получили различные модификации более эффективных методов, таких как метод ветвей и границ, генетических алгоритмов, а также алгоритм муравьиных колоний.
В работе была поставлена задача, сводимая к задаче коммивояжера, и составлена схема оптимального маршрута, подробно рассмотрен порядок выбора кратчайшего пути при помощи использования надстройки MS Excel «Поиск решения» методом полного перебора. Результаты решения были выведены на отдельный рабочий лист Excel.
Изучение особенностей задачи коммивояжера позволило сделать следующий вывод: актуальным в настоящее время остается поиск точных и приближенных способов решения этой задачи как с теоретической, так и с практической точек зрения. Более того, темпы современной жизни меняют отношение человека ко времени, сегодня пользователь не любит ждать, изыскивает возможности сократить время ожидания, найти оптимальное решение в кратчайшие сроки. Все это свидетельствует о росте в будущем потребности в эффективном решении задач коммивояжера и иных родственных им оптимизационных задач, которые позволили бы существенно сэкономить ограниченные ресурсы организаций.
Министерство образования и науки РФ
ГБОУ СПО «Шадринский политехнический колледж»
Заведующая учебной частью
____________ Блинова Н.А.
Курсовая работа
по дисциплине «Математические методы»
на тему «Задача о коммивояжере. Метод полного перебора»
Урок по теме «Решение уравнений в среде MS Excel»
Одна из наиболее актуальных проблем компьютерного обучения – проблема отбора и использования педагогически целесообразных обучающих программ.
При изучении отдельных тем и решении некоторых задач на уроках математики в старших классах громоздкие вычисления как, например, при решении уравнений методом деления отрезка пополам или методом последовательных приближений, затмевают существо математической задачи, не дают увидеть красоту, рациональность применяемого метода решения.
В данной статье я представила те задачи, решение которых с помощью MS EXCEL позволяет получить наглядное, доступное для понимания учащимися решение, показать его логику, рациональность. Попутно учащиеся получают устойчивые навыки работы с программой.
Нахождение корней уравнения с помощью подбора параметра
Пример 1.
Пусть известно, что в штате больницы состоит 6 санитарок, 8 медсестер, 10 врачей, 3 заведующих отделениями, главный врач, заведующий аптекой, заведующая хозяйством и заведующий больницей. Общий месячный фонд зарплаты составляет 1000 000 условных единиц. Необходимо определить, какими должны быть оклады сотрудников больницы.
Решение такой задачи можно искать методом перебора. Однако в лучшем случае на это уходит много времени. Можно предложить другой способ решения. В EXCEL он реализован как поиск значения параметра формулы, удовлетворяющего ее конкретному значению.
Построим модель решения этой задачи. За основу возьмем оклад санитарки, а остальные оклады будем вычислять, исходя из него: во столько-то раз или на столько-то больше. Говоря математическим языком, каждый оклад является линейной функцией от оклада санитарки: Ai*С+Вi, где С – оклад санитарки; Аi и Вi – коэффициенты, которые для каждой должности определяют следующим образом:
- медсестра получает в 1,5 раза больше санитарки (А2=1,5; В2=0);
- врач – в 3 раза больше санитарки (А3=3; В3=0);
- заведующий отделением – на 30 y.e. больше, чем врач (А4=3; B4=30);
- заведующий аптекой – в 2 раза больше санитарки (А5=2; В5=0);
- заведующий хозяйством – на 40 y.e. больше медсестры (А6=1,5; В6=40);
- заведующий больницей – на 20 y.e. больше главного врача (А8=4; В8=20);
- главный врач – в 4 раза больше санитарки (А7=4; В7=0);
Зная количество человек на каждой должности, нашу модель можно записать как уравнение: N1*(A1*C+B1)+N2*(A2*C+B2)+. +N8*(A8*C+B8) = 1000000, где N1 – число санитарок, N2 – число медсестер и т.д.
В этом уравнении нам известны A1. A8, B1. B8 и N1. N8, а С неизвестно. Анализ уравнения показывает, что задача вычисления заработной платы свелась к решению линейного уравнения относительно С. Предположим, что зарплата у санитарки 150,00 y.e.
Введите исходные данные в рабочий лист электронной таблицы, как показано ниже.
A
B
C
D
E
F
Оклад мед. Работников
Общий фонд равен
В столбце D вычислите заработную плату для каждой должности. Например, для ячейки D4 формула расчета имеет вид =B4*$D$3+C4.
В столбце F вычислите заработную плату всех работников данной должности. Например, для ячейки F3 формула расчета имеет вид =D3*E3.
В ячейке F11вычислите суммарный фонд заработной платы больницы. Рабочий лист электронной таблицы будет выглядеть, как показано ниже.
A
B
C
D
E
F
Оклад мед. Работников
Общий фонд равен
Чтобы определите оклад санитарки так, чтобы расчетный фонд был равен заданному надо:
- Активизировать команду Подбор параметра во вкладке Данные / Работа с данными /Анализ «Что, если»;
- В поле «Установить в ячейке» появившегося окна ввести ссылку на ячейку F11, содержащую формулу;
- В поле «Значение» набрать искомый результат 1000000;
- В поле «Изменяя значение ячейки» ввести ссылку на изменяемую ячейку D3 и щелкните на кнопке ОК.
Анализ задачи показывает, что с помощью Excel можно решать линейные уравнения. Конечно, такое уравнение может решить любой школьник. Однако, благодаря этому простому примеру стало, очевидным, что поиск значения параметра формулы, удовлетворяющего ее конкретному значению, – это не что иное, как численное решение уравнений. Другими словами, используя Excel, можно решать любые уравнения с одной переменной.
Задание для учащихся:
Составить несколько вариантов штатного расписания с использованием функции Подбор параметра и оформить их в виде таблицы:
- Изменить количество сотрудников на различных должностях;
- Подобрать зарплату санитарки в новых условиях;
- Составить таблицу нескольких вариантов штатного расписания.
Рассмотрим еще один пример нахождения корней уравнения с помощью подбора параметра. При решении этого уравнения используется также метод последовательных приближений. Учащиеся в классах с углубленным изучением математики знакомы с этим методом. Поэтому, чтобы этот пример был доступен для других учащихся, предлагаю краткую теорию этого метода.
Пусть дано уравнение, записанное в виде x=F(x). Выбирают некоторое начальное приближение x1 и подставляют его вместо x в F(x). Полученное значение x2=F(x1) этой функции считают вторым приближением. Далее находят третье приближение по формуле x3=F(x2) и так далее. Таким образом, получаем последовательность x1, x2, x3,…, xn,… чисел, имеющая предел α. Тогда если функция F(x) непрерывна, из равенства xn+1=F(xn) получаем α=F(α). Это означает, что α является решением уравнения x=F(x).
Пример 2.
Пусть нам дан многочлен третьей степени:
x 3 -0,01x 2 -0,7044x+0,139104=0.
Так как мы ищем корни полинома третьей степени, то имеются не более трех вещественных корней. Для нахождения корней их первоначально надо локализовать, то есть найти интервалы, на которых они существуют. Такими интервалами локализации корней могут служить промежутки, на концах которых функция имеет противоположный знак. С целью нахождения интервалов, на концах которых функция изменяет знак, необходимо построить ее график или протабулировать ее. Составим таблицу значений функции на интервале [-1;1] с шагом 0,2. Для этого необходимо:
Решение уравнений в excel — примеры решений
Microsoft Office Excel может здорово помогать студентам и магистрантам в решении различных задач из высшей математики. Не многие пользователи знают, что базовые математические методы поиска неизвестных значений в системе уравнений реализованы в редакторе. Сегодня рассмотрим, как происходит решение уравнений в excel.
Первый метод
Суть этого способа заключается в использовании специального инструмента программы – подбор параметра. Найти его можно во вкладке Данные на Панели управления в выпадающем списке кнопки Анализ «что-если».
1. Зададимся простым квадратичным уравнением и найдем решение при х=0.
2. Переходите к инструменту и заполняете все необходимые поля
3. После проведения вычислений программа выдаст результат в ячейке с иксом.
4. Подставив полученное значение в исходное уравнение можно проверить правильность решения.
Второй метод
Используем графическое решение этого же уравнения. Суть заключается в том, что создается массив переменных и массив значений, полученных при решении выражения. Основываясь на этих данных, строится график. Место пересечения кривой с горизонтальной осью и будет неизвестной переменной.
1. Создаете два диапазона.
На заметку! Смена знака результата говорит о том, что решение находится в промежутке между этими двумя переменными.
2. Переходите во вкладку Вставка и выбираете обычный график.
3. Выбираете данные из столбца f (x), а в качестве подписи горизонтальной оси – значения иксов.
Важно! В настройках оси поставьте положение по делениям.
4. Теперь на графике четко видно, что решение находится между семеркой и восьмеркой ближе к семи. Чтобы узнать более точное значение, необходимо изменять масштаб оси и уточнять цифры в исходных массивах.
Такая исследовательская методика в первом приближении является достаточно грубой, однако позволяет увидеть поведение кривой при изменении неизвестных.
Третий метод
Решение систем уравнений можно проводить матричным методом. Для этого в редакторе есть отдельная функция МОБР. Суть заключается в том, что создаются два диапазона: в один выписываются аргументы при неизвестных, а во второй – значения в правой стороне выражения. Массив аргументов трансформируется в обратную матрицу, которая потом умножается на цифры после знака равно. Рассмотрим подробнее.
1. Записываете произвольную систему уравнений.
2. Отдельно выписываете аргументы при неизвестных в каждую ячейку. Если нет какого-то из иксов – ставите ноль. Аналогично поступаете с цифрами после знака равно.
3. Выделяете в свободной зоне диапазон ячеек равный размеру матрицы. В строке формул пишете МОБР и выбираете массив аргументов. Чтобы функция сработала корректно нажимаете одновременно Ctrl+Shift+Enter.
4. Теперь находите решение при помощи функции МУМНОЖ. Также предварительно выделяете диапазон размером с матрицу результатов и нажимаете уже известное сочетание клавиш.
Четвертый метод
Методом Гаусса можно решить практически любую систему уравнений. Суть в том, чтобы пошагово отнять одно уравнение из другого умножив их на отношение первых коэффициентов. Это прямая последовательность. Для полного решения необходимо еще провести обратное вычисление до тех пор, пока диагональ матрицы не станет единичной, а остальные элементы – нулевыми. Полученные значения в последнем столбце и являются искомыми неизвестными. Рассмотрим на примере.
Важно! Если первый аргумент является нулевым, то необходимо поменять строки местами.
1. Зададимся произвольной системой уравнений и выпишем все коэффициенты в отдельный массив.
2. Копируете первую строку в другое место, а ниже записываете формулу следующего вида: =C67:F67-$C$66:$F$66*(C67/$C$66).
Поскольку работа идет с массивами, нажимайте Ctrl+Shift+Enter, вместо Enter.
3. Маркером автозаполнения копируете формулу в нижнюю строку.
4. Выделяете две первые строчки нового массива и копируете их в другое место, вставив только значения.
5. Повторяете операцию для третьей строки, используя формулу
=C73:F73-$C$72:$F$72*(D73/$D$72). На этом прямая последовательность решения закончена.
6. Теперь необходимо пройти систему в обратном порядке. Используйте формулу для третьей строчки следующего вида =(C78:F78)/E78
7. Для следующей строки используйте формулу =(C77:F77-C84:F84*E77)/D77
8. В конце записываете вот такое выражение =(C76:F76-C83:F83*D76-C84:F84*E76)/C76
9. При получении матрицы с единичной диагональю, правая часть дает искомые неизвестные. После подстановки полученных цифр в любое из уравнений значения по обе стороны от знака равно являются идентичными, что говорит о правильном решении.
Метод Гаусса является одним из самых трудоемких среди прочих вариантов, однако позволяет пошагово просмотреть процесс поиска неизвестных.
Как видите, существует несколько методов решения уравнений в редакторе. Однако каждый из них требует определенных знаний в математике и четкого понимания последовательности действий. Однако для упрощения можно воспользоваться онлайн калькулятором, в который заложен определенный метод решения системы уравнений. Более продвинутые сайты предоставляют несколько способов поиска неизвестных.
Жми «Нравится» и получай только лучшие посты в Facebook ↓
источники:
http://urok.1sept.ru/articles/606276
http://mir-tehnologiy.ru/reshenie-uravnenij-v-excel-primery-reshenij/
Поиск кратчайшего маршрута
Содержание |
---|
Описание задачи |
Решение задачи |
Настройка параметров Excel |
Алгоритм |
Формула |
Решение |
Форматирование |
Заключение |
При решении сложных алгоритмических задач с использование электронных таблиц иногда приходится сталкиваться с ошибками из-за возникновения циклических ссылок в расчетах. В подавляющем большинстве случаев эта ошибка связана с неверным построением формул. Но нередко цикл заложен в алгоритме решения задачи. Немногие знают, что Excel позволяет производить итерационные вычисления без использования макросов.
В примере к статье с помощью итерационных вычислений показано решение задачи по поиску кратчайшего маршрута в лабиринте. Задача, на первый взгляд, не совсем экономическая, но на практике может быть применена при оптимизации логистических и технологических процессов. В качестве другого популярного примера итерационных вычислений можно привести задачу распределения косвенных затрат при расчете полной себестоимости продукции. Здесь циклические вычисления возникают при распределении затрат вспомогательных служб: например, котельная использует электроэнергию, производимую в энергоцехе, который, в свою очередь, отапливается той же самой котельной. Совсем не обязательно решать подобную задачу распределения затрат через итерации, но знать потенциальные возможности Excel будет в любом случае нелишним.
Описание задачи
Итак, имеется карта лабиринта с предопределенными координатами входа и выхода. Карта представлена в виде прямоугольной таблицы, где каждая ячейка может быть либо стеной, либо проходом. По периметру имеется ограждение в виде стен, внутри стены могут располагаться произвольным образом. Единичный ход представляет собой шаг в одном из четырех направлений от текущей ячейки: вверх, вниз, вправо или влево. Требуется проложить кратчайший маршрут от входа к выходу.
Решение задачи
Настройка параметров Excel
В примере использованы формулы, работающие только с включенным режимом итерационных вычислений. Это режим устанавливается в параметрах Excel, в Excel 2000-2003 через меню СервисПараметрыВычисления. В Excel 2007-2010 через диалог настройки общих параметров (раздел Формулы):
Кроме установки числа итераций (зависит от размера лабиринта), желательно установить ручной режим вычислений. В противном случае будет серьезно замедлен расчет при любом изменении исходных данных.
Также в примере установлен R1C1 режим отображения формул, что облегчает понимание алгоритмов при равнозначных по смыслу вертикальных и горизонтальных ссылках.
Алгоритм
Задача по поиску кратчайшего маршрута в лабиринте широко известна в математике и прикладном программировании. Общий смысл алгоритма можно изложить следующим образом:
1. Изначально все доступные для прохода ячейки очищаются. В дальнейшем в каждую ячейку проставляются номера шагов.
2. В ячейку «входа» устанавливается значение «1».
3. Цикл пока ячейка, обозначающая «выход», не заполнена номером. Выход из цикла также осуществляется, если за полный проход не было сделано никаких исправлений – в этом случае решения задачи нет.
3.1 Цикл по всем ячейкам
3.1.1 В каждую ячейку устанавливается минимальный номер из соседних и текущей ячейки плюс единица. При этом пустые соседние ячейки в сравнение не попадают.
4. При успешном результате оптимальным маршрутом является любая последовательность с последовательным увеличением номера на единицу от «входа» к «выходу».
Также популярным решением этой задачи является рекуррентный вызов процедуры перемещения из одной ячейки в другую до достижения выхода.
Формула
Любая ячейка внутри лабиринта на листе «Маршрут» содержит следующую формулу:
=IF(Карта!RC<>0;-1; IF(INT(RC[-1])=INT(MIN(IF(RC[-1]>=0;RC[-1];999);IF(R[-1]C>=0;R[-1]C;999);IF(RC[1]>=0;RC[1];999);IF(R[1]C>0;R[1]C;999)));INT(RC[-1])+1,1; IF(INT(R[-1]C)=INT(MIN(IF(RC[-1]>=0;RC[-1];999);IF(R[-1]C>=0;R[-1]C;999);IF(RC[1]>=0;RC[1];999);IF(R[1]C>0;R[1]C;999)));INT(R[-1]C)+1,2; IF(INT(RC[1])=INT(MIN(IF(RC[-1]>=0;RC[-1];999);IF(R[-1]C>=0;R[-1]C;999);IF(RC[1]>=0;RC[1];999);IF(R[1]C>0;R[1]C;999)));INT(RC[1])+1,3; IF(INT(R[1]C)=INT(MIN(IF(RC[-1]>=0;RC[-1];999);IF(R[-1]C>=0;R[-1]C;999);IF(RC[1]>=0;RC[1];999);IF(R[1]C>0;R[1]C;999)));INT(R[1]C)+1,4; 0)))))
Формула очень сложная (в Excel 2000-2003 достигается максимум по уровням вложенных скобок внутри одной формулы) и требует дополнительных пояснений. Общий смысл на самом деле соответствует описанному ранее циклическому алгоритму. Т.е. определяется минимум из соседних ячеек. При этом «стены» (отрицательные значения) не обрабатываются за счет замены их значений на большое число (999).
Дополнительно к описанному алгоритму вводится дробная часть числа, обозначающая направление движения от предыдущей ячейки. Все сравнения производятся над целыми числами (функция INT). Дробная часть введено только для облегчения показа маршрута через условное форматирование ячейки. Также только для целей условного форматирования в строках 18-117 находится служебная таблица с расчетами координат следующей ячейки оптимального маршрута. В примере заготовлено максимально 100 шагов для анализа. Расчет для показа маршрута можно было организовать каким-либо другим способом.
Обратите внимание, на преимущество R1C1 адресации – сразу видно, что формула абсолютна одинаковая во всех ячейках. Без использования итерационных вычислений будет выдана ошибка — циклическая ссылка в формулах . Действительно, все соседние ячейки лабиринта ссылаются друг на друга.
Решение
После изменений в расположении стен и проходов на листе «Карта» требуется перейти на лист «Лабиринт» и запустить ручной пересчет Excel. Это проще всего сделать через нажатие клавиши F9. Карта отобразит начальный лабиринт и маршрут оптимального перемещения. Стены выделены серым цветом, маршрут — желтым.
В заголовке окна выводится количество шагов, либо сообщение о невозможности прокладки маршрута между входом и выходом. Проверьте разные варианты расположения стен в лабиринте.
Форматирование
Ячейки внутри лабиринта содержат формулы, и соответственно вычисленные значения. В примере эти значения скрыты – видим только цвет фона. Числа скрыты, во-первых, для простоты восприятия («для красоты»), во-вторых, чтобы продемонстрировать возможности специального формата Excel. Вызовите диалог формата ячейки (проще всего это делается через сочетание клавиш Ctrl+1):
Пользовательский формат «;;;» обозначает, что для положительных, отрицательных, нулевых и текстовых значений необходимо показывать пустую ячейку.
Для раскраски ячеек использованы условные форматы двух типов:
1. «Стены» вычисляются через формулу как значение «-1».
2. Ячейка попадает в оптимальный маршрут, если ее координата вычислена в служебной таблице. Здесь функция CELL(«address»; RC) выводит адрес текущей ячейки в формате R1C1. Служебная таблица собирает координаты маршрута от «выхода» к «входу», используя целую и дробную часть каждой ячейки лабиринта.
Заключение
Расширение масштаба лабиринта требует копирования формул и добавления строк в служебную таблицу для показа маршрута. Обратите только внимание, что ячейка «входа» не содержит формулу – там значение первого шага (1,1). Также, вероятно потребуется увеличить параметр «Предельное число итераций». Будьте осторожны с увеличением размеров лабиринта — скорость расчетов будет замедляться в геометрической прогрессии.
Описанная в примере задача гораздо проще и элегантнее решается с помощью программы на VBA. Можно использовать как простые циклы, так и рекурсивные вызовы процедур. Вероятно, для тех, кто не очень «дружит» с программированием, приведенный пример решения задачи с помощью формул будет также непонятен. В любом случае, надеемся, что статья будет являться для вас дополнительным стимулом по изучению возможностей формул Excel и VBA.
Пользовательский формат числа
Смотри также
» Перекрестный расчет себестоимости
При разработке экономических моделей одной из самых интересных задач является решение проблемы перекрестных связей между формулами….
» Объединение строк
У продвинутых пользователей Excel очень популярен вопрос о возможности объединения диапазона ячеек, содержащих текст, в одну строку при…
» Распределение начислений по платежам
При ведении финансового учета в электронных таблицах обычно ограничиваются, так называемым «котловым» методом расчета задолженности…
» Календарный план выпуска изделий
Одной из самых сложных задач экономического менеджмента является составление календарного плана выпуска продукции в условиях…
» Судоку
Пример решения головоломки «Судоку 9х9» без программирования. К экономике отношения не имеет, зато отлично показывает возможности Excel в…
При доставке груза от конкретного
поставщика к грузополучателю служба
эксплуатации стремится выбрать наиболее
рациональный маршрут: либо по расстоянию,
либо по времени. При выборе расстояния
не всегда возможно визуально определить
кратчайший путь в силу наличия извилистости
трассы, наличия промежуточных пунктов
и т. д.
Математическая постановка задачи
П
c67
усть некоторая сеть задана в виде
орграфа (ориентированного графа –
совокупность вершин и соединяющих их
дуг) (рис. 3.1), т.е. каждой ориентированной
дуге соответствует определенное
расстояние. Необходимо найти кратчайший
путь из i-го узла
сети в ее заданный j-й узел. К этой
задаче, известной в исследовании
операций как задача выбора
кратчайшего пути, сводятся такие
практически важные задачи, как задача
о замене оборудования, задача о
календарном планировании комплекса
работ и т.д.
c56
c65
c13
c35
c58
c34
c45
c14
c54
c48
Рис. 3.1. Орграф дорожной сети
Как правило, в сети выделяют один узел,
который является конечным (пункт или
станция назначения, сток). Задача
заключается в отыскании кратчайшего
пути в этот конечный узел (на рис. 3.1
конечным является узел с номером из
некоторого другого узла сети (например,
из первого узла сети на рис. 3.1). Величина
cij
определяет расстояние от i-го
узла сети до ее j-го
узла.
Величина сij
может измеряться в единицах, отличных
от единиц длины. Так, например, cij
может представлять собой стоимость
проезда от i-го до j-го
узла сети. Тогда задача заключается в
отыскании пути минимальной стоимости.
Величина cij
может также определять время переезда
от i-го до j-го
узла сети. При этом необходимо найти
путь с минимальной продолжительностью
переезда.
При решении прикладных задач, сводящихся
к задаче выбора кратчайшего пути, часто
встречаются ситуации, когда cij
cji.
Кроме того, как правило, не выполняется
так называемое неравенство треугольника:
cij
cik
+ ckj
для всех некоторых значений индексов
i, j,
k.
Существуют сети, содержащие циклы,
каждый из которых
представляет собой замкнутый путь
(путь, исходящий из некоторого узла сети
и возвращающийся в него же). Так, в сети
представленной на рис. 3.1, много циклов,
один из них содержит узлы с номерами 2,
3, 5, 6 и 7. Как правило, в задачах исследования
операций значения cij
положительны и общая длина цикла является
положительной. Следовательно, решение
задачи выбора кратчайшего пути не может
содержать циклов.
Предположим, что для сети, представленной
на рис. 3.1, необходимо найти кратчайший
путь от узла с номером 1 (источник) до
узла с номером 8 (сток). Установим связь
этой задачи с классической транспортной
задачей.
Рассмотрим транспортную задачу с
промежуточными пунктами, сеть которой
представлена на рис. 3.1. При этом
предположим, что: а) в узле с номером 1
имеется избыточная единица товара; б)
в узле с номером 8 имеется недостаток
единицы товара; в) узлы с номерами 2,…,7
являются промежуточными пунктами с
нулевыми чистыми запасами (потребность
в дополнительных поставках товара равна
нулю). Необходимо разработать план
перевозок товара между узлами сети
(складами), который при минимальных
транспортных затратах позволит на
каждом складе поддерживать нулевой
чистый запас товара.
Считаем, что каждой ориентированной
дуге сети соответствует переменное
модели xij,
представляющее собой количество товара,
которое должно быть отправлено с i-го
склада на j-й. Для
каждого k-го промежуточного
пункта вводим переменное xkk
с соответствующим ему коэффициентом
ckk
= 0 в целевой функции, а величину чистого
запаса обозначаем через Tk.
Если множество пар индексов (i,
j),
соответствующих ориентированным
дугам сети, представленной на рис. 3.1,
обозначить через J, то рассматриваемую
задачу можно
записать следующим образом:
Сформулированная выше задача о нахождении
кратчайшего пути эквивалентна классической
транспортной задаче.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #