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

2_0

.pdf
Скачиваний:
44
Добавлен:
23.02.2016
Размер:
1.63 Mб
Скачать

которой оптимальное решение находится на допустимых базисных решени- ях. Поэтому для решения ЗЛП надо найти начальное допустимое базисное решение и указать правило перехода к новому не худшему.

Если ввести обозначения

 

100

 

 

 

0,5

 

 

1

1

 

0

 

0

 

 

= 120

,

 

1 =

1

,

 

2 = 1 ,

 

3 =

0

,

 

4 =

1

,

 

5 =

0

,

B

A

A

A

A

A

 

300

 

 

3

 

 

1

0

 

0

 

1

 

то систему ограничений можно записать в векторной форме

B = x1 A1 + x2 A2 + x3 A3 + x4 A4 + x5 A5 .

Это представление является разложением вектора B по векторам

A1, A2 , A3, A4 , A5. За базис этой системы векторов можно взять систему еди-

ничных векторов Б1 = ( A3, A4 , A5 ). Допустимое базисное решение будет оп-

ределять начальный опорный план.

Выпишем начальный опорный план и значение целевой функции для него. Для этого свободные переменные приравниваем к нулю: x1 = 0, x2 = 0, а базисные переменные после этого находят из системы:

x3 = 100, x4 = 120, x5 = 300.

X 1 = (0,0,100,120,300), Z(X 1 ) = −300 0 500 0 + 0 100 + 0 120 + 0 300 = 0.

Решение задачи принято оформлять симплекс-таблицами.

Таблица 2.2.2. Первая симплекс-таблица задачи 2.2.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

θ = θ02

= min

bi

 

 

 

 

 

 

 

 

 

 

 

А1

 

 

А2

 

А3

 

А4

 

 

А5

 

 

Б1

СБ

 

 

 

 

 

 

 

 

 

 

 

 

 

В1

 

 

 

 

 

 

 

 

 

 

300

 

500

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

0

 

0

 

 

 

0

 

 

a i 2

>0 a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

×(1) ×(

500)

 

 

 

0

100

0,5

 

[1]

 

1

 

0

 

 

 

0

100

 

 

А3

 

 

 

 

 

 

 

 

0

120

1

 

1

 

0

 

1

 

 

 

0

120

 

←|

 

 

|

 

 

А4

 

 

 

 

 

 

 

 

 

 

 

0

300

3

 

1

 

0

 

0

 

 

 

1

300

 

 

 

 

|

 

 

А5

 

 

 

 

 

 

 

 

 

 

z j

cj

0

300

 

500

 

0

 

0

 

 

 

0

 

 

 

 

 

 

 

 

 

Индексная строка рассчитывается следующим образом:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z (

 

 

) = ci

 

bi =

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

С

В

 

 

 

 

 

 

 

i=1

20

m

z j c j = ciБ xi j c j = C Бi Аj c j , j = 1,5.

 

 

i=1

 

В первой симплексной таблице имеем

 

Z (

 

Б1 ) = 0 100+0 120+0 300 = 0,

z1-c1 = 0 0,5+0 1+0 3– (–300) =300,

X

 

 

z2-c2 = 0 1+0 1+0 1– (–500) = 500,

z3-c3 = 0 1+0 0+0 0–0 = 0,

 

 

z4-c4 = 0 0+0 1+0 0 −0 = 0,

z5-c5 = 0 0+0 0+0 – 0 = 0.

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

Так как для нашей задачи выбран единичный базис, то в первой сим- плексной таблице в столбцах B1, A1, A2 , A3, A4 , A5 будут стоять соответст-

вующие коэффициенты системы ограничений.

Последняя строка называется индексной или (m +1)-й. Во втором столбце этой строки стоит значение целевой функции при проверяемом опорном плане. В нашем случае Z(X Б1 ) = 0. Во всех остальных клетках ин-

дексной строки находятся оценки оптимальности z j c j для векторов исход-

ной системы. Здесь z j значение целевой функции, если в неё вместо пере-

менных подставить коэффициенты разложения вектора A j по векторам бази- са, а cj коэффициенты целевой функции при соответствующих перемен-

ных.

Число z j c j показывает, на сколько уменьшиться значение целевой функции, если переменную x j увеличить на единицу.

Отсюда следует правило проверки решения на оптимальность:

1)проверяем знаки z j c j ;

2)если все z j c j ≤ 0 , то оптимальное решение найдено, есть минимум

Z;

3) если имеются z j c j > 0, то составляем новую симплексную табли-

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

