Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мат мет.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
199.17 Кб
Скачать

1.8. Постановка задачи линейного программирования

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

        Задачи такого типа относятся к задачам линейного программирования.  

1.9. Каноническая форма задачи линейного программирования

Каждую задачу линейного программирования можно свести к следующей стандартной форме: найти неотрицательные значения переменных x1, x2,…, xn, которые удовлетворяли бы системе уравнений:

а11x+ a12x+ ………… +  a1nx= b1

а21x1 + a22x2 + ………… + a2nxn = b2

…………………………………………………

аm1x1 + am2x2 + ………… +  amnxn = bm

и обращали в минимум функцию L(x1, x2,…, xn) = c1x1+ c2x2 + …    + cnxn.

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

1.10. Симплекс-метод

Симплекс-метод даёт возможность минимизировать функцию на выпуклой многогранной области многомерного пространства путём определённого перебора вершин этой области.

        Этот метод   используется для решения задач линейного программирования с помощью ЭВМ.

Алгоритм симплекс-метода

  1. Определяется некоторый опорный план, которому соответствует вершина области допустимых решений.

  2. Найденный опорный план (вершина) проверяется на оптимальность. Пусть этот план не оптимален.

  3. Определяется следующий опорный план (вершина) лучший по отношению к предыдущему в результате движения по ребру. Вершина проверяется на оптимальность.

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

1.11. Задача оптимизации

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

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

Экономико-математические модели представляют обширный и достаточно мощный научно-исследовательский, аналитический инструмент познания.

  1. Исследовательская часть

Задача №1

 С ОАО Пивкомбинат "Балаковский" привозят продукцию на торговую базу «Кристалл» машинами 1тонна и 2 тонны. За 1 час торговый склад может принять не более 10 машин, но при этом не более 8 машин по 1 тонне и не более 6 машин по 2 тонны. Сколько машин по 1 и 2 тонны нужно отправлять с пивкомбината на торговый склад за 1 час, чтобы перевезти наибольшее количество продукции?

        Решение

Пусть за один час отправляется x машин по 1 тонне и y машин по 2 тонны. По условию задачи получим систему неравенств:

                     x≥0,

                     y≥0,

                     x≤8,

                     y≤6,

                     x+y≤10.

Всего за один час перевозится x +2y тонны  продукции. Задача свелась к нахождению наибольшего значения линейной функции: S(x;y) = x + 2y в области, заданной системой неравенств.

Множеством решений данной системы  является многоугольник F, изображённый на рисунке.

Прямоугольник 3

Среди всех точек многоугольника F функция S(x ; y) = x + 2y принимает наибольшее значение в вершине многоугольника (4;6). Это значение равно S(4;6) = 1∙4 + 2∙6 = 16.

Ответ: 4 машины по 1 тонне и машин по 2 тонны продукции.  

Задача №2

        Из сёл «Еланка» и «Подсосенки» на склады ОАО «Молоко Поволжья» нужно привезти молоко. ОАО «Еланка» всё  сырьё  может погрузить на 80 машин, а ООО «Подсосенки»  на 100 машин. Склады ОАО «Молоко Поволжья» должны принять: склад №1 – 50 машин, склад №2 – 70 машин, склад №3 – 60 машин. Количество бензина (в литрах), которое расходует одна машина на пробег с полей до склада, задаётся таблицей 1.

Склады

№1

№2

№3

«Еланка»

2

4

5

«Подсосенки»

4

5

3

Требуется составить план перевозок молока, при котором общий расход бензина будет наименьшим

 Решение

Пусть х – число машин, отправленных с предприятия ОАО «Еланка» на склад №1, а у – на склад №2. Тогда план перевозок задаётся таблицей 2.

Таблица 2

Склады

№1

№2

№3

«Еланка»

х

у

80-х-у

«Подсосенки»

50-х

70-у

х+у-20

Их таблицы 1 и 2 находим общий расход бензина:

