Математическая модель решения транспортной задачи

Математическая модель транспортной задачи, ее разновидности и характеристика способов решения. Опорный план, построение потенциального плана, распределительный метод достижения оптимального плана. Решение транспортной задачи методом потенциалов.

Рубрика Экономико-математическое моделирование
Вид курсовая работа
Язык русский
Дата добавления 28.04.2009
Размер файла 54,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

2

2

СОДЕРЖАНИЕ

Введение

Глава 1.Транспортная задача

1.1 Математическая модель задачи

1.2 Метод потенциалов

Выводы

Глава 2. Составление опорного плана

2.1 Распределительный метод достижения оптимального плана

2.2 Решение транспортной задачи методом потенциалов

Выводы

Список использованной литературы

Приложение

Введение

Данный курсовой проект содержит программу для решения транспортной задачи методом потенциалов. Программа предоставляет пользователю возможность пошагового нахождения оптимального решения. Все промежуточные результаты выводятся на экран, пользователь может следить за ходом решения.

Транспортная задача заключается в нахождении такого плана поставок, при котором его цена минимальна.

Условия задачи задаются в виде таблицы.

Матрица (cij)m*n называется матрицей тарифов. Планом транспортной задачи называется матрица х=(xij)m*n, где каждое число обозначает количество единиц груза, которое надо доставить из i-го пункта отправления в j-й пункт назначения.

Глава 1. Транспортная задача

1.1 Математическая модель задачи

Транспортная задача ставится следующим образом: имеется m пунктов отправления А1, А2 , ..., Аm , в которых сосредоточены запасы каких-то однородных грузов в количестве соответственно а1, а2, ... , аm единиц. Имеется n пунктов назначения В1 , В2 , ... , Вn подавшие заявки соответственно на b1 , b2 , ... , bn единиц груза. Известны стоимости Сi,j перевозки единицы груза от каждого пункта отправления Аi до каждого пункта назначения Вj . Все числа Сi,j, образующие прямоугольную таблицу заданы. Требуется составить такой план перевозок (откуда, куда и сколько единиц поставить), чтобы все заявки были выполнены, а общая стоимость всех перевозок была минимальна.

Задача о перевозках, в которой сумма запасов ровна сумме заявок:

аi = bj ( где i=1,...,m ; j=1,...,n ) (4)

это классическая транспортная задача, иначе называемая, транспортной задачей с правильным балансом. Встречаются такие варианты транспортной задачи где условие (4) нарушено. В этих случаях говорят о транспортной задаче с неправильным балансом.

Баланс транспортной задачи может нарушаться в 2-ух направлениях:

1. Сумма запасов в пунктах отправления превышает сумму поданных заявок

аi > bj ( где i=1,...,m ; j=1,...,n );

2. Сумма поданных заявок превышает наличные запасы

аi < bj ( где i=1,...,m ; j=1,...,n );

Условимся первый случай называть "Транспортной задачей с избытком запасов", а второй -- "Транспортной задачей с избытком заявок”.

Транспортная задача с избытком запасов.

В пунктах A1, A2, ... , Am имеются запасы груза a1, a2, ... , am; пункты B1, B2, ... , Bn подали заявки b1, b2, ... , bn, причём

аi > bj ( где i=1..m ; j=1..n ).

Сверх имеющихся n пунктов назначения В1, B2, ... , Bn, введём ещё один, фиктивный, пункт назначения Bn+1, которому припишем фиктивную заявку, равную избытку запасов над заявками

bn+1 = аi - bj ( где i=1,...,m ; j=1,...,n ) ,

а стоимость перевозок из всех пунктов отправления в фиктивный пункт назначения bn+1 будем считать равным нулю. Введением фиктивного пункта назначения B n+1 с его заявкой b n+1 мы сравняли баланс транспортной задачи и теперь его можно решать как обычную транспортную задачу с правильным балансом.

Транспортная задача с избытком заявок .

Эту задачу можно свести к обычной транспортной задаче с правильным балансом, если ввести фиктивный пункт отправления Am+1 с запасом am+1 равным недостающему запасу и стоимость перевозок из фиктивного пункта отправления во все пункты назначения принять равным нулю.

Решение транспортной задачи начинается с нахождения опорного плана. Для этого существуют различные способы. Например, способ "северо-западного угла”, метод минимального элемента и метод Фогеля. Клетки таблицы, в которых стоят ненулевые перевозки, являются базисными. Их число должно равняться m + n - 1.

Очевидно, при переносе любого числа единиц по циклу равновесие между запасами и заявками не меняется: по прежнему сумма перевозок в каждой строке равна запасам этой строки, а сумма перевозок в каждом столбце -- заявке этого столбца. Таким образом при любом циклическом переносе, оставляющем перевозки неотрицательными допустимый план остаётся допустимым. Стоимость же плана при этом может меняться: увеличиваться или уменьшатся. Назовём ценой цикла увеличение стоимости перевозок при перемещении одной единицы груза по означенному циклу. Очевидно цена цикла ровна алгебраической сумме стоимостей, стоящих в вершинах цикла, причём стоящие в положительных вершинах берутся со знаком "+”, а в отрицательных со знаком "-".

Обозначим цену цикла через . При перемещении одной единицы груза по циклу стоимость перевозок увеличивается на величину . При перемещении по нему k единиц груза стоимость перевозок увеличиться на k. Очевидно, для улучшения плана имеет смысл перемещать перевозки только по тем циклам, цена которых отрицательна. Каждый раз, когда нам удаётся совершить такое перемещение стоимость плана уменьшается на соответствующую величину k.

Так как перевозки не могут быть отрицательными, мы будем пользоваться только такими циклами, отрицательные вершины которых лежат в базисных клетках таблицы, где стоят положительные перевозки. Если циклов с отрицательной ценой в таблице больше не осталось, это означает, что дальнейшее улучшение плана невозможно, то есть оптимальный план достигнут.

1.2 Метод потенциалов

Этот метод позволяет автоматически выделять циклы с отрицательной ценой и определять их цены.

Пусть имеется транспортная задача с балансовыми условиями

xi,j = ai ( i=1..m ; j=1..n );

xi,j =bj ( j=1..n ; 1..m ),

причём ai = bj .

Стоимость перевозки единицы груза из Ai в Bj равна C i,j ; таблица стоимостей задана. Требуется найти план перевозок (xi,j ), который удовлетворял бы балансовым условиям и при этом стоимость всех перевозок бала минимальна.

Идея метода потенциалов для решения транспортной задачи сводиться к следующему. Представим себе что каждый из пунктов отправления Ai вносит за перевозку единицы груза (всё ровно куда) какую-то сумму i ; в свою очередь каждый из пунктов назначения Bj также вносит за перевозку груза (куда угодно) сумму j . Эти платежи передаются некоторому третьему лицу ("перевозчику"). Обозначим i + j = i,j ( i=1..m ;j=1..n) и будем называть величину i,j "псевдостоимостью” перевозки единицы груза из Ai в Bj .

Заметим, что платежи i и j не обязательно должны быть положительными; не исключено, что "перевозчик” сам платит тому или другому пункту какую-то премию за перевозку. Также надо отметить, что суммарная псевдостоимость любого допустимого плана перевозок при заданных платежах (i и j ) одна и та же и от плана к плану не меняется.

