- •Оглавление Введение. Экономика и математика Часть I. Линейные модели и методы в экономике.
- •Глава 1. Принятие решений в экономике
- •Глава 2. Линейное программирование. Теоретические основы и алгоритмы.
- •Глава 3. Теория двойственности в линейном программировании и ее экономические приложения.
- •Глава 4. Транспортная задача и ее приложения.
- •Глава 5. Задача целочисленного линейного программирования
- •Введение. Экономика и математика
- •Часть I. Линейные модели и методы в экономике.
- •Глава 1. Принятие решений в экономике.
- •1.1. Моделирование
- •1.2. Математическое моделирование.
- •1.3. Алгоритм исследования операции.
- •Алгоритм исследования операций.
- •1.4. Примеры исследования операции (моделирование)
- •1.5.Классификация моделей и методов исследования операций
- •Глава 2.
- •2.1. Постановки задачи линейного программирования
- •Основная задача линейного программирования (ОснЗлп)
- •Каноническая задача линейного программирования (кзлп)
- •2.2. Выпуклые множества.
- •0Пределение 2.4.
- •2.3. Теоретические основы линейного программирования
- •2.4. Графический метод и анализ решения злп
- •Проведем графический анализ решения (модели) на чувствительность.
- •2.5. Симплекс-метод решения злп.
- •Определение к-матрицы кзлп
- •Переход от одной к-матрицы злп к другой к-матрице
- •Симплекс-разность к-матрицы злп
- •Алгоритм симплекс-метода
- •2.6. Двойственный сиплекс-метод (р-метод)
- •Определение р-матрицы злп
- •Условия перехода от одной р-матрицы злп к другой
- •Решение задач р-методом
- •2.7.Метод искусственного базиса Назначение и принцип работы методов искусственного базиса
- •2.8. Модифицированный симплекс-метод Постановка задачи
- •Алгоритм модифицированного симплекс-метода
- •Решение задачи модифицированным симплекс-методом
- •2.9. Решение злп на основе Ms Excel
- •Глава 3. Теория двойственности в линейном программировании и ее экономические приложения.
- •3.1. Определение двойственной задачи:
- •3.2. Основные теоремы двойственности
- •3. 3. Экономическая интерпретация двойственности
- •Экономическое содержание теории двойственности.
- •3.4.Применение теории двойственности к решению задач. Применение теоремы 3.5 к решению дз.
- •3.5. Анализ решения злп на основе отчетов ms excel
- •2. Определите статус, ценность каждого ресурса и его приоритет при решении задачи увеличения запаса ресурсов.
- •3. Определите максимальный интервал изменения запасов каждого из ресурсов, в пределах которого структура оптимального плана, то есть номенклатура выпускаемой продукции, остается без изменения.
- •4. Определите суммарную стоимостную оценку ресурсов (себестоимость), используемых при производстве единицы каждого изделия. Производство какой продукции нерентабельно?
- •5. На сколько уменьшится стоимость выпускаемой продукции при принудительном выпуске единицы нерентабельной продукции?
- •6. На сколько можно снизить запас каждого из ресурсов, чтобы это не привело к уменьшению прибыли?
- •8. Определите оптимальное решение задачи для случая, когда вектор ресурсов задан в виде .
- •9. Определите интервалы изменения цен на каждую продукцию, при которых сохраняется оптимальный план.
- •10. На сколько нужно снизить затраты каждого вида сырья на единицу продукции, чтобы сделать производство нерентабельного изделия рентабельным?
- •11. На сколько нужно изменить запас каждого из дефицитных ресурсов, чтобы прибыль возросла на 20%?
- •3. Определите суммарную стоимостную оценку питательных веществ в единице каждого корма, использование какого вида корма нерентабельно.
- •Глава 4. Транспортная задача линейного программирования
- •0, Если безразлично, какой потребитель недополучит заявленного количества груза
- •4.3. Экономические задачи, сводящие к транспортной задаче.
- •Теорема о разрешимости транспортной задачи
- •4.4. Опорный план тз. Алгоритмы нахождения исходного плана.
- •4.4.1. Определения опорного плана тз.
- •4.4.2. Методы составления первоначальных опорных планов
- •4.5. Метод потенциалов решения транспортной задачи
- •4.6. Задача о назначениях
- •Глава 5. Задача целочисленного линейного программирования
- •5.1.Постановки и методы решения
- •5.2.Метод ветвей и границ решения целочисленных задач линейного программирования (цзлп)
- •5.3. Задача Коммивояжера.
5.3. Задача Коммивояжера.
Коммивояжёру требуется объехать n городов. Выехав из первого, он должен в него вернуться, побывав в каждом из остальных городов только по одному разу. Известны либо расстояния между городами, либо стоимости проезда из города i в город j (издержки) cij, i = 1,2,…,n; j = 1 ,2, …,n , причём cii = . Иногда cij = при i j , если переезд от города i до города j невозможен или очень дорог, и, вообще говоря, cij cji .
Пример 1.
Требуется установить, в каком порядке он должен посещать города, чтобы суммарные издержки были минимальными.
Замкнутый маршрут (i1, i2,…,in, i1), проходящий, через каждый город один и только один раз, т.е. набор переездов (дуг)
(i1,i2), (i2,i3), …, (in-1,in), (in,i1)
называется гамильтоновым циклом или просто циклом, маршрутом коммивояжёра и обозначается через
t = (i1,i2), (i2,i3), …, (in-1,in), (in,i1).
Через Т обозначим множество всех гамильтоновых циклов, а через z(t) – издержки цикла t (длина t)
z(t) = cij .
(i,j)t
Необходимо отыскать такой маршрут t* , что
z(t*) = min z(t) .
tT
Эту задачу можно сформулировать как задачу целочисленного линейного программирования.
Пусть
1, если коммивояжёр едет из города i в город j;
xij =
0, если коммивояжёр не едет из города i в город j.
Найти такой вектор X = (x11, x12, …,xnn) En*n , который
м инимизирует
(2)
(3)
ui – uj + (n-1) xij n-2 , ij, i,j = 1,2,…,n-1 (4)
xij 0 , i,j = 1,2,…,n (5)
xij , ui - целые. (6)
Условия (2) говорят о том, что коммивояжёр выезжает из каждого города ровно один раз. Условия (3) означают въезд в каждый город ровно один раз, а условия (4) служат для устранения подциклов (пример, когда маршрут распадается на два не связанных между собой подцикла, приведён ниже).
Описанная модель имеет большое прикладное значение: различные её варианты могут возникать, например, в задачах, связанных с развозкой почты, готовой продукции и т.д.
Обозначим через z0 верхнюю границу оптимального значения функции цели z(t) на множестве Т, т.е.
z(t*) z0 ,
где t* - оптимальный гамильтонов цикл (маршрут).
Определить z0 можно, отыскав какой-либо маршрут коммивояжёра и подсчитав его издержки. Для примера 1 допустимым является следующий гамильтонов цикл
t0 = (1,2); (2,3); (3,4); ((4,5); (5,1).
Его издержки
z(t0) = 10 + 10 + 20 + 15 + 10 = 65.
Следовательно, z0 = 65, а сам цикл t0 следует запомнить. Если указать конкретный маршрут трудно, то полагают z0 =
Пусть (Т) – нижняя граница функции цели на множестве Т, для любого t T
z(t) (Т).
Для вычисления (Т) введём операцию приведения матрицы С(Т).
Процесс вычитания наименьшего элемента строки (столбца) матрицы из всех её (его) элементов называется приведением строки (столбца) матрицы, а сам наименьший элемент - константой приведения строки (столбца) матрицы.
Очевидно, что изменение длин (издержек) всех путей, приводящих в данный город, или всех путей, выводящих из данного города, на одну и ту же величину приводит к новой задаче, оптимальный маршрут которой совпадает с оптимальным маршрутом исходной задачи.
Если матрицу привести последовательно по строкам и столбцам, то в результате получим новую матрицу с неотрицательными элементами и по крайней мере одним нулевым элементом в каждой строке и каждом столбце. Такая матрица называется приведённой (редуцированной).
Пусть H(T) - cуммарная константа приведения матрицы С(Т) по строкам и столбцам, а С(Т) – приведённая матрица С(Т). Имеем
z(t) = z1(t) + H(T), (7)
где z(t) – издержки любого цикла t T по матрице С(Т), а z1(t) – издержки того же цикла по приведённой матрице С(Т). Т.к. в соотношении (7)
z1(t) 0,
то
z(t) H(T)
для любого t T.
Следовательно, в качестве нижней оценки (Т) издержек любого цикла t на множестве Т можно взять суммарную константу приведения H(T) матрицы С(Т).
(Т) = H(T).
Приведём матрицу примера 1.
H(T) =10+1+8+10+8+9+12 = 58 = (T).
Н а каждой итерации s какое-то множество маршрутов коммивояжёра, обозначим его через X, будет подлежать разбиению на два непересекающихся подмножества ys и ys по следующему принципу: подмножество ys содержит все гамильтоновы циклы из Х, включающие переезд из города k в город l (дугу (k,l)), а подмножество ys содержит все остальные маршруты из разбиваемого множества X.
На первой итерации разбиваться будет множество всех гамильтоновых циклов Т.
Ясно, что для разбиения лучше выбирать множество с минимальной нижней оценкой (X), так как вероятнее всего именно в нём содержится оптимальный цикл t*.
(k,l) (k,l)
Дугу (k,l) будем выбирать из следующих соображений. С одной стороны, издержка сkl должна быть как можно меньше, чтобы в конце концов из всех фиксированных дуг получить гамильтонов цикл, близкий к оптимальному. С другой стороны, будем максимально увеличивать нижнюю оценку (ys) множества ys, тогда возрастает вероятность того, что для разбиения всякий раз будет выбираться множество ys , и появится возможность быстрее получить гамильтонов цикл. Если при этом окажется, что его издержки меньше z0, то z0 будет скорректирована (уменьшена), а это сократит число просматриваемых циклов.
Кроме того, такой подход к выбору дуги (k,l) позволяет сократить объём хранимой в памяти информации, а именно, необходимо иметь исходную матрицу издержек С(Т), рабочую матрицу C(ys) и информацию о каждом множестве: его нижнюю оценку издержек и все фиксированные и запрещённые для него дуги. Если в процессе решения задачи нужно будет разбивать множество, отличное от ys, то соответствующую ему матрицу издержек можно восстановить их исходной матрицы С(Т) на основании этой информации.
Выбор фиксированного переезда.
Чтобы выбрать переезд (k,l), необходимо:
в приведенной матрице издержек С(X) просмотреть все элементы cij =0;
для каждого из них определить величину ij , равного сумме минимального элемента i-той строки и j-го столбца (за исключением самого элемента cij);
выбрать фиксированный переезд (k,l) из условия
kl = max ij
(i,j), сij =0
Процесс разбиения множества Х на два подмножества уs и уs можно осуществить, если есть матрица издержек С(X). Поэтому прежде всего рассмотрим , как на произвольной итерации получить матрицы С(уs) и С(уs), если известны матрица С(X) и дуга (k,l).
Схема построения матрицы С(уs)
Так как дуга (k,l) уже входит в любой гамильтонов цикл, принадлежащий множеству ys, то согласно постановке задачи необходимо запретить выезд из города k и въезд в город l, поэтому в матрице С(X) вычеркиваем строку k и столбец l.
Для устранения подциклов необходимо составить из всех дуг, фиксированных для множества уs , связный путь, обязательно содержащий последнюю фиксированную дугу (k,l) (связный путь может состоять всего лишь из одной дуги (k,l)). Полагаем Cmp= в матрице С(X), где m и p – соответственно конец и начало связного пути, в результате получим матрицу С (уs).
Приводим матрицу С(уs), получим искомую матрицу С(уs). Обозначим через h(ys) константу приведения матрицы С(уs).
Нижняя граница издержек (уs) для множества ys определится по формуле
(уs) = (X) + h(ys). (8)
Схема построения матрицы С(уs).
Так как дуга (k,l) не должна входить ни в один гамильтонов цикл, принадлежащий множеству уs, то в матрице С(X) полагаем сkl=. Получим С (уs).
Приводим матрицу С(уs), получим С(уs).
Обозначим через h(ys) константу приведения матрицы С(уs).
3. Нижняя граница издержек (уs) для множества ys определится по формуле
(уs) = (X) + h(ys). (9)
Схема восстановления матрицы С(X) из исходной матрицы C(T) для любого множества Х
Пусть Х –любая вершина дерева , соответствующего процессу решения задачи о коммивояжере методом ветвей и границ, c набором фиксированных дуг
D = (i1,j1), (i2,j2), …,(iq,jq) .
Вычёркиваем в матрице С(Т) все фиксированные строки
i1, i2,…, iq, и фиксированные столбцы j1, j2,…, jq.
2. Для каждой фиксированной дуги (ir,jr)составляем связный путь из ранее фиксированных дуг, включающий в себя и данную дугу (ir,jr), и полагаем сmp = в матрице С(Т), где m и p соответственно конец и начало связного пути.
3. Для каждой запрещённой для множества Х дуги (i,j) полагаем cij = в матрице С(Т), в результате получаем матрицу С(Х).
4. Приводим матрицу С(Х), получаем искомую матрицу С(Х). Обозначим суммарную константу приведения С(Х) через H(X).
Нижняя граница издержек для множества Х определится по формуле
(X) = (10)
Обоснование формул (8), (9), (10).
Пусть Х – любая вершина с набором фиксированных дуг D , матрица которой С(Х) восстановлена из исходной матрицы С(Т) с суммарной константой приведения H(X). Покажем, что нижняя граница издержек (X) определится по формуле (10).
Действительно, если tX, то
z(t) = ,
причём вторая сумма берётся по всем (i,j)t , но не фиксированным для множества Х.
Так как матрица С(Х) восстановлена из исходной матрицы С(Т) по рассмотренной выше схеме, то
z(t) = ,
где cij элемент приведённой матрицы С(Х).
Поскольку
0, то
z(t) = (X) -
формула (10) доказана.
Рассмотрим теперь формулу (9). Так как матрица С(уs) может быть восстановлена из из исходной матрицы С(Т) и для множеств уs и Х фиксирован один и тот же набор дуг D , то согласно (10)
(ys) = .
Но
H(ys) = H(X) + h(ys) ,
где h(ys) - константа приведения C(ys), поскольку C(X) и C(ys) отличаются лишь тем, что ck,l = , следовательно, h(ys) =θk,l .
Имеем
(ys) =
C учётом (10)
(ys) = (X) + h(ys) -
т.е. получена формула (9). Следует отметить что h(ys) = θk,l .
Рассмотрим теперь (ys). Согласно (10)
(ys) = , (11)
так как для множества ys по сравнению с множеством Х фиксирована ещё одна дуга (k,l).
Рассмотрим H(ys). Матрицы C(X) и С(ys) отличаются, во первых, тем, что в матрице С(ys) нет k-ой строки и l-ого столбца. Следовательно, в константу приведения H(X) входит в качестве слагаемого ckl , которой нет в H(ys).
Во-вторых, в матрице С(ys) по сравнению с C(X) могут быть новые элементы, равные , т.е. может оказаться, что матрицу С(ys) нужно будет приводить. Следовательно, в константу приведения H(ys) войдёт константа приведения h(ys) матрицы С(ys). Таким образом,
H(ys) = H(X) - ckl + h(ys).
Подставив последнее равенство в (11), получим
(ys) = , или
(уs) = (X) + h(ys),
т.е. получена формула (8).
Решение примера 1.
I итерация.
Выше для множества всех маршрутов Т были определены z0 =65 и (Т) = 58. Определим теперь переезд (k,l), по которому множество всех маршрутов Т будет разбиваеться на два подмножества: y1 и y1.
12=6; 15=1; 21=0; 23=5; 31=0; 34=2; 42=4; 52=2;
Следовательно, (k,l) = (2,3).
Нижняя граница издержек для множества y1 будет согласно формуле (9) равна
(y1) = (Т) + h(y1) = (Т) + 23 = 58 + 5 = 63.
Теперь построим матрицу издержек C(y1). Для этого вычеркнем в матрице C(Т) вторую строку и третий столбец и положим c32 = .
Т.к. h(y1) = 0, то, согласно формуле (8),
( y1) = 58 + 0 =58.
Рис. 1
II итерация.
Из двух множеств: y1 и y1 выбираем для разбиения то, которому соответствует минимальная нижняя граница издержек, т.е. Х = y1. Приведённая матрица издержек C(y1) построена на I итерации.
Определим дугу (k,l).
12 = 0; 15 = 2; 31 = 2; 34 = 3; 42 = 4; 52 = 2; (k,l) = (4,2).
В результате разбиения y1 получим два новых множества: y2 и y2.
Для множества y2 нижняя граница издержек (y2) определится как (y2) = 58 + 4 = 62.
Построим матрицу C(y2) и определим (у2). Для этого в матрице C(y1) вычеркнем четвёртую строку и второй столбец. Соберём все дуги, фиксированные для множества y2. Это (4,2) и (2,3). Они образуют связный путь. Положим с34 = . Получим матрицу С(y2) и приведём её.
h(y2) = 5; (у2) = 58 + 5 = 63.
Рис.2
III итерация.
Из множеств y2, y2, y1 (рис.2) минимальная нижняя граница издержек соответствует множеству y2 , поэтому это множество будет подлежать разбиению. Матрица издержек для этого множества отсутствует, её необходимо восстановить из исходной матрицы С(Т). Для множества y2 фиксирован переезд (2,3) и запрещён (4,2), поэтому в матрице С(Т) вычёркиваем строку 2 и столбец 3, полагаем с32 = (предотвращаем подцикл) , с42 = (запрещаем переезд (4,2)), после чего матрицу приводим.
H(y2) = 10 + 8 + 14 + 8 + +12 = 52.
(y2) = с23 + H(y2) = 10 + 52 = 62.
Выберем дугу, по которой будет производиться разбиение y2 на два подмножества: y3 и y3.
12 = 0; 15 = 1; 32 = 0; 34 = 3; 41 = 1; 52 = 2;
(y3) = 62 + 3 = 65.
Для y3 фиксированы (2,3), (3,4). Эти переезды составляют связный путь, следовательно, с42 = .
Построим матрицу С(y3) и приведём её.
h(y3) = 0;
(y3) = (y2) + h(y3) = 62 + 0 = 62.
Рис. 3
IV итерация.
Для разбиения (рис. 3) выбираем множество с наименьшей нижней границей издержек - y3, которое будет разбиваться на y4 и y4.
12 = 0; 15 = 1; 41 = 3; 52 = 2;
(y4) = 62 + 3 = 65.
Построим матрицу для y4 и приведём её. Фиксированные дуги (4,1), (3,4), (2,3) или (2,3), (3,4), (4,1) – связный путь, с12 = .
Рис.4
Матрица С(y4) - матрица второго порядка, следовательно, множество y4 содержит только один маршрут коммивояжёра, который состоит из всех фиксированных для множества y4 дуг
(2,3), (3,4), (4,1)
и двух дуг
(1,5) и (5,2),
которым в матрице С(y4) соответствуют нулевые элементы, т.е. y4 содержит единственный маршрут
t1 = (1,5), (5,2), (2,3), (3,4), (4,1).
z(t1) = 10 + 8 + 10 + 20 + 14 = 62 z0 = 65.
Меняем значение верхней границы оптимального значения издержек.
z0 = 62
V итерация.
Минимальная нижняя граница издержек (рис. 4) - (y1) = (y2) = 63 z0 = 62, следовательно, задача решена.
z* = 62, t* = t1 = (1,5), (5,2), (2,3), (3,4), (4,1).