S(x;y)= 2x+4y+5(80-x-y)+4(50-x)+5(70-y)+3(x+y-20)=890-4x-3y.

В таблице 2 все числа должны быть неотрицательными.

                     x≥0,

                     y≥0,

                     80-x-y≥0,

                     50-x≥0,

                     x+y-20≥10,

                     70-y≥0

Задача свелась к нахождению наименьшего значения линейной функции    S(x;y)=890-4x-3y в области, заданной системой неравенств.

 Множество решений данной системы является многоугольник F, изображённый на рисунке. Наименьшее (и наибольшее) значение функции S(x ; y) принимает в одной из вершин многоугольника F.

Вычисляя её значение в этих вершинах, получаем:

S(0;20)=830             S(50;30)=600

S(0;70)=680              S(50;0)=690

S(10;70)= 640           S(20;0)=810

Наименьшее из этих значений, равное 600, функция принимает при x=50, у=30.

При этих значениях x и y таблица 2 принимает вид.

Прямоугольник 2

Таблица 3

Склады

№1

№2

№3

«Еланка»

50

30

0

«Подсосенки»

0

40

60

Ответ: наименьший расход бензина 600 литров

Задача №3

        ООО «БМУ» производит 2 продукции: кормовой монокальцийфосфат и серную кислоту в количестве x1 и x2  т. за месяц соответственно. Тонна кормового монокальцияфосфата  приносит 12000 рублей прибыли, а тонна серной кислоты – 8000 рублей. Производственные мощности завода позволяют выпускать не более 100 тонн двух продуктов вместе, при этом производство кормового монокальцияфосфата  не может превышать более чем в 3 раза производства серной кислоты. Надо определить оптимальный объём производства, приносящий ООО «БМУ» максимальную прибыль.  

 Решение

Линейная функция имеет вид: S=12x1+8x2  тысяч рублей.

          x1≥0,

          x≥0,

          x1+x≤100,

          x1≤3x2. 

В точке А, соответствующей координатам x1=75, x2=25, достигается наибольший из допустимых значений x1=75.

Следовательно,

S=12x1+8x2= 12∙75+8∙25=1100 тыс. рублей

Графическая интерпретация задачи оптимизации

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Г.И.Просветов «Математические методы и модели в экономике»,  Альфа-Пресс, год издания        2008

  2. Симонов А.С. «Экономика на уроках математики» Издательство: Школа-Пресс, год издания: 1999.

Венгерский алгоритм — алгоритм оптимизации, решающий задачу о назначениях (англ.) Он был разработан и опубликован Харолдом Куном (англ.) в 1955 году. Автор дал ему имя «венгерский метод» в связи с тем, что алгоритм в значительной степени основан на более ранних работах двух венгерских математиков (Кёнига и Эгервари (англ.)).

Джеймс Манкрес (англ.) в 1957 году заметил, что алгоритм является (строго) полиномиальным. С этого времени алгоритм известен также как алгоритм Куна — Манкреса или алгоритм Манкреса решения задачи о назначениях. В 2006 году было обнаружено, что Якоби нашёл решение задачи о назначениях в XIX веке и опубликовал его в 1890 году на латыни[1].

]Объяснение на примере

Предположим, есть три работника: Иван, Пётр и Андрей. Нужно распределить между ними выполнение трёх видов работ (которые мы назовём A, B, C), каждый работник должен выполнять только одну разновидность работ. Как это сделать так, чтобы потратить наименьшую сумму денег на оплату труда рабочих? Сначала необходимо построить матрицу стоимостей работ.

A

B

C

Иван

10.000 руб.

20.000 руб.

30.000 руб.

Пётр

30.000 руб.

30.000 руб.

30.000 руб.

Андрей

30.000 руб.

30.000 руб.

20.000 руб.

Венгерский алгоритм, применённый к приведённой выше таблице даст нам требуемое распределение: Иван выполняет работу A, Пётр — работу B, Андрей — работу С.

Постановка задачи