До сих пор мы никак не связывали платежи (i и j ) и псевдостоимости i,j с истинными стоимостями перевозок C i,j. Теперь мы установим между ними связь. Предположим, что план (xi,j) невырожденный (число базисных клеток в таблице перевозок ровно (m + n -1). Для всех этих клеток xi,j >0. Определим платежи (i и j ) так, чтобы во всех базисных клетках псевдостоимости были ровны стоимостям:

i,j = i + j = сi,j , при xi,j >0.

Что касается свободных клеток (где xi,j = 0), то в них соотношение между псевдостоимостями и стоимостями может быть какое угодно.

Оказывается соотношение между псевдостоимостями и стоимостями в свободных клетках показывает, является ли план оптимальным или же он может быть улучшен. Существует специальная теорема: Если для всех базисных клеток плана (xi,j > 0)

i + j = i,j= сi,j ,

а для всех свободных клеток ( xi,j =0)

i + j = i,j сi,j ,

то план является оптимальным и никакими способами улучшен быть не может. Нетрудно показать, что это теорема справедлива также для вырожденного плана, и некоторые из базисных переменных ровны нулю. План обладающий свойством :

i,j= сi,j (для всех базисных клеток ) (1)

i,j сi,j ( для всех свободных клеток ) (2)

называется потенциальным планом, а соответствующие ему платежи ( i и j ) -- потенциалами пунктов Ai и Bj ( i=1,...,m ; j=1,...,n ). Пользуясь этой терминологией вышеупомянутую теорему можно сформулировать так: Всякий потенциальный план является оптимальным.

Итак, для решения транспортной задачи нам нужно одно -- построить потенциальный план. Оказывается его можно построить методом последовательных приближений, задаваясь сначала какой-то произвольной системой платежей, удовлетворяющей условию (1).

При этом в каждой базисной клетке получиться сумма платежей, равная стоимости перевозок в данной клетке; затем, улучшая план, следует одновременно менять систему платежей. Так, что они приближаются к потенциалам. При улучшении плана нам помогает следующее свойство платежей и псевдостоимостей: Какова бы ни была система платежей (i и j ) удовлетворяющая условию (1), для каждой свободной клетки цена цикла пересчёта равна разности между стоимостью и псевдостоимостью в данной клетке : i,j= сi,j - i,j.

Таким образом, при пользовании методом потенциалов для решения транспортной задачи отпадает наиболее трудоёмкий элемент распределительного метода: поиски циклов с отрицательной ценой.

Процедура построения потенциального (оптимального) плана состоит в следующем.

В качестве первого приближения к оптимальному плану берётся любой допустимый план (например, построенный методом Фогеля). В этом плане m + n - 1 базисных клеток, где m -- число строк, n -- число столбцов транспортной таблицы. Для этого плана можно определить платежи (i и j ), так, чтобы в каждой базисной клетке выполнялось условие :

i + j = сi,j (3)

Уравнений (3) всего m + n - 1, а число неизвестных равно m + n. Следовательно, одну из этих неизвестных можно задать произвольно (например, равной нулю). После этого из m + n - 1 уравнений (3) можно найти остальные платежи i , j , а по ним вычислить псевдостоимости: i,j= i + j для каждой свободной клетки.

Если оказалось, что все эти псевдостоимости не превосходят стоимостей, то план потенциален и, значит, оптимален. Если же хотя бы в одной свободной клетке псевдостоимость больше стоимости (как в нашем примере), то план не является оптимальным и может быть улучшен переносом перевозок по циклу, соответствующему данной свободной клетке. Цена этого цикла ровна разности между стоимостью и псевдостоимостью в этой свободной клетке.

Пусть имеется транспортная таблица, соответствующая начальному решению, хil =

для базисного решения переменных, хil = 0 для свободных переменных (ячейки, соответствующие свободным переменным, остаются пустыми). Далее, нам требуется таблица расходов с заданными pij.

Отыскание симплекс множителей. Заполним таблицу расходов, оставив ячейки, соответствующие свободным переменным, пустыми. В крайний правый столбец внесем значения неизвестных u1,…,um, в нижнюю строку - значения неизвестных v1,…,vn,. Эти m + n неизвестных для всех (i, j), соответствующих базисным переменным, должны удовлетворять линейной системе уравнений ui + vj = pij.

Для всех базисных решений эта система имеет треугольный вид, ранг её матрицы равен n + m - 1. Следовательно, систему всегда можно решить следующим способом.

Полагают vn = 0. Если значения k неизвестных определены, то в системе всегда имеется уравнение, одно из неизвестных в котором уже найдено, а другое ещё нет.

Переменные ui и vj симплекс - множителями. Иногда они называются также потенциалами, а этот метод решения называют методом потенциалов.

v5 = 0 u3 = 8, так как u3 + u5 = p35 = 8, v4 = -7, так как u3 + v4 = p34 = 1, v3 = -5, так как u3 + v3 = 3, u2 = 12 v2 = -8, v1 = -6 u1 = 11.

Симплекс - множители нужны для того, чтобы найти свободную ячейку (i, j), которая при замене базиса переходит в базисную (это соответствует отысканию разрешающего столбца в симплекс - методе).

Для определения симплекс - множителей мы вносим на свободные места в таблице значения

pij = pij - ui - vj

(коэффициенты целевой функции, пересчитанные для свободных переменных). Если все pij 0, то базисное решение оптимально. В противном случае мы выбираем произвольное p 0, чаще всего наименьшее. Индексом помечено свободное переменное х , которое должно войти в базис. Соответствующую ячейку транспортной таблицы мы отметим знаком +.

Кроме ячейки (, ) транспортной таблицы, мы пометим значками - и + другие занятые числами ячейки таким образом, чтобы в каждой строке и в каждом столбце транспортной таблицы число знаков + было равно числу знаков -. Это всегда можно сделать единственным образом, причем в каждой строке и в каждом столбце будет содержаться максимум по одному знаку = и по одному знаку -.

Затем мы определяем минимум М из всех элементов, помеченных знаком -, и выбираем ячейку (, ), где этот минимум достигается.

Переход к новой транспортной таблице (замена базиса) происходит следующим образом:

а). В ячейку (, ) новой таблицы записывается число М.

б). Ячейка (, ) остается пустой.

в). В других ячейках помеченных знаками - или +, число М вычитается из стоящего в ячейке числа (-) или складывается с ним (+). Результат вносится в соответствующую ячейку новой таблицы.

г). Непомеченные числа переносятся в новую таблицу без изменений. Остальные ячейки новой таблицы остаются пустыми

Выводы

В данной главе мы рассмотрели следующие типы транспортных задач:

· Транспортная задача с избытком заявок

· Транспортная задача с избытком запасов.

Так же были рассмотрены следующие методы:

· Метод потенциалов

· Симплекс Метод

Необходимо отметить также, что встречаются такие транспортные задачи, в которых количество базисных клеток меньше чем m + n - 1. В этом случае такая задача называется вырожденной. И следует в одной из свободных клеток поставить количество перевозок равное нулю

Глава 2. Составление опорного плана

2.1 Распределительный метод достижения оптимального плана

