Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Прикладная математика. Решение задач с применением табличного процессора Excel. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Рис.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
Приведем алгоритм венгерского метода. Он состоит из предвари-
2n
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
43nk

4j
    
 
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
Среди полученных свободных элементов теперь есть нулевые эле-
3i
3j
2i

0
0
0
4nk
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
.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]