Дана неотрицательная матрица размера n×n, где элемент в i-й строке и j-ом столбце соответствует стоимости выполнения j-ого вида работ i-м работником. Нужно найти такое соответствие работ работникам, чтобы расходы на оплату труда были наименьшими. Если цель состоит в нахождении назначения с наибольшей стоимостью, то решение сводится к решению только что сформулированной задачи путём замены каждой стоимости C на разность между максимальной стоимостью и C.[2]

Основные идеи

Алгоритм основан на двух идеях:

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

  • если есть решение нулевой стоимости, оно оптимально.

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

Матричная интерпретация

Для   работников и работ, дана матрица n×n, задающая стоимость выполнения каждой работы каждым работником. Найти минимальную стоимость выполнения работ, такую что каждый работник выполняет ровно одну работу, а каждую работу выполняет ровно один работник.

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

Прежде всего запишем задачу в матричной форме:

где a, b, c, d — работники, которые должны выполнить работы 1, 2, 3, 4. Коэффициенты a1, a2, a3, a4 обозначают стоимость выполнения работником «a» работ 1, 2, 3, 4 соответственно. Аналогичный смысл имеют остальные символы. Матрица квадратная, поэтому каждый работник может выполнить только одну работу.

Шаг 1

Уменьшаем элементы построчно. Находим наименьший из элементов первой строки (а1, а2, а3, а4), и вычитаем его из всех элементов первой строки. При этом хотя бы один из элементов первой строки обнулится. То же самое выполняем и для всех остальных строк. Теперь в каждой строке матрицы есть хотя бы один ноль. Иногда нулей уже достаточно, чтобы найти назначение. Пример показан в таблице. Красные нули обозначают назначенные работы.

0

a2'

0

a4'

b1'

b2'

b3'

0

0

c2'

c3'

c4'

d1'

0

d3'

d4'

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

Шаг 2

Часто на первом шаге нет назначения, как, например, в следующем случае:

0

a2'

a3'

a4'

b1'

b2'

b3'

0

0

c2'

c3'

c4'

d1'

0

d3'

d4'

Задача 1 может быть эффективно (за нулевую стоимость) выполнена как работником a, так и работником c, зато задача 3 не может быть эффективно выполнена никем.

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

Шаг 3

Во многих случаях мы достигнем желаемого результата уже после шага 2. Но иногда это не так, например:

0

a2'

a3'

a4'

b1'

b2'

b3'

0

0

c2'

c3'

c4'

d1'

0

0

d4'

Если работник d выполняет работу 2, некому выполнять работу 3, и наоборот.

В таких случаях мы выполняем процедуру, описанную ниже.

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

0

a2'

a3'

a4'

b1'

b2'

b3'

0

0

c2'

c3'

c4'

d1'

0

0

d4'

Отметим все строки без назначений (строка 1). Отметим все столбцы с нулями в этих строках (столбец 1). Отметим все строки с "красными" нулями в этих столбцах (строка 3). Продолжаем, пока новые строки и столбцы не перестали отмечаться.

×

0

a2'

a3'

a4'

×

b1'

b2'

b3'

0

0

c2'

c3'

c4'

×

d1'

0

0

d4'

Теперь проводим линии через все отмеченные столбцы и неотмеченные строки.

×

0

a2'

a3'

a4'

×

b1'

b2'

b3'

0

0

c2'

c3'

c4'

×

d1'

0

0

d4'

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

Шаг 4

Из непокрытых линиями элементов матрицы (в данном случае это a2', a3', a4', c2', c3', c4') найти наименьший. Вычесть его из всех не отмеченных строк и прибавить ко всем пересечениям отмеченных строк и столбцов. Так, например, если наименьший элемент из перечисленных равен а2', мы получим

×

0

0

a3'-а2'

a4'-a2'

×

b1'+a2'

b2'

b3'

0

0

c2'-а2'

c3'-а2'

c4'-а2'

×

d1'+a2'

0

0

d4'

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