Решение транспортной задачи начинается с нахождения опорного плана. Для этого существуют различные способы. Например, способ северо-западного угла, способ минимальной стоимости по строке, способ минимальной стоимости по столбцу и способ минимальной стоимости таблицы.

Рассмотрим простейший, так называемый способ северо-западного угла. Пояснить его проще всего будет на конкретном примере:

Условия транспортной задачи заданы транспортной таблицей.

Будем заполнять таблицу перевозками постепенно начиная с левой верхней ячейки ("северо-западного угла" таблицы). Будем рассуждать при этом следующим образом. Пункт В1 подал заявку на 18 единиц груза.

Удовлетворим эту заявку за счёт запаса 48, имеющегося в пункте А1 , и запишем перевозку 18 в клетке (1,1). После этого заявка пункта В1 удовлетворена, а в пункте А1 осталось ещё 30 единиц груза. Удовлетворим за счёт них заявку пункта В2 (27 единиц), запишем 27 в клетке (1,2); оставшиеся 3 единицы пункта А1 назначим пункту В3.

В составе заявки пункта В3 остались неудовлетворёнными 39 единиц. Из них 30 покроем за счёт пункта А2, чем его запас будет исчерпан, и ещё 9 возьмём из пункта А3. Из оставшихся 18 единиц пункта А3 12 выделим пункту В4; оставшиеся 6 единиц назначим пункту В5, что вместе со всеми 20 единицами пункта А4 покроет его заявку Еремин И.И., Астафьев Н.Н. Введение в теорию линейного и выпуклого программирования М.; Наука, 1996г.-с.156. На этом распределение запасов закончено; каждый пункт назначения получил груз, согласно своей заявки. Это выражается в том, что сумма перевозок в каждой строке равна соответствующему запасу, а в столбце - заявке. Таким образом, нами сразу же составлен план перевозок, удовлетворяющий балансовым условиям. Полученное решение является опорным решением транспортной задачи:

Составленный нами план перевозок, не является оптимальным по стоимости, так как при его построении мы совсем не учитывали стоимость перевозок Сij .

Другой способ - способ минимальной стоимости по строке - основан на том, что мы распределяем продукцию от пункта Ai не в любой из пунктов Bj, а в тот, к которому стоимость перевозки минимальна. Если в этом пункте заявка полностью удовлетворена, то мы убираем его из расчетов и находим минимальную стоимость перевозки из оставшихся пунктов Bj. Во всем остальном этот метод схож с методом северо-западного угла. В результате, опорный план, составленный способом минимальной стоимости по строке выглядит, так как показано в таблице № 3.

При этом методе может получиться, что стоимости перевозок Cij и Cik от пункта Ai к пунктам Bj и Bk равны. В этом случае, с экономической точки зрения, выгоднее распределить продукцию в тот пункт, в котором заявка больше. Так, например, в строке 2: C21 = C24, но заявка b1 больше заявки b4, поэтому 4 единицы продукции мы распределим в клетку (2,1).

Способ минимальной стоимости по столбцу аналогичен предыдущему способу. Их отличие состоит в том, что во втором способе мы распределяем продукцию от пунктов Bi к пунктам Aj по минимальной стоимости Cji.

Опорный план, составленный способами минимальных стоимостей, обычно более близок к оптимальному решению. Так в нашем примере общие затраты на транспортировку по плану, составленному первым способом F0 = 1039, а по второму F0 = 723 Бронштейн И.Н., Семендяев К.А. Справочник по математике. - М.; Наука, 1996г-с.115.

Клетки таблицы, в которых стоят ненулевые перевозки, являются базисными. Их число должно равняться m + n - 1. Необходимо отметить также, что встречаются такие ситуации, когда количество базисных клеток меньше чем m + n - 1. В этом случае распределительная задача называется вырожденной. И следует в одной из свободных клеток поставить количество перевозок равное нулю. Так, например, в таблице № 3:

m + n - 1 = 4 + 5 - 1 = 8,

а базисных клеток 7, поэтому нужно в одну из клеток строки 3 или столбца 2 поставить значение “0”. Например в клетку (3,5).

Составляя план по способам минимальных стоимостей в отличии от плана по способу северо-западного угла мы учитываем стоимости перевозок Cij, но все же не можем утверждать, что составленный нами план является оптимальным.

Теперь попробуем улучшить план, составленный способом северо-западного угла. Перенесем, например, 18 единиц из клетки (1,1) в клетку (2,1) и чтобы не нарушить баланса перенесём те же 18 единиц из клетки (2,3) в клетку (1,3). Получим новый план.

Подсчитав стоимость опорного плана (она ровняется 1039) и стоимость нового плана (она ровняется 913) нетрудно убедиться, что стоимость нового плана на 126 единиц меньше. Таким образом, за счёт циклической перестановки 18 единиц груза из одних клеток в другие нам удалось понизить стоимость.

В дальнейшем будет основан алгоритм оптимизации плана перевозок. Циклом в транспортной задаче мы будем называть несколько занятых клеток, соединённых замкнутой, ломанной линией, которая в каждой клетке совершает поворот на 90.

Каждый цикл имеет чётное число вершин и значит, чётное число звеньев (стрелок). Условимся отмечать знаком + те вершины цикла, в которых перевозки необходимо увеличить, а знаком - , те вершины , в которых перевозки необходимо уменьшить. Цикл с отмеченными вершинами будем называть означенным.

Перенести какое-то количество единиц груза по означенному циклу, это значит увеличить перевозки, стоящие в положительных вершинах цикла, на это количество единиц, а перевозки, стоящие в отрицательных вершинах уменьшить на то же количество.

Очевидно, при переносе любого числа единиц по циклу равновесие между запасами и заявками не меняется: по прежнему сумма перевозок в каждой строке равна запасам этой строки, а сумма перевозок в каждом столбце - заявке этого столбца.

Таким образом, при любом циклическом переносе, оставляющем перевозки неотрицательными допустимый план остаётся допустимым. Стоимость же плана при этом может меняться: увеличиваться или уменьшатся.

Назовём ценой цикла увеличение стоимости перевозок при перемещении одной единицы груза по означенному циклу. Очевидно, цена цикла ровна алгебраической сумме стоимостей, стоящих в вершинах цикла, причём стоящие в положительных вершинах берутся со знаком +, а в отрицательных со знаком -. Обозначим цену цикла через. При перемещении одной единицы груза по циклу стоимость перевозок увеличивается на величину.

При перемещении по нему k единиц груза стоимость перевозок увеличиться на k. Очевидно, для улучшения плана имеет смысл перемещать перевозки только по тем циклам, цена которых отрицательна.

Каждый раз, когда нам удаётся совершить такое перемещение, стоимость плана уменьшается на соответствующую величину k. Так как перевозки не могут быть отрицательными, мы будем пользоваться только такими циклами, отрицательные вершины которых лежат в базисных клетках таблицы, где стоят положительные перевозки. Если циклов с отрицательной ценой в таблице больше не осталось, это означает, что дальнейшее улучшение плана невозможно, то есть оптимальный план достигнут.

Метод последовательного улучшения плана перевозок и состоит в том, что в таблице отыскиваются циклы с отрицательной ценой, по ним перемещаются перевозки, и план улучшается до тех пор, пока циклов с отрицательной ценой уже не останется.