21

или установим отсутствие конечного решения задачи ( z j c j > 0, а все числа aij ≤ 0 для некоторого j).

Проверяем первый опорный план на оптимальность.

Из-за того, что в индексной строке есть положительные числа, то он не оптимален.

Переходим к новому плану. Вектор, вводимый в базис, выбираем по

наибольшему числу в индексной строке. Это есть вектор А2 .

Вектор, выводимый из базиса, выбираем по симплексному отношению. В общем виде симплексное отношение для Аj находится по формуле

θ = θ0 j

= min

 

bi

 

( i =

 

 

 

;

j =

 

).

 

 

1,m

1,n

 

 

 

 

x >0 x

 

 

 

 

 

 

 

 

 

 

 

ij

i j

 

 

 

 

 

 

 

 

 

 

В нашем случае

 

 

 

 

 

 

 

 

 

 

 

 

 

 

θ = θ02

= min

100

,

120

,

300

 

= 100 .

 

 

 

 

 

1

1 1

 

 

 

 

Симплексное отношение находится лишь для положительных aij . Та-

ким образом, из базиса выводим вектор А3 .

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

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

коэффициенты исходной системы по методу полных жордановых исключе- ний. Это правило состоит в следующем.

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

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

Таблица 2.2.3. Правило прямоугольника

 

 

 

 

 

 

 

 

apr

apj

 

 

a

0

 

 

pr

 

 

 

 

air

[aij]

 

a

= a / a

1

 

 

 

 

ir

ir ij

 

 

22

Правило прямоугольника состоит из следующих шагов.

1) Элементы разрешающей i-й строки делим на разрешающий элемент таблицы aij .

2) Для того чтобы в направляющем столбце все остальные элементы

стали равными нулю, элементы полученной строки умножаем последова-

тельно

на (apj ) ( p = 1,2,...,i 1,i + 1,...m)

и прибавляем к соответствующем

элементам p -й строки. Тогда вместо числа apr в p-й строке станет число

3)

a

= a

 

air apj

или a

=

apr aij air apj

.

pr

 

 

 

pr

 

 

 

pr

 

aij

 

 

 

 

 

aij

 

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

b

= b

b1 a32

= 300

100 1

=

300 1100 1

= 200, a

= 1

0 1

= 1

 

 

 

 

3

3

a12

1

1

35

1

 

 

 

 

 

Для контроля индексную строку можно также пересчитывать по этому правилу. В нашем случае разрешающую строку умножаем на (-500) и при- бавляем к индексной строке. Схема этих вычислений изображена справа от табл. 2.2.1.

После проведённых вычислений получили вторую симплекс-таблицу,

табл. 2.2.4.

Таблица 2.2.4. Вторая симплекс-таблица задачи 2.2.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Б2

 

 

 

 

 

 

 

 

А1

 

А2

 

 

СБ2

 

 

 

 

 

 

В2

 

 

 

300

500

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

500

100

0,5

1

 

А2

 

 

 

 

 

0

20

[0,5]

0

 

А4

 

 

 

 

 

0

200

2,5

0

 

А5

 

 

 

 

z j cj

50000

50

0

 

 

 

 

 

 

 

 

 

 

 

bi

 

 

 

 

А3

 

А4

 

А5

 

 

 

 

0

 

 

0

 

0

 

ai1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

|

 

1

 

 

0

 

0

200

 

 

 

 

 

 

 

 

 

(1)(5)(100)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

40

 

1

 

1

 

0

 

1

 

 

0

 

1

80

 

 

|

500

 

 

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получили второе опорное решение:

X 2 = (0,100,0,20,200), Z(X 2 ) = −50 000.

Значение целевой функции на втором шаге решения уменьшится на ве- личину (z2 − с2 ) θ , т.е.

23

Z(X 2 ) = Z(X 1 )(z2 − с2) θ = 0 500 100 = −50 000.

Второе опорное решение не является оптимальным, так как в индекс- ной строке есть положительное число. Аналогично предыдущему переходим к третьему опорному плану. В базис вводим вектор А1, а из базиса выводим вектор А4 . Для этого разрешающую строку умножаем на (-1), (-5), (-100) и прибавляем соответственно к первой, третьей и индексной строке. Индекс- ную строку для контроля можно находить по правилу расчёта индексной строки.

Получили третью симплексную таблицу.

Таблица 2.2.5. Третья симплекс-таблица задачи 2.2.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А1

 

А2

 

А3

 

 

А4

 

А5

 

