Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Прикладная математика. Решение задач с применением табличного процессора Excel. Учебное пособие
.pdf
Рис.11
Далее рассмотрим решение двойственной задачи (рис.12). В электронную таблицу, составленную для решения прямой задачи (рис.11), добавим алгоритм решения двойственной.
Рис.12
В ячейках A21:D21 запишем входные значения потенциалов потребителей:
щиков:
,,, vvvv , а в ячейках E22:E24 – значения потенциалов постав-
4321
,, uuu . В результате решения двойственной задачи в этих ячей-
321
ках мы получим оптимальные значения потенциалов. В ячейке A26 разместим значение целевой функции двойственной задачи в виде:
«=суммпроизв( A21:D21; A9:D9) + суммпроизв( E22:E24;G3:G5)». Левую
часть системы ограничений двойственной задачи
vu
, где 3,1i и
ji
4,1j , запишем в блок A22:D24 следующим образом: в ячейку A22 запи-
сывается формула « =A21 + $E$22 », и эта ячейка копируется в ячейки B22
– D22. Далее в ячейку A23 записывается формула « =A21 + $E$23 », и эта
ячейка копируется в ячейки B23 – D23, и в ячейку A24 записывается формула: « =A21 + $E$24 », и эта ячейка копируется в ячейки B24 – D24. Левая часть условий оптимальности
cvu
вводится в ячейки блока
ijji
A28:D30 следующим образом: в ячейку A28 записывается формула « =A22
- A11 », и эта ячейка копируется во все ячейки вышеуказанного блока.
71

Запустим процедуру Поиск решения, и в появившемся диалоговом
.
min
max
G
F
Рис.13
окне (рис.13) внесем необходимые данные: адрес ячейки целевой функции
$A$26; направление оптимизации – максимум; адреса изменяемых ячеек
$A$21:$D$21; $E$22:$E$24. Кнопкой Добавить окна Поиск решения ак-
тивизируем окно Добавление ограничения и введем ограничение двойственной задачи в виде: «$A$22:$D$24 <= $A$11: $D$13», как указано на
рис.13.
В окне Параметры поиска решения, вызванном командой Пара-
метры окна Поиск решения, установим флажки: Автоматическое масштабирование, сопряженных градиентов (выбранный численный метод
решения задачи). Следует установить флажок Линейная модель. Далее,
щелкнув левой кнопкой мыши по ОК, возвратимся в окно Поиск реше-
ния. В этом окне, щелкнув левой кнопки мыши по команде Выполнить,
получим оптимальное решение двойственной задачи (рис.14). Анализ решения прямой задачи (рис.11) и двойственной (рис.14) показывает, что
экстремальные значения целевых функций равны:
Рис.14
2.10. Задача о назначениях
Пусть имеется m грузоотправителей и n автомобилей, каждый из
которых может обслужить любого грузоотправителя. Любому грузоотправителю достаточно одного автомобиля. Известны также затраты на обслуживание каждым автомобилем любого грузоотправителя
72
c . Требуется
ji

так распределить автомобили по грузоотправителям, чтобы суммарные
n
m
m
n
n
m
n
m
M
1, 1, 10
1, 1, 11
0;1 12
i
i
X
X
X
транспортные расходы перевозок были минимальными.
Как и в транспортной задаче, в задаче о назначениях выделяются открытая и закрытая модели. Если число работ равно числу исполнителей, то
будет закрытая модель задачи о назначениях. В случае если число работ
меньше числа исполнителей
, то вводится
фиктивных работ, а
соответствующие коэффициенты в матрице затрат приравнивают нулю.
В случае если
ветствующие им коэффициенты
, то вводится
фиктивных исполнителей, а соот-
c приравнивают к значению
ij
, где M
– некоторое большое число.
Математическая модель задачи о назначениях имеет вид:
nin
,
minxcF
,
,
при ограничениях:
j
1 1
n
x i n
i j
1
j
n
x j n
i j
1
i
x ,
i j
jiji
где
c – затраты на обслуживание
ji
теля,
x – план распределения автомобилей грузоотправителям.
ji
-м автомобилем j-го грузоотправи-
Ограничение (10) означает, что на каждую работу должен быть назначен только один исполнитель. Ограничение (11) показывает, что каждый исполнитель должен быть назначен на выполнение только одной работы. Ограничение (12) показывает назначение исполнителей на работы:
1
x , если на
ji
случае 0
x .
ji
-ю работу назначается j-й исполнитель, в противном
Для решения поставленной задачи можно применить венгерский метод. В его основе лежит метод последовательного сокращения невязок.
Вначале устанавливается некоторый план, который затем от итерации к
итерации переводится в оптимальный план. Этот метод основан на двух
утверждениях.
1. Решение задачи не изменится, если к любому столбцу или строке
прибавить или вычесть некоторую компоненту, т.е. если план
оптимальным, то он является оптимальным и для функции
vucs
, где ni ,1 , nj ,1 .
jijiji
*
удовлетворяет условию :
nin
1 1
j
xcF
ijij
,min
то
2. Если все 0
*
является оптимальным планом.
c и
ji
*
является
F с матрицей
1
73