При улучшении плана циклическими переносами, как правило, пользуются приёмом, заимствованным из симплекс-метода: при каждом шаге (цикле) заменяют одну свободную переменную на базисную, то есть заполняют одну свободную клетку и взамен того освобождают одну из базисных клеток. При этом общее число базисных клеток остаётся неизменным и равным m + n - 1 . Этот метод удобен тем, что для него легче находить подходящие циклы.

Можно доказать, что для любой свободной клетке транспортной таблице всегда существует цикл и притом единственный, одна из вершин которого лежит в этой свободной клетке, а все остальные в базисных клетках.

Если цена такого цикла, с плюсом в свободной клетке, отрицательна, то план можно улучшить перемещением перевозок по данному циклу. Количество единиц груза k, которое можно переместить, определяется минимальным значением перевозок, стоящих в отрицательных вершинах цикла (если переместить большее число единиц груза, возникнут отрицательные перевозки).

Использованный выше метод отыскания оптимального решения транспортной задачи называется распределённым; он состоит в непосредственном отыскании свободных клеток с отрицательной ценой цикла и в перемещении перевозок по этому циклу.

Распределительный метод решения транспортной задачи, с которым мы познакомились, обладает одним недостатком: нужно отыскивать циклы для всех свободных клеток и находить их цены. От этой трудоёмкой работы нас избавляет специальный метод решения транспортной задачи, который называется методом потенциалов.

2.2 Решение транспортной задачи методом потенциалов

Этот метод позволяет автоматически выделять циклы с отрицательной ценой и определять их цены.

Пусть имеется транспортная задача с балансовыми условиями

Стоимость перевозки единицы груза из Ai в Bj равна C ij ; таблица стоимостей задана. Требуется найти план перевозок xij, который удовлетворял бы балансовым условиям и при этом стоимость всех перевозок бала минимальна.

Идея метода потенциалов для решения транспортной задачи сводиться к следующему.

Представим себе что каждый из пунктов отправления Ai вносит за перевозку единицы груза (всё равно куда) какую-то сумму ?i ; в свою очередь каждый из пунктов назначения Bj также вносит за перевозку груза (куда угодно) сумму ?j .

Эти платежи передаются некоторому третьему лицу (“перевозчику“). Обозначим ?i + ?j = cij ( i=1..m ;j=1..n) и будем называть величину cij “псевдостоимостью” перевозки единицы груза из Ai в Bj. Заметим, что платежи ?i и ?j не обязательно должны быть положительными; не исключено, что “перевозчик” сам платит тому или другому пункту какую-то премию за перевозку.

Также надо отметить, что суммарная псевдостоимость любого допустимого плана перевозок при заданных платежах (?i и ?j ) одна и та же и от плана к плану не меняется1 Иванов Ю.П., Лотов А.В. Математические модели в экономике. - М.; Наука, 1999г.-с.68.

До сих пор мы никак не связывали платежи (?i и ?j) и псевдостоимости cij с истинными стоимостями перевозок C ij. Теперь мы установим между ними связь. Предположим, что план xij невырожденный (число базисных клеток в таблице перевозок ровно m + n -1). Для всех этих клеток xij >0. Определим платежи (?i и ?j) так, чтобы во всех базисных клетках псевдостоимости были ровны стоимостям:

cij = ?i + ?j = сij , при xij >0.

Что касается свободных клеток (где xij = 0), то в них соотношение между псевдостоимостями и стоимостями может быть, какое угодно.

Оказывается соотношение между псевдостоимостями и стоимостями в свободных клетках показывает, является ли план оптимальным или же он может быть улучшен. Существует специальная теорема: Если для всех базисных клеток плана xij > 0,

?i + ?j = cij= сij ,

а для всех свободных клеток xij =0,

?i + ?j = cij? сij ,

то план является оптимальным и никакими способами улучшен быть не может. Нетрудно показать, что это теорема справедлива также для вырожденного плана, и некоторые из базисных переменных равны нулю. План обладающий свойством :

cij= сij (для всех базисных клеток ) (1)

cij? сij ( для всех свободных клеток ) (2)

называется потенциальным планом, а соответствующие ему платежи (?i и ?j ) -- потенциалами пунктов Ai и Bj ( i=1,...,m ; j=1,...,n ). Пользуясь этой терминологией вышеупомянутую теорему можно сформулировать так:

Всякий потенциальный план является оптимальным.

Таким образом, при пользовании методом потенциалов для решения транспортной задачи отпадает наиболее трудоёмкий элемент распределительного метода: поиски циклов с отрицательной ценой.

Процедура построения потенциального (оптимального) плана состоит в следующем1 Карманов В.Г. Математическое программирование. - М.; Наука, 1996г.-с.20.

В качестве первого приближения к оптимальному плану берётся любой допустимый план (например, построенный способом минимальной стоимости по строке). В этом плане m + n - 1 базисных клеток, где m - число строк, n - число столбцов транспортной таблицы. Для этого плана можно определить платежи (?i и ?j ), так, чтобы в каждой базисной клетке выполнялось условие :

?i + ?j = сij (3)

Уравнений (3) всего m + n - 1, а число неизвестных равно m + n. Следовательно, одну из этих неизвестных можно задать произвольно (например, равной нулю). После этого из m + n - 1 уравнений (3) можно найти остальные платежи ?i, ?j, а по ним вычислить псевдостоимости, ci,j= ?i + ?j для каждой свободной клетки.

?4 = 0, ?

?4 = 6, так как ?4 + ?4 = С44 = 6, ?

?1= 0, так как ?1 + ?4 = С14 = 6, ?

?3 = 5, так как ?1 + ?3 = С13 = 5, ?

?1 = 7, так как ?4 + ?1 = С41 = 7, ?

?2= -1, так как ?2 + ?1 = С21 = 6, ?

?5 = 6, так как ?2 + ?5 = С25 = 5, ?

?3= 1, так как ?3 + ?5 = С35 = 7, ?

?2 = 6, так как ?3 + ?2 = С25 = 7.

Если оказалось, что все эти псевдостоимости не превосходят стоимостей

cij ? сij , ???

то план потенциален и, значит, оптимален. Если же хотя бы в одной свободной клетке псевдостоимость больше стоимости (как в нашем примере), то план не является оптимальным и может быть улучшен переносом перевозок по циклу, соответствующему данной свободной клетке. Цена этого цикла ровна разности между стоимостью и псевдостоимостью в этой свободной клетке.

В таблице № 5 мы получили в двух клетках ij ? сij , теперь можно построить цикл в любой из этих двух клеток. Выгоднее всего строить цикл в той клетке, в которой разность ij ? сij максимальна. В нашем случае в обоих клетках разность одинакова (равна 1), поэтому, для построения цикла выберем, например, клетку (4,2):(см.таблицу №6)

Теперь будем перемещать по циклу число 14, так как оно является минимальным из чисел, стоящих в клетках, помеченных знаком - . При перемещении мы будем вычитать 14 из клеток со знаком - и прибавлять к клеткам со знаком + .

После этого необходимо подсчитать потенциалы i и j и цикл расчетов повторяется.

Выводы

Итак, мы пришли к следующему алгоритму решения транспортной задачи методом потенциалов.

