Поиск кратчайшего пути в Excel. Решение задач в Excel
![]()
|
Решение задач в Excel Нахождение кратчайшего пути Определим кратчайший путь между вершинами 1 и 7 на представленном графе. ![]() Составим таблицу. Номера вершин от 2 до 7 расположим по горизонтали. Это пункты назначения, то есть вершины, в которые мы придем. Вершины от 1 до 6 расположим по вертикали – это исходные пункты. Пункты назначения начинаем нумеровать со второго, так как вершина 1 – это исходный пункт и в него прийти нельзя. Исходные пункты нумеруем от 1 до 6, так как пункт 7 – конечный и выход из него невозможен. ![]() Внутри таблицы запишем расстояния. Так расстояние из вершины 1 в вершину 2 равно 15, значит на пересечении строки «исходный пункт1» и столбца «пункт назначения 2» ставим число 15. Расстояние из вершины 1 в вершину 3 равно 10, значит на пересечении строки «исходный пункт1» и столбца «пункт назначения 3» ставим число 10. ![]() По графу видим, что из вершины 2 можно попасть в вершину 3 (это расстояние равно 3)или в вершину 4 (расстояние равно 6), или в вершину 7 (расстояние равно 17). На пересечении строки «исходный пункт 2» и столбца «пункт назначения 3» ставим число 4. На пересечении строки «исходный пункт 2» и столбца «пункт назначения 4» ставим число 6. На пересечении строки «исходный пункт 2» и столбца «пункт назначения 7» ставим число 17. ![]() Аналогично заполним в таблицу расстояния из вершины 3 в вершины 2 и 5, которые соответственно равны 3 и 4. ![]() По графу мы видим, что из вершины 4 можно попасть в вершины 2,5,7, расстояние до которых соответственно равны 6,4,5. Занесем эти числа в таблицу: ![]() По графу мы также видим, что из вершины 5 можно попасть в вершины 3,4, 6, расстояние до которых соответственно 4,4,2. ![]() А из вершины 6 можно попасть в вершины 5 и 7, расстояния до которых 2 и 6. Занесем эти расстояния в нашу таблицу: ![]() Путь из вершины 2 в вершину 2, из 3 в 3 и т.д. будет равен 0. Занесем эти величины в таблицу: ![]() Пустые клеточки в нашей таблице говорят о том, что пути в некоторые вершины нет. Например, рассмотрим строку «исходный пункт 1». Из пункта 1 нет пути в пункты назначения 4,5,6,7. Но оставить соответствующие клетки пустыми мы не можем. Поэтому, чтобы программа поиска решения в Excel начала правильно работать, мы в эти ячейки запишем числа, намного большие самого большого из уже записанных. Тогда, так как мы будем искать кратчайший путь, программа эти значения будет отбрасывать. Например, так как самое большое число в таблице 15, а 100 > 15, мы в пустые ячейки таблицы запишем 100 (Можете записать 500 или 1000, любое число, которое вам нравится). Получим таблицу: ![]() (Цвет записи чисел менять необязательно!) Теперь составим вторую таблицу «План перемещения по кратчайшему пути». Начало работы по составлению таблицы полностью совпадает с составлением первой таблицы, но внутреннюю часть таблицы заполнять не будем. Записываем пункты назначения по горизонтали и исходные пункты по вертикали, но вставим дополнительную строку и дополнительный столбец «наличие», которые заполним единицами. ![]() В строке внизу таблицы найдем суммы по столбцам: ![]() Получим в ячейке В20 число 6. Найдем суммы столбцов для пунктов назначения 2,3,..7, протянув ячейку В20: ![]() Получим: ![]() Теперь найдем суммы по строкам с исходными пунктами: ![]() ![]() ![]() Теперь зададим формулой весь пройденный путь, это сумма произведений ячеек второй и первой таблиц. Для этого выделяем ячейку соответствующую пройденному пути, заходим на вкладку формулы, выбираем вставить функцию, находим СУММПРОИЗВ: ![]() ![]() В качестве массива 1 выделяем все ячейки внутри первой таблицы: ![]() В качестве массива 2 выбираем ячейки внутри второй таблицы: ![]() Массив 3 не заполняем. Нажимаем ОК. ![]() Выделяем ячейку соответствующую пройденному пути, там у нас пока записано число 0. На вкладке «данные» находим «поиск решения». Нам надо, чтобы пройденный путь был самым коротким, поэтому выбираем «оптимизировать целевую функцию» на «минимум». ![]() Изменять будем ячейки, стоящие внутри второй таблицы. ![]() Теперь необходимо добавить ограничения. Числа стоящие внутри второй таблицы должны быть положительными. ![]() ![]() Числа внутри второй таблицы должны быть неотрицательными, добавим это ограничение: Выделяем ячейки ![]() Добавляем условие неотрицательности: ![]() Суммы по столбцам внутри второй таблице должны быть равны 1. Это условие будет означать, что выйдя из какой-то вершины, мы можем попасть только в одну вершину, а не в 2 или 3 вершины сразу. То есть должны быть равны значения в выделенных ячейках: ![]() Добавим это ограничение: ![]() В качестве ограничения выбираем ячейки с 1: ![]() И добавим последнее ограничение. Суммы по строкам должны быть равны 1. То есть движение может идти только из одной вершины в одну. Нам надо добавить равенство значений в выделенных ячейках: ![]() Добавим это ограничение: ![]() ![]() Нажимаем ОК. Выбираем Поиск решения линейных задач симплекс-методом. Находим решение. ![]() ![]() Нажимаем ОК. Получившееся решение: ![]() Их второй таблицы мы видим, что кратчайший путь из вершины 1 в вершину 7 составит 22. Давайте посмотрим, по каким вершинам он пройдет. ![]() Из первой строки мы находим, что 1 стоит только в столбце «пункт назначения3». Все остальные ячейки 0. Это значит, что из первой вершины движение по кратчайшему пути идет только в вершину 3. Поэтому далее мы должны сразу перейти в строку «исходные пункты3». В этой строке 1 стоит в «пункте назначения 5». Значит из вершины 3 переходим в вершину 5. По оставшимся строкам видим, что движение идет в вершину 6 и 7. Таким образом кратчайший путь 1-3-5-6-7 и составляет он 22 (условные единицы, если исходные расстояния были даны в км, значит 22 км). Ответ: путь 1-3-5-6-7 – кратчайший. Его длина 22. Решите предложенную задачу по описанному алгоритму в Excel. Полученное решение высылайте на эл. почту. |