Б3

 

СБ

 

 

 

 

 

 

 

 

 

 

В3

 

 

 

 

 

 

300

500

0

 

0

 

0

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

500

 

80

0

1

 

2

 

1

 

0

 

А2

 

 

 

 

 

 

 

 

 

300

 

40

1

0

 

-2

 

2

 

0

 

А1

 

 

 

 

 

 

 

 

 

0

 

 

100

0

0

 

4

 

5

 

1

 

А5

 

 

 

 

 

 

 

 

z j

cj

 

52 000

0

0

 

400

 

100

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

y

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

2

 

3

 

 

 

 

 

 

 

 

 

 

3 = (40,80,0,0,100) ; Z(

 

 

3 ) = Zmin

= 52 000

 

 

 

 

 

 

 

 

 

 

X

X

 

 

или

Z(X 3 ) = Z(X 2 )(z1 − с1) θ = −50000 40 50 = −52000.

Третий план оптимален и единственный, потому что свободные векто- ра имеют отрицательные оценки.

Из табл. 2.2.5 выписываем значение целевой функции и оптимальное значение переменных задачи 2.2.1.

Z

max

= −Z

= 300 40 + 500 80 = 52000 , X

max

= (40,80) .

 

min

 

 

Приведем алгоритм решения ЗЛП симплекс-методом

1)Модель задачи приводим к каноническому виду с неотрицательными правыми частями.

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

24

3)Составляем симплексную таблицу.

4)Проверяем знаки z j c j .

5)Если все z j c j 0 , то оптимальное решение найдено, есть минимум

Z.

6) Если имеются z j c j > 0 , то составляем новую симплексную табли-

цу и опять проверяем знаки чисел в индексной строке. Итерации продолжаем до тех пор, пока не получим в индексной строке все неотрицательные числа или установим отсутствие конечного решения задачи ( z j c j > 0 , а все числа

aij ≤ 0 для некоторого j).

7) Новую симплексную таблицу пересчитываем по правилу полных жордановых исключений.

Замечание 1. Если задача задана на max, то не обязательно переходить к нахождению min. Можно решать задачу на max, но тогда в индексной стро- ке надо получить неотрицательные оценки. В базис вводят вектор с наи- меньшей отрицательной оценкой.

Замечание 2. Разрешающий элемент можно выбирать из условия

max θ (z j c j ) . Таким способом можно уменьшить количество итераций.

z j c j >0

3. Решаем задачу с помощью Поиска решений в Excel

Методика решения задачи симплекс-методом с использованием Microsoft Excel

Алгоритм получения решения задачи симплекс-методом с использова- нием офисного приложения Microsoft Excel рассмотрим на примере 2.2.1. Математическая модель задачи имеет следующий вид:

 

 

0,5x + x

100,

 

 

 

 

 

1

2

 

 

 

Z = 300x

+ 500x max,

x

+ x

120,

x

0, x 0.

 

1

2

 

1

2

 

1

2

 

 

3x

+ x

300,

 

 

 

 

 

 

 

 

 

1

2

 

 

 

Для получения решения исходной задачи будем использовать над- стройку «Поиск решения».

Ввод исходных данных задачи

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

25

Экранная форма для ввода условий задачи имеет следующий вид

(рис. 2.2.2):

Рис. 2.2.2

Вячейках В4:С4 находятся значения коэффициентов целевой функции;

вмассиве В6:С8 – коэффициенты левой части ограничений; в столбце Е6:Е8 значения правой части ограничений. Ячейки В2:С2 соответствуют перемен- ным задачи, а в ячейке Е2 будет отображаться значение целевой функции.

Сюда необходимо ввести формулу, по которой это значение рассчитывается, то есть 300x1 + 500x2 . Для этого курсор ставится в ячейку и далее набирается

следующее выражение: = В2* В4 + С2*С4 .

Имена ячеек можно набирать непосредственно с клавиатуры, либо де- лая на них ссылку мышью.

Значение целевой функции также можно рассчитать, используя над- стройку «Мастер функций», а именно, функцию «СУММПРОИЗВ». Для этого необходимо выполнить следующие действия:

поставить курсор в поле Е2;

выбрать на панели инструментов кнопку fx ;

в окне «Категория» выбрать «Математические». В окне «Выберите функцию» «СУММПРОИЗВ» (рис. 2.2.3) и нажать «ОК»;

Рис. 2.2.3

26