1. Взять любой опорный план перевозок, в котором отмечены m + n - 1 базисных клеток (остальные клетки свободные).

2. Определить для этого плана платежи (i и j ) исходя из условия, чтобы в любой базисной клетке псевдостоимости были равны стоимостям. Один из платежей можно назначить произвольно, например, положить равным нулю.

3. Подсчитать псевдостоимости i,j = i + j для всех свободных клеток. Если окажется, что все они не превышают стоимостей, то план оптимален.

4. Если хотя бы в одной свободной клетке псевдостоимость превышает стоимость, следует приступить к улучшению плана путём переброски перевозок по циклу, соответствующему любой свободной клетке с отрицательной ценой (для которой псевдостоимость больше стоимости).

5. После этого заново подсчитываются платежи и псевдостоимости, и, если план ещё не оптимален, процедура улучшения продолжается до тех пор, пока не будет найден оптимальный план.

Так в нашем примере после 2 циклов расчетов получим оптимальный план. При этом стоимость всей перевозки изменялась следующим образом:

F0 = 723, F1 = 709, F2 = Fmin = 703.

Следует отметить так же, что оптимальный план может иметь и другой вид, но его стоимость останется такой же Fmin = 703.

Список использованной литературы

1. Еремин И.И., Астафьев Н.Н. Введение в теорию линейного и выпуклого программирования М.; Наука, 1976г.

2. Карманов В.Г. Математическое программирование. - М.; Наука, 1986г.

3. Моисеев Н.Н., Иванов Ю.П., Столярова Е.М. Методы оптимизации. - М.; Наука, 1978г.

4. Иванов Ю.П., Лотов А.В. Математические модели в экономике. - М.; Наука, 1979г.

5. Бронштейн И.Н., Семендяев К.А. Справочник по математике. - М.; Наука, 1986г

Таблица № 1

ПН

ПО

В1

В2

В3

В4

В5

Запасы

аi

А1

10

8

5

6

9

48

А2

6

7

8

6

5

30

А3

8

7

10

8

7

27

А4

7

5

4

6

8

20

Заявки

bj

18

27

42

12

26

125

Таблица № 2

ПН

ПО

В1

В2

В3

В4

В5

Запасы

аi

А1

10

18

8

27

5

3

6

9

48

А2

6

7

8

30

6

5

30

А3

8

7

10

9

8

12

7

6

27

А4

7

5

4

6

8

20

20

Заявки

bj

18

27

42

12

26

125

Таблица № 3

ПН

ПО

В1

В2

В3

В4

В5

Запасы

аi

А1

10

8

5

42

6

6

9

48

А2

6

4

7

8

6

5

26

30

А3

8

7

27

10

8

7

0

27

А4

7

14

5

4

6

6

8

20

Заявки

bj

18

27

42

12

26

125

Таблица №4

ПН

ПО

В1

В2

В3

В4

В5

Запасы

аi

А1

10

8

27

5

21

6

9

48

А2

6

18

7

8

12

6

5

30

А3

8

7

10

9

8

12

7

6

27

А4

7

5

4

6

8

20

20

Заявки

bj

18

27

42

12

26

125

Таблица №5

ПН

ПО

В1

В2

В3

В4

В5

i

А1

10

= 7

8

= 6

5

42

6

6

9

= 6

1= 0

А2

6

4

7

= 5

8

= 4

6

= 5

5

26

2= -1

А3

8

= 8

7

27

10

= 6

8

= 7

7

0

3= 1

А4

7

14

5

= 6

4

= 5

6

6

8

= 6

4= 0

j

1= 7

2= 6

3= 5

4= 6

5= 6

Таблица №6

ПН

ПО

В1

В2

В3

В4

В5

i

А1

10

8

5

42

6

6

9

0

А2

6 +

4

7

8

6

5 -

26

-1

А3

8

7 -

27

10

8

7 +

0

1

А4

7 -

14

5 +

?

4

6

6

8

0

j

7

6

5

6

6

Приложение №2

program kursovik_andrew;

uses crt,graph,dos;

label 1,11,exit,home,ende;

const

Epsilon=0.0000001;

type

mas=array [1..5] of real;

mas1=array [1..3,1..5] of real;

mas2=array [1..5] of integer;

mas3=array [1..3,1..5] of integer;

s1=array [1..12] of string[78];

s2=array [1..3,1..5] of string[2];

s3=array [1..5] of string[3];

s4=array [1..3,1..5] of string[3];

var

Fmin : real;

m,n,i1,j1,p,t,gd,gm,x11,y : integer;

c,x,x1,xz,cc,tempC : mas1;

tempA,tempB : mas;

alfa,beta,d,d1 : mas;

masI,masJ,a,b,masx,masy : mas2;

masx1,masy1 : mas3;

max,min : real;

LeftButton,RightButton : boolean;

xm,ym,pp,sum,sum1 : integer;

xms,yms,xp,yp : integer;

ch : char;

punkt,punkt1,punkt2,temp,i,j,k1,z,v,h : byte;

f : text;

colorw1,colorw2,colorw3 : byte;

colorb1,colorb2,colorb3 : byte;

xr,yr,x1r,y1r,x2,y2,x3,y3,tempX,tempY : integer;

s : s1;

sc,scc : s2;

s_alfa,s_beta,sj,si,sa,sb : s3;

sx : s4;

s_sum,sk : string[3];

s_fmin : string[5];

procedure klava;

begin

ch:=readkey;

case ch of

#13: begin

punkt:=punkt1;

end;

#0: begin

ch:=readkey;

case ch of

#72: begin

if punkt1>1 then punkt1:=punkt1-1

else punkt1:=3;

end;

#80:begin

if punkt1<3 then punkt1:=punkt1+1

else punkt1:=1;

end

else punkt:=0;

end;

end;

else punkt:=0;

end;

end;

function ResetMouse : Boolean;

var

r : Registers;

begin

r.ax:=0;

intr($33,r);

ResetMouse:= r.ax=$FFFF;

end;

procedure ShowMouseCursor;

var

r : Registers;

begin

r.ax:=1;

intr($33,r);

end;

procedure HideMouseCursor;

var

r : Registers;

begin

r.ax:=2;

intr($33,r);

end;

procedure ReadMouseState(var x,y : integer;

var LeftButton,

RightButton : Boolean);

var

r : Registers;

begin

r.ax:=3;

intr($33,r);

x:=r.cx;

y:=r.dx;

LeftButton:=(r.bx and 1) <> 0;

RightButton:=(r.bx and 2) <> 0;

end;

procedure balans;

begin

sum:=0;

sum1:=0;

for i:=1 to m do

sum:=sum+a[i];

for j:=1 to n do

sum1:=sum1+b[j];

if sum>sum1 then

begin

n:=n+1;

b[n]:=sum-sum1;

sum1:=sum;

end;

if sum<sum1 then

begin

m:=m+1;

a[m]:=sum1-sum;

sum:=sum1;

end;

end;

procedure north_west_angle;

begin

for j:=1 to n do

tempB[j]:=b[j];

for i:=1 to m do

tempA[i]:=a[i];

i:=1;

j:=1;

repeat

if tempA[i]<tempB[j] then

begin

x[i,j]:=tempA[i];

tempB[j]:=tempB[j]-tempA[i];