Приведем алгоритм венгерского метода. Он состоит из предвари-
2n
F
тельного шага и не более чем
последовательно повторяющихся ите-
раций.
Предварительный шаг: приведение задачи к задаче на минимум. Если
решаемая задача на максимум, то ее заменяют задачей на минимум. Для
этого в каждом столбце матрицы
cl max
. Затем строим матрицу
j
ji
i
nin
1
1
1 1 1 1 1
j
nin
c находим максимальный элемент
ji
1
j
clc
. В итоге получим:
jijji
n
FlxclxcF
jijjijijji
j
.min)(
При этом необходимо учитывать, что исходная задача является задачей на определение максимального значения целевой функции, т.е.:
nin
Очевидно,
1 1
F достигает минимума при условии, что
1
xcF
j
ijji
.max
достигает
максимума.
1
c строим систему нулей. Для этого в каждой строке мат-
ji
рицы
В матрице
1
c находим минимальный элемент, который далее вычитаем из всех
ji
элементов соответствующей строки матрицы. Тем самым осуществляется
переход к матрице
jiji
112
min
ccc . Такое преобразование не меняет ре-
ji
i
шения исходной задачи. В результате выполненного преобразования в каждой строке матрицы
2
c появится хотя бы один нуль.
ji
На следующем шаге выделяется система нулей. Система нулей называется независимой, если она содержит в каждом столбце и в каждой строке только по одному нулю. Выделение независимых нулей осуществляется
следующим образом. В первом столбце матрицы выделяется произвольный нуль и отмечается, например, звездочкой «*». Затем рассматриваются нули второго столбца. Если среди них есть такие, которые находятся не
в одной строке с нулем первого столбца, уже отмеченным звездочкой, то
один из них отмечается звездочкой. Аналогично рассматриваются нули
других столбцов. Если число независимых нулей равно n, то задача считается решенной. Оптимальное решение, которое сводится к назначению,
получается из последней матрицы путем записывания в клетках, соответствующих нулям со звездочкой, единиц, а в остальных клетках – нулей.
Если число независимых нулей не равно n, переходим к общему шагу.
Общий шаг заключается в следующем. Целью каждой итерации этого шага является увеличение числа независимых нулей. Для этого перед
началом итерации выделяем знаком плюс столбцы матрицы, содержащие
нули со звездочкой. Проверяем, есть ли нули в оставшихся столбцах.
74

Если нуль имеется, смотрим, имеются ли в строке, соответствующей
0
0
0
этому нулю, нули со звездочкой. Если да, то рассматриваемый невыделенный нуль отмечаем штрихом, а строку – знаком плюс. Знак плюс над
столбцом, в котором расположен нуль со звездочкой, лежащей в только
что выделенной строке, снимаем. Если в строке с невыделенным нулем
нулей со звездочкой нет, то невыделенный нуль также отмечаем штрихом.
В случае если среди невыделенных элементов нулей нет, то из невыделенных элементов матрицы выбираем наименьший элемент. Вычитаем
его из элементов, расположенных в невыделенных столбцах и прибавляем
к элементам, лежащим на пересечении выделенных столбцов и строк. Итерация заканчивается, если в строке с невыделенным нулем нет нуля со
звездочкой, т.е. нет пометок над столбцами. Затем строим цепочку. Цепочка строится по правилу: движение начинаем от нуля со штрихом и идем по
столбцу к нулю со звездочкой, от нуля со звездочкой по строке переходим
к нулю со штрихом, вновь от
идем к
*
по столбцу и т.д. Цепочка начинается и заканчивается нулем со штрихом. По указанному правилу цепочка строится однозначно. Число элементов цепочки нечетное. Если в одном
столбце с нулем со штрихом нет
*
, то цепочка вырождена и состоит из
одного элемента. После построения цепочки звездочки над нулями убираем, а штрихи заменяем звездочками. Все остальные нули, находящиеся вне
цепочки, не меняем. Затем подсчитываем нули со звездочкой. Если их число равно n, найдено оптимальное решение. Далее строим оптимальный
план назначения. В противном случае переходим к следующей итерации
общего шага и т.д.
В случае если есть запрет на выполнение какой-либо работы какимто исполнителем, то в матрице затрат соответствующему коэффициенту
присваивается какое-то большое число.
Пример. Решить следующую задачу о назначениях:
nin
j
1 1
xcF
ijij
,max
где
9468
c .
ij
1563
4654
5295
Так как рассматриваемая задача на определение максимума целевой
функции, то ее следует записать как задачу на минимум. Для этого сначала
в каждом столбце матрицы находим максимальный элемент. Найденные
значения запишем внизу таблицы:
75

9468
43nk
4j
1563
4654
5295
9698
Для первого столбца максимальный элемент равен 8, для второго – 9,
для третьего – 6, для четвертого – 9. Далее из каждого найденного максимального элемента вычитаем элементы соответствующего столбца:
0230
8135
.
5044
4403
В полученной матрице в каждой строке находим минимальные эле-
менты и вычитаем их из соответствующих элементов строк:
0
0230
8135
5044
4403
1
0
0
0230
7024
.
5044
4403
В полученной матрице строим систему независимых нулей. Выделенные нули помечаем звездочкой:
Число выделенных нулей
*
*
0230
7024
*
.
5044
4403
, т.е. оптимальное решение пока не найдено. Далее переходим к следующей итерации. Столбцы, содержащие выделенные нули, помечаем знаком «+»:
*
*
0230
7024
*
5044
.
4403
Так как число отмеченных нулей меньше n, у нас есть один неотме-
ченный столбец
. В невыделенном столбце есть нулевой элемент
c ,
14
который расположен в первой строке. Пометим его знаком штрих, а строку, его содержащую, знаком «+». Просматриваем помеченную строку, в
данном случае первую. В ней есть нуль со звездочкой. Поэтому над столб-
76

цом, содержащим этот нуль со звездочкой, снимаем пометку «+», напри-
мер, обведением знака кружком . Теперь у нас свободными элементами,
расположенными в непомеченных столбцах и в непомеченных строках, являются:
c , 24c , 31c , 34c , 41c , 44c . Среди этих свободных элементов нет ну-
21
левых. В соответствии с алгоритмом, из них выбираем минимальный элемент 3
бавляем к элементам
c . Вычитаем его из всех свободных элементов матрицы и при-
41
c , 13c , расположенным на пересечении выделенных
12
строк и столбцов. Остальные элементы матрицы переписываем без изменения. В итоге получим следующую матрицу:
*
*
*
0560
4021
2041
.
1400
В этой матрице среди свободных элементов есть нулевой элемент.
Значение 0
c . Помечаем его штрихом. Строку, его содержащую, поме-
41
чаем знаком «+». Среди элементов рассматриваемой четвертой строки есть
нуль со звездочкой
c . Следовательно, над вторым столбцом снимаем
42
знак «+».
*
*
*
Теперь свободными являются элементы
0560
4021
2041
1400
c , 22c , 24c , 31c , 32c , 34c .
21
Среди них нет нулевых элементов. Снова выбираем наименьший из свободных элементов. Он равен 1. Так как таких элементов у нас два
выбираем любой элемент из них, например,
c . Далее вычитаем значение
31
c и 31c ,
21
этого минимального элемента из всех свободных элементов и прибавляем
к элементам
c и 43c , расположенным на пересечении выделенных строк
13
и столбцов. Остальные элементы матрицы переписываем без изменения. В
результате выполненных действий получим матрицу:
*
*
*
0660
3010
1030
1500
77

Среди полученных свободных элементов теперь есть нулевые эле-
3i
3j
2i
0
0
0
4nk
27
max
F
менты, выберем из них
знаком «+». В этой строке есть нуль со звездочкой
знак «+» над столбцом
c и отметим его штрихом. Строку
31
c . Поэтому снимаем
33
помечаем
, содержащим этот нуль со звездочкой. Полу-
чаем, что пометки над столбцами сняты. Неотмеченной остается еще вторая строка. Поэтому штрихом отмечаем имеющийся любой нуль в этой
строке. Выберем элемент
c . Строку
23
помечаем знаком «+».
*
*
*
Теперь строим цепочку из элементов
0660
3010
1030
1500
c
14
c
11
c
31
c
33
c по
23
правилу: движение начинаем от нуля со штрихом и идем по строке к нулю
со звездочкой, от нуля со звездочкой по столбцу переходим к нулю со
штрихом, вновь от
идем к
*
по строке и т.д. Цепочка начинается и
заканчивается нулем со штрихом. По указанному правилу цепочка строится однозначно. Число элементов цепочки нечетное. Если в одном
столбце с нулем со штрихом нет
*
, то цепочка вырождена и состоит из
одного элемента. После построения цепочки звездочки над нулями убираем, а штрихи заменяем звездочками. Все остальные нули, находящиеся вне
цепочки, не меняем. Затем подсчитываем нули со звездочкой. Если их число равно n, найдено оптимальное решение. Далее в цепочке нуль со штри-
хом поменяем на нуль со звездочкой, а над всеми остальными нулями снимаем пометки. В итоге получим матрицу:
*
0660
3010
.
1030
1500
Теперь мы имеем
*
*
*
, следовательно, полученное решение является оптимальным. Оптимальное назначение получаем заменой нулей со
звездочкой на 1, а остальных элементов на нули:
1000
0100
.
0001
0010
Максимальное значение целевой функции равно:
78
.

Рассмотрим решение задачи о назначениях с помощью процедуры
Поиск решения. Алгоритм решения задачи представлен в виде электронной таблицы (рис.15). План назначений располагается в ячейках A3:D6.
Рис.15
В качестве начальных значений плана перед применением процедуры поиска оптимального решения могут быть выбраны нулевые значения.
Левые части систем ограничений (10) и (11) задачи вводятся в ячейки
E3:E6 и A7:D7. Например, в ячейку E3 вводится формула «=сумм( A3:
D3) ». Остальные ячейки E4 – E6 заполняются аналогично. В ячейку A7
вводится формула «=сумм ( A3:A6) ». Остальные ячейки B7 – D7 заполняются аналогично. Ячейки G3: G6 и A9:D9 заполняются 1, согласно
рис.15. Матрица стоимостей
c размещается в блоке A11:D14. Целевая
ij
функция записывается в ячейку A16 в виде: «=суммпроизв( A3:D6;
A11:D14) ». В надстройках EXCEL найдем Поиск решения и запустим
его. В появившемся диалоговом окне (рис.16) внесем необходимые данные: адрес ячейки целевой функции $A$16; направление оптимизации –
максимум; адреса изменяемых ячеек $A$3:$D$6.
Ограничения вводятся в окне Добавление ограничения, которое активизируется кнопкой Добавить окна Поиск решения. Левая часть системы ограничений задачи должна равняться правой части, т.е. все запасы у
поставщиков должны быть вывезены и все заявки потребителей должны
быть удовлетворены. В окне Добавление ограничения эти условия представляются в виде: «$E$3:$E$6=$G$3:$G$6» и «$A$7:$D$7=$A$9:$D$9»,
как указано на рис.16. Следует добавить условие (12), что план должен
принимать значения либо 0, либо 1, в виде « $A$3:$D$6 двоичное ».
79

i
m
Рис.16
В окне Параметры поиска решения, вызванном командой Пара-
метры окна Поиск решения, установим флажки: Автоматическое масштабирование, сопряженных градиентов (выбранный численный метод
решения задачи). Следует установить флажок Линейная модель. Далее,
щелкнув левой кнопкой мыши по ОК, возвратимся в окно Поиск реше-
ния. В этом окне, щелкнув левой кнопки мыши по команде Выполнить,
получим оптимальное решение задачи.
Анализируя решение, полученное с помощью процедуры Поиск ре-
шения в Excel (рис.15), и решение, полученное ручным способом, можно
сделать вывод о том, что оптимальное решение задачи о назначениях может быть не единственным. При этом максимальное значение целевой
функции в обоих случаях одинаково и равно 27.
Задание по теме «Линейное программирование»
1. Предприятие выпускает два вида продукта:
P и 2P . Для их изго-
1
товления используются три вида сырья, запасы которых ограничены и со-
mb
1
10580
,
2
mb
10680
, mb
3
10430
ед. Известны
затраты каждого вида сырья на производство единицы каждого вида продукта
a , где
ij
– порядковый номер сырья, j – порядковый номер продук-
та, 31,i ,
21,j
. Значения матрицы
a
приводятся в нижеследующей
ij
таблице:
42
A
.
44
23
Требуется составить оптимальный план производства продукции с
целью получения максимальной прибыли, если известна прибыль от реа-
mcmc
лизации единицы каждого вида готового продукта
В задании значение
– номер студента по журналу.
80
40,30
21
.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