Ввести аргументы функции: в строку «Массив 1» выражение В2:С2, а в строку «Массив 2» выражение В4:С4 (можно, выделять соответствующие массивы с помощью мыши) (рис. 2.2.4) и нажать «ОК»;

Рис. 2.2.4

После этого в ячейке Е2 появится текущее значение целевой функции, вычисленное по введенной формуле. Оно равно нулю, так как переменные в данный момент равны нулю.

Аналогично в ячейки D6:D8 вводятся формулы для расчета левых час- тей ограничений (рис. 2.2.5):

Рис 2.2.5

Для ячейки D6 формула имеет вид 0,5x + x , а ее реализация в ячейке:

1

2

= B2* B6 + C2*C6 или =СУММПРОИЗВ(В2:C2; В6:C6).

Для ячейки D7 формула имеет вид x + x , а ее реализация в ячейке:

1

2

= B2* B7 + C2* C7 или = СУММПРОИЗВ(В2:C2; В7:C7).

Для ячейки D8 формула имеет вид 3x + x , а ее реализация в ячейке:

1

2

= B2* B8 + C2*C8 или = СУММПРОИЗВ(В2:C2; В8:C8).

Как видно, формулы для расчета левой части ограничений отличаются друг от друга только именем второго массива (строчки коэффициентов огра-

27

ничения), первый же массив (массив значений переменных) один и тот же. Поэтому можно ввести формулу один раз, а затем скопировать ее, сделав аб- солютную ссылку на массив переменных В2:C2.

Для того, чтобы сделать абсолютную ссылку на определенный столбец, необходимо поставить символ $, перед буквой, обозначающей имя столбца. Например $В2:$C2. Чтобы зафиксировать строку, символ $, ставится перед номером строки: В$2:C$2. Если необходимо сделать абсолютную ссылку на конкретную ячейку (ячейки), символ $ ставится и перед именем столбца и перед номером строки: $В$2:$C$2.

Абсолютную ссылку на ячейку (ячейки) можно сделать, нажав клавишу F4, когда курсор находится в поле имени ячейки. При однократном нажатии клавиши будет сделана абсолютная ссылка на массив или ячейку ($В$2: $C$2). Если клавишу нажать дважды, будет сделана абсолютная ссылка на номер строки (В$2: C$2). При следующем нажатии клавиши ссылка будет сделана на имя столбца (2: $C2).

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

Таким образом, для ячейки D6 формула будет иметь вид = B$2* B6 + С$2*С6 или = СУММПРОИЗВ(В$2: C$2;В6:C6) (в случае абсо- лютной ссылки на массив = СУММПРОИЗВ($В$2: $C$2;В6:C6)).

Затем эту формулу необходимо скопировать в ячейки D7 и D8. Копи- ровать формулу можно с помощью клавиш «Ctrl-Insert» − копировать и клавиш «Shift-Insert» − вставить. Другой способ копирования формул − по- ставить курсор в ячейку, содержащую формулу и протянуть ее за правый нижний угол на все ячейки, в которые ее необходимо скопировать.

После этого экранная форма условий задачи будет иметь вид (рис. 2.2.6).

Рис. 2.2.6

Ввод ограничений

Для получения решения задачи используется надстройка «Поиск ре- шения», которая находится в меню «Сервис».

28

Рис. 2.2.7

Вдиалоговом окне «Поиск решения» (рис. 2.2.7) необходимо выпол- нить следующие действия:

Поставить курсор в поле «Установить целевую ячейку» и ввести ад- рес ячейки, в которой находится формула для расчета значения целевой функции (можно сделать ссылку на ячейку мышью). В примере это ячейка

E2.

Выбрать критерий оптимизации целевой функции (максимизация, ми- нимизация или точное значение). В примере это максимум.

Поставить курсор в поле «Изменяя ячейки» и ввести адрес массива, в котором находятся значения переменных. В примере это В2:C2. Адрес мож- но внести также с помощью выделения мышью соответствующих ячеек.

Вокне «Ограничения» выбрать кнопку «Добавить», после чего поя-

вится окно «Добавление ограничения» (рис. 2.6.8).

Рис. 2.2.8

В поле «Ссылка на ячейку» ввести адрес ячейки, в которой содержит- ся левая часть ограничения. (Это можно сделать путем выделения мышью соответствующей ячейки на экране). В поле знака открыть список предла- гаемых знаков и выбрать нужный. В поле «Ограничения» ввести адрес ячейки, содержащей правую часть ограничений. В примере первое ограниче- ние: D6<=E6 в диалоговом окне представлено следующим образом (рис. 2.2.9)

29

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]