inc(i);

end

else

begin

x[i,j]:=tempB[j];

tempA[i]:=tempA[i]-tempB[j];

inc(j);

end;

until

(i>m) or (j>n);

for i:=1 to m do

for j:=1 to n do

xz[i,j]:=x[i,j];

end;

procedure PEpsilon;

begin

for i:=1 to m do

for j:=1 to n do begin

if i=m then begin

if x[i,j]<>0 then

if x[i,j+1]=0 then

x[i,j+1]:=Epsilon;

end

else

if j=n then begin

if x[i,j]<>0 then

if x[i+1,j]=0 then

x[i,j+1]:=Epsilon;

end

else

if (i=m) and (j=n) then continue

else

if x[i,j]<>0 then

if (x[i+1,j]=0) and (x[i,j+1]=0) then

x[i,j+1]:=Epsilon;

end;

end;

procedure psevdostoimost;

begin

for i:=1 to m do

for j:=1 to n do begin

alfa[i]:=0;

beta[j]:=0;

cc[i,j]:=0;

end;

for i:=1 to m do

for j:=1 to n do

if x[i,j]<>0 then cc[i,j]:=c[i,j];

i:=0;

alfa[1]:=0;

repeat

inc(i);

for j:=1 to n do

if x[i,j]<>0 then begin

beta[j]:=cc[i,j]-alfa[i];

for t:=i to m do

if x[t,j]<>0 then

alfa[t]:=cc[t,j]-beta[j];

end;

until

i=m;

for i:=1 to m do

for j:=1 to n do

cc[i,j]:=alfa[i]+beta[j];

end;

procedure Pmax;

begin

for i:=1 to m do

for j:=1 to n do

tempC[i,j]:=cc[i,j]-c[i,j];

max:=0;

for i:=1 to m do

for j:=1 to n do

if tempC[i,j]>max then begin

max:=tempC[i,j];

i1:=i;

j1:=j;

end;

end;

procedure Pschet;

label 1,2;

var

dopi,dopj,k,kk,p : integer;

rezultsravn,rezultsravn1 : boolean;

procedure Px;

begin

x1[i1,j1]:=0.0;

min:=7777;

for i:=1 to v do

if odd(i)=true then

if min>x1[masI[i],masJ[i]] then

min:=x1[masI[i],masJ[i]];

for i:=1 to v do

if odd(i)=true then

x1[masI[i],masJ[i]]:=x1[masI[i],masJ[i]]-min

else

x1[masI[i],masJ[i]]:=x1[masI[i],masJ[i]]+min;

for i:=1 to v do

x[masI[i],masJ[i]]:=x1[masI[i],masJ[i]];

Fmin:=0;

for i:=1 to m do

for j:=1 to n do

if x[i,j]<>0 then Fmin:=Fmin+x[i,j]*c[i,j];

end;

procedure Px1;

begin

for i:=1 to m do

for j:=1 to n do

x1[i,j]:=x[i,j];

x1[i1,j1]:=Epsilon;

for i:=1 to m do

d[i]:=0;

for j:=1 to n do

d1[j]:=0;

for i:=1 to m do

for j:=1 to n do

if x1[i,j]<>0 then

d[i]:=d[i]+1;

for i:=1 to m do

if d[i]<=1 then

for j:=1 to n do

x1[i,j]:=0;

for j:=1 to n do

for i:=1 to m do

if x1[i,j]<>0 then

d1[j]:=d1[j]+1;

for j:=1 to n do

if d1[j]<=1 then

for i:=1 to m do

x1[i,j]:=0;

for i:=1 to m do

for j:=1 to n do

if x1[i,j]<>0 then

d[i]:=d[i]+1;

for i:=1 to m do

if d[i]<=1 then

for j:=1 to n do

x1[i,j]:=0;

end;

procedure sravn;

var

z:byte;

begin

for z:=1 to v do

if (dopi=masI[z]) and (j=masJ[z]) then

rezultsravn:=true

else

rezultsravn:=false;

end;

procedure sravn1;

var

z:byte;

begin

for z:=1 to v do

if (i=masI[z]) and (dopJ=masJ[z]) then

rezultsravn1:=true

else

rezultsravn1:=false;

end;

begin

Px1;

i:=i1;

j:=j1;

v:=0;

k:=1;

kk:=1;

p:=0;

repeat

2:

inc(p);

if k=1 then

if kk=1 then begin

for dopi:=i-1 downto 1 do

if x1[dopi,j]<>0 then begin

sravn;

if rezultsravn=true then begin

kk:=0;

goto 1;

end

else begin

i:=dopI;

inc(v);

masI[v]:=i;

masJ[v]:=j;

k:=0;

goto 1;

end;

end;

kk:=0;

end

else begin

for dopi:=i+1 to m do

if x1[dopi,j]<>0 then begin

sravn;

if rezultsravn=true then begin

kk:=1;

goto 1;

end

else begin

i:=dopI;

inc(v);

masI[v]:=i;

masJ[v]:=j;

k:=0;

goto 1;

end;

end;

kk:=1;

end

else

if kk=1 then begin

for dopJ:=j-1 downto 1 do

if x1[i,dopJ]<>0 then begin

sravn1;

if rezultsravn1=true then begin

kk:=0;

goto 1;

end

else begin

j:=dopJ;

inc(v);

masI[v]:=i;

masJ[v]:=j;

k:=1;

goto 1;

end;

end;

kk:=0;

end

else begin

for dopJ:=j+1 to n do

if x1[i,dopJ]<>0 then begin

sravn1;

if rezultsravn1=true then begin

kk:=1;

goto 1;

end

else begin

j:=dopJ;

inc(v);

masI[v]:=i;

masJ[v]:=j;

k:=1;

goto 1;

end;

end;

kk:=1;

end;

1:

if p=1 then goto 2;

until

(i=i1) and (j=j1);

Px;

end;

begin

m:=3;

n:=5;

c[1,1]:=7; c[1,2]:=12; c[1,3]:=4; c[1,4]:=6; c[1,5]:=5;

c[2,1]:=1; c[2,2]:=8; c[2,3]:=6; c[2,4]:=5; c[2,5]:=3;

c[3,1]:=6; c[3,2]:=13; c[3,3]:=8; c[3,4]:=7; c[3,5]:=4;

a[1]:=180; a[2]:=350; a[3]:=20;

b[1]:=110; b[2]:=90; b[3]:=120; b[4]:=80; b[5]:=150;

punkt:=1;

punkt1:=1;

gd:=9;

gm:=2;

InitGraph(gd,gm,'C:\tools\tp\bgi');

if ResetMouse=false then halt(1);

xp:=getmaxx div 2 - 56;

yp:=getmaxx div 3 - 40;

xm:=xp+128;

ym:=yp+28;

ShowMouseCursor;

home:

Settextstyle(0,0,4);

Setcolor(2);

outtextxy(5,20,''ђЂЌ`ЏЋђ'ЌЂџ ‡Ђ„Ђ--Ђ');

Setcolor(8);

Setlinestyle(SolidLn,1,ThickWidth);

rectangle(xp-15,yp-15,xm+15,ym+95);

Settextstyle(0,0,1);

Setcolor(4);

outtextxy(239,440,'‚ Ќ € Њ Ђ Ќ € … !!!!');

outtextxy(219,450,'„ ­­л© Їа®Ја ¬¬л© Їа®¤гЄв');

outtextxy(183,460,'§ йЁйҐ­ а®ббЁ©бЄЁ¬ Ё ¬Ґ¦¤г­ а®¤­л¬');

outtextxy(175,470,'§ Є®­®¤ вҐ«мбвў®¬ ®Ў ўв®абЄ®¬ Їа ўҐ.');

HideMouseCursor;

case punkt of

1: begin

colorw1:=15;

colorw2:=8;

colorw3:=8;

colorb1:=8;

colorb2:=15;

colorb3:=15;

end;

2: begin

colorw1:=8;

colorw2:=15;

colorw3:=8;

colorb1:=15;

colorb2:=8;

colorb3:=15;

end;

3: begin

colorw1:=8;

colorw2:=8;

colorw3:=15;

colorb1:=15;

colorb2:=15;

colorb3:=8;

end;

end;

Setfillstyle(1,colorw1);

bar(xp,yp,xm,ym);

Setfillstyle(1,7);

bar(xp+2,yp+2,xm-3,ym-3);

Setfillstyle(1,colorb1);

bar(xp,yp,xp+1,ym);

bar(xp+2,yp+1,xp+2,ym-1);

bar(xp,yp,xm,yp+1);

bar(xp+1,yp+1,xm-1,yp+2);

SetlineStyle(0,0,1);

Setcolor(colorb1);

line(xp,yp,xp+2,yp+2);

line(xp,ym,xp+2,ym-2);

line(xm,yp,xm-2,yp+2);

Setcolor(colorw1);

line(xm,ym,xm-2,ym-2);

Settextstyle(0,0,2);

setcolor(2);

outtextxy(xp+7,yp+7,'‡ ¤ ­ЁҐ');

Setfillstyle(1,colorw2);

bar(xp,yp+40,xm,ym+40);

Setfillstyle(1,7);

bar(xp+2,yp+42,xm-3,ym+37);

Setfillstyle(1,colorb2);

bar(xp,yp+40,xp+1,ym+40);

bar(xp+2,yp+41,xp+2,ym+39);

bar(xp,yp+40,xm,yp+41);

bar(xp+1,yp+41,xm-1,yp+42);

SetlineStyle(0,0,1);

Setcolor(colorb2);

line(xp,yp+40,xp+2,yp+42);

line(xp,ym+40,xp+2,ym+38);

line(xm,yp+40,xm-2,yp+42);

Setcolor(colorw2);

line(xm,ym+40,xm-2,ym+38);

Settextstyle(0,0,2);

setcolor(2);

outtextxy(xp+7,yp+47,'ђҐиҐ­ЁҐ');

Setfillstyle(1,colorw3);

bar(xp,yp+80,xm,ym+80);

Setfillstyle(1,7);

bar(xp+2,yp+82,xm-3,ym+77);

Setfillstyle(1,colorb3);

bar(xp,yp+80,xp+1,ym+80);

bar(xp+2,yp+81,xp+2,ym+79);

bar(xp,yp+80,xm,yp+81);

bar(xp+1,yp+81,xm-1,yp+82);

SetlineStyle(0,0,1);

Setcolor(colorb3);

line(xp,yp+80,xp+2,yp+82);

line(xp,ym+80,xp+2,ym+78);

line(xm,yp+80,xm-2,yp+82);

Setcolor(colorw3);

line(xm,ym+80,xm-2,ym+78);

Settextstyle(0,0,2);

setcolor(2);

outtextxy(xp+24,yp+87,'‚л室');

ShowMouseCursor;

repeat

ReadMouseState(xms,yms,LeftButton,RightButton);

until

LeftButton or keypressed;

if (xms>xp) and (yms>yp) and (xms<xm) and (yms<ym) and LeftButton

then punkt1:=1

else

if (xms>xp) and (yms>yp+40) and (xms<xm) and (yms<ym+40) and LeftButton

then punkt1:=2

else

if (xms>xp) and (yms>yp+80) and (xms<xm) and (yms<ym+80) and LeftButton

then punkt1:=3

else

punkt:=0;

if keypressed then klava;

if punkt<>punkt1 then punkt:=punkt1

else

case punkt of

1: begin

HideMouseCursor;

Cleardevice;

assign(f,'1.txt');

reset(f);

pp:=0;

Settextstyle(0,0,1);

Setcolor(15);

for i:=1 to 12 do begin

readln(f,s[i]);

outtextxy(10,pp,s[i]);

pp:=pp+20

end;

outtextxy(1,470,'Ќ ¦¬ЁвҐ «оЎго Є« ўЁиг ¤«п Їа®¤®«¦Ґ­Ёп');

ellipse(52,143,90,270,5,26);

ellipse(142,143,270,90,5,26);

readkey;

close(f);

Cleardevice;

ShowMouseCursor;

goto home;

end;

2: begin

HideMouseCursor;

Cleardevice;

for i:=1 to m do

for j:=1 to n do

x[i,j]:=xz[i,j];

balans;

north_west_angle;

p:=0;

for i:=1 to m do

for j:=1 to n do

if x[i,j]<>0 then inc(p);

if (n+m-1)>p then PEpsilon;

psevdostoimost;

Pmax;

k1:=1;

x1r:=GetMaxX div 2 + 250;

y1r:=GetMaxY div 2 + 160;

xr:=90;

yr:=90;

tempX:=(x1r-xr) div (n+3);

tempY:=(y1r-yr) div (m+3);

x2:=xr;

y2:=yr;

x3:=x2+tempX;

y3:=y2+tempY;

SetColor(2);

while true do begin

for i:=1 to m do

for j:=1 to n do begin

str(c[i,j]:0:0,sc[i,j]);

str(cc[i,j]:0:0,scc[i,j]);

if x[i,j]=0 then sx[i,j]:=' '

else

str(x[i,j]:0:0,sx[i,j]);

str(alfa[i]:0:0,s_alfa[i]);

str(beta[j]:0:0,s_beta[j]);

str(i:0,si[i]);

str(j:0,sj[j]);

str(a[i]:0,sa[i]);

str(b[j]:0,sb[j]);

end;

SetColor(13);

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(183,10,'€ ' … ђ Ђ - € џ ь');

str(k1:0,sk);

outtextxy(463,10,sk);

for i:=1 to m+3 do begin

for j:=1 to n+3 do begin

SetColor(2);

rectangle(x2,y2,x3,y3);

if (i>1) and (j>1) and (i<5) and (j<7) then begin

SetColor(15);

SetTextStyle(DefaultFont, HorizDir, 1);

outtextxy(x2+5,y2+3,scc[i-1,j-1]);

SetTextStyle(DefaultFont, HorizDir, 1);

outtextxy(x3-16,y2+3,sc[i-1,j-1]);

SetColor(4);

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(x2+3,y2+((y3 - y2) div 2),sx[i-1,j-1]);

SetColor(2);

end;

if (i=1) and (j>1) and (j<7) then begin

Setcolor(3);

SetTextStyle(0,0, 3);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,'B');

SetTextStyle(1,0, 3);

outtextxy(x2+32,y2+((y3 - y2) div 2)-4,sj[j-1]);

end;

if (j=1) and (i>1) and (i<5) then begin

Setcolor(3);

SetTextStyle(0,0, 3);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,'A');

SetTextStyle(1,0, 3);

outtextxy(x2+32,y2+((y3 - y2) div 2)-4,si[i-1]);

end;

if (i=5) and (j=1) then begin

Setcolor(5);

SetTextStyle(0,0, 3);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,'b');

SetTextStyle(1,0, 3);

outtextxy(x2+32,y2+((y3 - y2) div 2)-4,'j');

end;

if (j=7) and (i=1) then begin

Setcolor(5);

SetTextStyle(0,0, 3);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,'a');

SetTextStyle(1,0, 3);

outtextxy(x2+32,y2+((y3 - y2) div 2)-4,'i');

end;

if (j=8) and (i=1) then begin

Setcolor(9);

SetTextStyle(7,0, 5);

outtextxy(x2+8,y2+((y3 - y2) div 2)-22,'a');

SetTextStyle(1,0, 3);

outtextxy(x2+32,y2+((y3 - y2) div 2)-4,'i');

end;

if (i=6) and (j=1) then begin

Setcolor(9);

SetTextStyle(4,0, 5);

outtextxy(x2+8,y2+((y3 - y2) div 2)-22,'B');

SetTextStyle(1,0, 3);

outtextxy(x2+33,y2+((y3 - y2) div 2)-4,'j');

end;

if (i=5) and (j>1) and (j<7) then begin

Setcolor(5);

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,sb[j-1]);

end;

if (j=7) and (i>1) and (i<5) then begin

Setcolor(5);

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,sa[i-1]);

end;

if (j=8) and (i>1) and (i<5) then begin

Setcolor(9);

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,s_alfa[i-1]);

end;

if (i=6) and (j>1) and (j<7) then begin

Setcolor(9);

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,s_beta[j-1]);

end;

if (j=7) and (i=5) then begin

str(sum:0,s_sum);

Setcolor(11);

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(x2+8,y2+((y3 - y2) div 2)-4,s_sum);

end;

if (i>1) and (j>1) and (i<4) and (j<7) then begin

masx1[i-1,j-1]:=x2+28;

masy1[i-1,j-1]:=y2+((y3 - y2) div 2)-4;

end;

Setcolor(2);

x2:=x2+tempX;

x3:=x3+tempX;

end;

x2:=xr;

x3:=x2+tempX;

SetColor(2);

y2:=y2+tempY;

y3:=y2+tempY;

end;

Setcolor(15);

SetTextStyle(DefaultFont, HorizDir, 1);

x1r:=GetMaxX div 2 + 250;

y1r:=GetMaxY div 2 + 160;

xr:=90;

yr:=90;

tempX:=(x1r-xr) div (n+3);

tempY:=(y1r-yr) div (m+3);

x2:=xr;

y2:=yr;

x3:=x2+tempX;

y3:=y2+tempY;

SetColor(2);

psevdostoimost;

Pmax;

if max=0 then begin

str(Fmin:0:0,s_fmin);

SetTextStyle(DefaultFont, HorizDir, 2);

SetColor(12);

outtextxy(100,60,'Ќ ©¤Ґ­® ®ЇвЁ¬ «м­®Ґ аҐиҐ­ЁҐ');

SetColor(2);

SetTextStyle(DefaultFont, HorizDir, 3);

outtextxy(100,410,'F');

SetTextStyle(DefaultFont, HorizDir, 2);

outtextxy(124,420,'min');

SetTextStyle(DefaultFont, HorizDir, 3);

outtextxy(172,410,'=');

outtextxy(196,410,s_fmin);

Fmin:=0;

goto 1;

end;

Pschet;

for i:=1 to m do

for j:=1 to n do

for z:=1 to v do

if (masI[z]=i) and (masJ[z]=j) then begin

masx[z]:=masx1[i,j];

masy[z]:=masy1[i,j];

end;

for z:=1 to v do begin

if z=v then h:=1

else

h:=z+1;

line(masx[z],masy[z],masx[h],masy[h]);

end;

for z:=1 to v do begin

masx[z]:=0;

masy[z]:=0;

end;

psevdostoimost;

inc(k1);

SetTextStyle(DefaultFont, HorizDir, 1);

outtextxy(1,470,'Ќ ¦¬ЁвҐ «оЎго Є« ўЁиг ¤«п Їа®¤®«¦Ґ­Ёп');


Подобные документы

  • Основные подходы и способы решения транспортной задачи, ее постановка и методы нахождения первоначального опорного решения. Математическая модель транспортной задачи и алгоритм ее решения методом потенциалов. Составление опорного плана перевозок.

    курсовая работа [251,0 K], добавлен 03.07.2012

  • Применение линейного программирования для решения транспортной задачи. Свойство системы ограничений, опорное решение задачи. Методы построения начального опорного решения. Распределительный метод, алгоритм решения транспортной задачи методом потенциалов.

    реферат [4,1 M], добавлен 09.03.2011

  • Типы транспортных задач и методы их решения. Поиск оптимального плана перевозок методом потенциалов. Решение задачи с использованием средств MS Excel. Распределительный метод поиска оптимального плана перевозок. Математическая модель, описание программы.

    курсовая работа [808,7 K], добавлен 27.01.2011

  • Экономико-математическая модель прикрепления пунктов отправления к пунктам назначения, расчет оптимального плана перевозок. Решение транспортной задачи метолом потенциалов (перераспределение ресурсов по контуру), пример вычислительного алгоритма.

    учебное пособие [316,8 K], добавлен 17.10.2010

  • Формулировка проблемы в практической области. Построение моделей и особенности экономико-математической модели транспортной задачи. Задачи линейного программирования. Анализ постановки задач и обоснования метода решения. Реализация алгоритма программы.

    курсовая работа [56,9 K], добавлен 04.05.2011

  • Составление математической модели, целевой функции, построение системы ограничений и симплекс-таблиц для решения задач линейного программирования. Решение транспортной задачи: определение опорного и оптимального плана, проверка методом потенциалов.

    курсовая работа [54,1 K], добавлен 05.03.2010

  • Математическая теория оптимального принятия решений. Табличный симплекс-метод. Составление и решение двойственной задачи линейного программирования. Математическая модель транспортной задачи. Анализ целесообразности производства продукции на предприятии.

    контрольная работа [467,8 K], добавлен 13.06.2012

  • Особенности решения задач линейного программирования симплекс-методом. Управляемые параметры, ограничения. Изучение метода потенциалов в процессе решения транспортной задачи. Создание концептуальной модели. Понятие стратификации, детализации, локализации.

    лабораторная работа [869,0 K], добавлен 17.02.2012

  • Экономико-математическая модель оптимального плана выпуска продукции. Оптимальная организация рекламной компании. Решение транспортной задачи: нахождение суммарных затрат на перевозку. Задача об оптимальном назначении (линейного программирования).

    контрольная работа [812,0 K], добавлен 29.09.2010

  • Составление системы ограничений и целевой функции по заданным параметрам. Построение геометрической интерпретации задачи, ее графическое представление. Решение транспортной задачи распределительным методом и методом потенциалов, сравнение результатов.

    контрольная работа [115,4 K], добавлен 15.11.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.