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

Задачи ЛП и методы их решения

.pdf
Скачиваний:
156
Добавлен:
29.03.2016
Размер:
7.64 Mб
Скачать

89

Определение. Резервом R(i) события i называется разность его позднего и раннего сроков.

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

Приведём все временные параметры событий в примере 1.

Параметры событий

Таблица 5.

 

 

 

 

 

 

 

 

i

tP (i)

tП (i)

 

R(i)

 

 

 

 

 

 

 

 

 

1

0

3

 

3

 

 

2

13

19

 

6

 

 

3

12

15

 

3

 

 

4

12

15

 

3

 

 

5

14

20

 

6

 

 

6

17

22

 

5

 

 

7

22

25

 

3

 

 

 

 

 

 

 

 

Временные параметры работ.

В отличие от событий, работа имеет протяжённость, т.е. связана с двумя событиями – своими началом и концом. Каждое из этих событий имеет два срока, поэтому у работы появляются 4 временных параметра по моменту начала и конца и 4 вида резервов. Полезна следую-

 

 

промежуток, отведённый для работы

 

 

 

 

ti j

 

 

 

 

резерв

резерв

 

 

 

 

 

 

 

время

tP (i)

i

tП (i)

tP ( j)

j

tП (i)

 

 

ранний срок

 

поздний срок

ранний срок

 

]поздний срок

начала

 

начала

конца

 

конца

щая схема

Определение. Ранним началом tРН (i, j) работы ( i, j ) называется наименьшее время после начала проекта, через которое работу можно начать выполнять.

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

tРН (i, j) = tP (i) = yi .

90

Определение. Ранним окончанием tРO (i, j) работы ( i, j ) называется наименьшее время после начала проекта, через которое работу можно закончить.

Работу можно рано закончить, если её рано начать, поэтому tРO (i, j) = tP (i) + tij = yi + tij ,

где ti j – время работы.

В общем случае tPO (i, j)

tP ( j) , но для некоторых работ эти параметры совпадают.

Определение. Поздним окончанием tПO (i, j) работы ( i, j ) называется наибольшее время после начала проекта, позже которого работу нельзя закончить (иначе сорвётся проектное время Tпр ).

Событие j как раз означает окончание работ, заканчивающихся в j, в том числе работы ( i, j ), поэтому

tПO (i, j) = tП ( j) = Tпр vj .

Определение. Поздним началом tПH (i, j) работы ( i, j ) называется наибольшее время после начала проекта, позже которого работу нельзя начать (иначе сорвётся проектное время).

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

tПH (i, j) = tПO (i, j) ti j = Tпр vj ti j .

Позднее начало и окончание – "внешние" параметры, зависящие от Tпр . Следующие определения резервов работ взяты из [1].

Определение. Полным резервом RП (i, j) называется наибольшее время, на которое можно увеличить время работы (т.е. это прибавка по времени, запас), если предшествующие для ( i, j ) работы начинаются в ранние сроки, а последующие за ( i, j ) – в поздние сроки.

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

Несложно получить, что (см. схему)

RП (i, j) = tП ( j) tР (i) ti j ,

Полезны также формулы

RП (i, j) = tПH (i, j) tРH (i, j) = tПО (i, j) tPO (i, j) .

RП (i, j) 0 .

Полный резерв – "внешний" параметр.

Критические работы полностью определяются через значения полных резервов. Работа ( i, j ) является критической тогда и только тогда, когда

RП (i, j) = Tпр Tкрит .

В случае, когда проектное время совпадает с критическим, т.е. когда проект вовсе не имеет резерва, резервы критических работ равны нулю, что и оправдывает название "критические".

91

Определение. Свободным резервом RC (i, j) работы ( i, j ) называется наибольшее время, на которое можно увеличить время работы, если предшествующие и последующие работы начинаются в свои ранние сроки.

Коротко: "до нас и после нас рано".

Свободный резерв полностью определяется ранними сроками событий, не зависит от Tпр (это один из "внутренних" параметров проекта). Несложно получить (см. схему).

RC (i, j) = tP ( j) tР (i) ti j ,

RC (i, j) = tP ( j) tРO (i, j) ,

RП (i, j) RC (i, j) 0 .

Определение. Частным резервом второго рода

′′

R (i, j) работы ( i, j ) называется наибольшее

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

Коротко: "До нас и после нас поздно".

′′

′′

(i, j) tП (i) ,

R (i, j) = tП ( j) tП (i) ti j ,

R (i, j) = tПН

RП (i, j) R′′(i, j) 0 .

Резерв второго рода – "внутренний" параметр (докажите это!).

Определение. Частным резервом первого рода R(i, j) работы ( i, j ) называется наибольшее время, на которое можно увеличить время работы, если предшествующие начинаются и заканчиваются в поздние сроки, а последующие в ранние сроки.

Коротко: "до нас поздно, после нас рано".

R(i, j) = tP ( j) tП (i) ti j .

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

R(i, j) = max{tP ( j) tП (i) ti j ; 0}. В любом случае справедливы соотношения

RC R, R′′ ≥ R,

т.е. Rнаименьший среди резервов.

Частный резерв первого рода – "внешний" параметр.

Из расчётных формул для резервов можно получить полезное соотношение

RП + R′ = RC + R′′ ,

позволяющее вычислить любой из резервов, если остальные три известны. Приведём полную таблицу параметров работ в примере 1.

92

 

 

Временные параметры работ

 

 

Таблица 6.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рабо-

Обо-

Вре-

 

tРН

t

РO

t

ПО

t

ПН

 

RП

RC

R′′

R

 

та

знач.

мя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

( 1, 2 )

13

 

0

13

19

 

6

 

6

0

3

-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

( 1, 3 )

12

 

0

12

15

 

3

 

3

0

0

-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

H

( 1, 4 )

6

 

0

6

15

 

9

 

9

6

6

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

( 2, 5 )

1

 

13

14

20

19

 

6

0

0

-6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I

( 2, 7 )

5

 

13

18

25

20

 

7

0

1

-6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G

( 3, 6 )

5

 

12

17

22

17

 

5

0

2

-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

( 4, 7 )

10

 

12

22

25

15

 

3

0

0

-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

( 5, 6 )

2

 

14

16

22

20

 

6

1

0

-5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E

( 6, 7 )

3

 

17

20

25

22

 

5

2

0

-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Диаграмма Гантта.

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

Определение. Диаграмма Гантта – изображение работ проекта в виде прямолинейных горизонтальных отрезков, параллельных оси времени (оси абсцисс). Левый конец отрезка соответствует моменту начала работы, правый – окончания работы, длина отрезка равна времени работы. Взаимное расположение отрезков согласовано с отношением предшествования работ.

Проект имеет много диаграмм Гантта (бесконечно много), так как работа может начинаться от своего раннего начала до позднего начала. Можно выделить диаграмму Гантта по ранним срокам, или раннюю диаграмму Гантта, а также диаграмму Гантта по поздним срокам –

позднюю диаграмму Гантта.

На ранней диаграмме:

1)концы отрезков расположены в раннем начале и в раннем окончании работы;

2)RП определяется как максимальное значение времени, на которое работу можно сдвинуть

вправо, сдвигая также по необходимости другие работы (другие отрезки), до момента Tпр ;

3) RC – максимальное значение времени, на которое отрезок работы можно сдвинуть вправо, не сдвигая другие работы и не сдвигая момент окончания проекта Tкрит ;

4)Критические работы образуют непрерывную цепочку отрезков, и поэтому признак могут быть найдены по диаграмме;

5)Самый правый из концов отрезков расположен в момент Tкрит .

93

Свойства поздней диаграммы Гантта вполне аналогичны. Нужно только вместо "вправо" читать "влево", вместо RC рассмотреть R′′ и т.д..

Приведём раннюю диаграмму Гантта для примера 1.

вспомогательная

 

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ось

 

 

 

2

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

2

 

 

 

 

 

 

 

 

3

 

 

 

6

 

 

 

1

4

 

4

 

 

 

 

 

7

 

 

 

 

3

4

5

 

 

 

 

 

1

 

 

 

3

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

5

6

 

7

 

 

5

6

 

 

 

 

 

 

 

 

t

10

12

14

16

18

20

22

25

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

Tкрит

 

Рис.13. Ранняя диаграмма Гантта.

 

94

7. ДОБАВЛЕНИЯ

Ниже излагаются необходимые сведения о теоретических положениях, дающих обоснование основному методу решения задач линейного программирования - методу последовательного улучшения плана и его алгоритмическим реализациям: прямому и модифицированному алгоритмам симплекс-метода. Используются “алгоритмические“ обозначения индексных множеств и индексов, заимствованные из книги И.В.Романовского [ 9 ], которые он впервые широко использовал в экстремальных задачах и характерные для Санкт-Петербургской школы исследования операций.

7.1. Векторы и матрицы

Можно рассматривать вектор как упорядоченный набор чисел X = (x1 , x2 , x3 , , xn )

где xi (множество вещественных чисел) - его компоненты

i 1: n- индексы его компонент

Если иметь в виду, что индексы (номера) компонент могут идти не подряд, и вообще могут быть не обязательно элементами числового множества от 1 до какого-либо n, то удобно в обозначении вектора иметь множество индексов его компонент. Обозначив такое конечное множество через N, можно рассматривать вектор Х, как функцию, заданную на этом конечном множестве.

X : N X[N] : i N ! x[i] X[N]

Будем в дальнейшем обозначать вектор через X [ N ] , а множество индексов его компонент

через N. Тогда x[i]

(i N) будет его компонентой

 

 

 

 

 

Примеры

 

 

 

 

 

 

 

 

 

1

N = {1,2,3,4},

X[N] = (2,0,1,4) ,

x[3] = −1,

x[2] = 0

 

 

 

 

 

 

 

 

 

 

 

2

N = {7,1,10,5},

X[N] = (3,5,9,6),

x[10] = 9,

x[1] = 5

 

 

 

 

 

 

 

 

 

 

 

3

N = {1,2,3,6,9,12},

X[N] = (1,8,3,4,5,2) , x[2] = 8, x[9] = −5

 

 

 

 

 

 

 

4

N = {слон, мышка, гиря}, Вес[N] = (20000,0.005,1) , вес[слон] = 20000 ,

вес[гиря] =1

 

В данных обозначения легко выделять и пользоваться частями векторов. Пусть N ' N

(множество N' является частью (или подмножеством) множества N). Тогда

X[N]- вектор с

множеством индексов N, а X[N ' ] - часть вектора с множеством индексов N '.

 

 

Например:

1

N = {1,2,3,4}, X[N] = (2,0,1,4) , N

'

= {1,3}.Тогда

X[N

'

] = (2,1)

 

 

 

Далее (см. вышеприведенные примеры):

2 N ' = {10}, X[N ' ] = x[10] = 9

3N ' = {6,9,2}, X[N ' ] = (4,5,8)

4N ' = {слон,гиря}, X[N ' ] = (20000,1)

Скалярное произведение векторов в данных обозначениях записывается в виде

C[N] X[N] = c[ j] x[ j]

j N

или с учетом разделения векторов на части(N ' N)

C[N] X[N] = C[N ' ] X[N ' ] + C[N \ N ' ] X[N \ N ' ]

95

( N \ N ' '- разность множеств, т.е. оставшаяся часть множества N, после удаления из него N ' ). Так в примере 3 N ' = {6,9,2}, X[N ' ] = (4,5,8), N \ N ' = {1,3,12}, X[N \ N ' ] = (1,3,2) ). Далее, матрицу A[M, N] можно определить как функцию на прямом произведении конечных множеств индексов М и N

A : M × N A[M, N]: (i, j) M × N ! A[i, j]- элемент матрицы А, располагающийся в строке i и столбце j.

Примеры

 

 

 

 

 

 

 

3

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 M = {1,2,3},

N = {1,2,3,4},

M ' = {1,2},

N '

= {3,4}

 

 

 

 

 

1

2

3

8

 

2

8

 

1

2

3

8

 

 

2

8

]

A[M , N ] = −1

4

7

0.5

 

, A[M ,N']=

4

0.5

, A[M ' ,N ]=[1

4

7

0,5], A[M

'

,N'

]=[4

0,5

0

3

12

5

 

 

3

5

 

 

 

 

 

 

 

 

 

 

2M = {поставщик1,поставщик2}, N = {магазин1, магазин2, магазин3}, M ' = {поставщик1}, N ' = {магазин3}

П.1

A[M , N]= ОБЪЕМ ПОСТАВОК =

П.2

50 10 40

70 90 60

М.1 М.2 М.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A[M ' , N]=

 

 

 

 

 

 

 

 

 

П.1

50

 

10

40

 

 

 

 

 

 

 

 

Объем поставок от 1-го поставщика

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

М.1

М.2

М.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

П.1

 

40

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A[M, N ' ]=

 

 

 

 

 

Объем поставок в магазин 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

П.2

 

60

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

М.3

 

 

При умножении векторов и матриц справедливы легко проверяемые свойства ( M ' M ,N' N ) A[M, N] X[N] = j N A[M, j] x[ j] = b[M ]

V[M] A[M, N] = i M v[i] A[i, N] = c[N] A[M, N] B[N,L] = C[M, L]

D[K, M] A[M, N] = F[K, N]

A[M, N] X[N] = A[M , N ' ] X[N ' ]+ A[M , N \ N ' ] X[N \ N ' ]

V[M] A[M, N] = V[M ' ] A[M ' , N]+V[M \ M ' ] A[M \ M ' , N]

96

Справедливо также равенство

 

 

 

 

 

 

V[M ] (A[M, N] X[N]) = (V[M ] A[M , N]) X[N]

 

=

 

M

 

( число элементов в множестве N 'равно числу элементов в множестве М ),

Если

N '

 

 

тогда матрица

 

A[M , N ' ]- квадратная.

E[M, N ' ]- единичная квадратичная матрица, для которой справедливы соотношения

E[M, N ' ] X[N ' ] = X[M ]

U[M ] E[M, N ' ] = U[N ' ]

В дальнейшем (если не оговорено заранее) будем считать, что

M = {1 2 m}, N = {1 2 n}

Векторы (набор векторов, систему векторов) будем называть линейно-независимыми, если равенство

S

 

(*) Aj [M ] λ j = 0[M ]

(0[M ]- нулевой вектор, вектор состоящий из нулей)

j=1

 

возможно только при всех λ j

= 0 ( j 1: S ).

С учетом обозначений S ={1,2, , s}, A[M, S] = {A1[M ], A2 [M ], , As [M ]}, λ[S] ={λ1 ,λ2 , ,λs }равенство (*) записывается в виде

(+) A[M, S] λ[S] = 0[M ]

т.е. однородная система с матрицей A[M , S] имеет только тривиальное (нулевое) решение. Если же система (*) (или (+)) имеет нетривиальное (ненулевое) решение, то вектора, составляющие матрицу A[M , S] будут линейно-зависимыми.

Если количество линейно независимых векторов-столбцов, образующих матрицу

A[M , S] совпадает с числом ее строк (т.е. M = S ), говорят, что вектора {A1[M ], , As [M ]}

(столбцы матрицы A[M , S]) образуют базис в пространстве векторов размерности m = M , а сама матрица (квадратная) называется невырожденной (неособой, базисной) матрицей.

Любая невырожденная матрица A[M, N ' ], ( N ' = M ) имеет обратную матрицу ,

B[N ' , M ] определяемую соотношениями

A[M, N ' ] B[N ' , M ] = E[M, M ]

B[N ' , M ] A[M , N ' ] = E[N ' , N ' ]

Вдальнейшем будут использоваться следующие стандартные обозначения и термины: Система уравнений с матрицей коэффициентов А, вектором правой части b

относительно вектора неизвестных X

(**) A[M, N] X[N] = b[M ]

(будем считать, что все строки матрицы A[M , N]], линейно независимы).

97

Базисное множество индексов N ' - N ' N : столбцы матрицы A[M , N ' ] образуют базис

Базисная матрица - A[M , N ' ]

Небазисная часть матрицы A[M, N] - матрица A[M, N \ N ' ]

Матрица обратная к базисной

(или обратная базисная матрица) - B[N ' , M ] : B[N ' , M ] A[M , N ' ] = E[N ' , N ' ]

Матрица коэффициентов разложения столбцов исходной матрицы по текущему базису - матрица Z[N ' , N] = B[N ' , M ] A[M, N] = (B[N ' , M ] A[M , N ' ], B[N ' , M ] A[M, N \ N ' ]) =

= (E[N ' , N ' ], Z[N ' , N \ N ' ])

Базисное решение системы (**) - вектор

X[N ' ]: A[M, N ' ] X[N ' ] = b[M ],(т.е.X[N ' ] = B[N ' , M ] b[M ])

X[N]:

' = '

X[N \ N ] 0[N \ N ]

( X[N ' ], X[N \ N ' ] - соответственно базисная и небазисная части базисного решения).

hБазисное множество индексов N ' далее для кратности (когда это не будет вызывать недоразумений) будем называть базисным множеством, базисом индексов или даже просто базисом, имея в виду, что базис образуют столбцы матрицы с множеством индексов N ' h

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

Общая форма записи ЗЛП имеет вид

 

f = C[N] X[N] extr

(a)

A[M1 , N] X[N] b[M1 ]

(b)

A[M 2 , N] X[N] = b[M 2 ]

(c)

X[N1 ] 0[N1 ]

(d)

X[N2 ] >< 0[N2 ]

(e)

(Требуется найти экстремум (max или min) линейной функции C[N] X[N] от переменных X[N] (a), на которые накладываются ограничения в виде линейных неравенств (b) или

уравнений (с), и часть из которых X[N1 ] удовлетворяют ограничениям неотрицательности (d), а оставшаяся часть X[N2 ] свободна от этих ограничений (е)).

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

f = C[N] X[N] max

 

A[M, N] X[N] = b[M ]

(b[M ] 0[M ])

X[N] 0[N]

( I )

hОграничения равенства в общей форме ЗЛП называются жесткими ограничениями (это (с)), а ограничения-неравенства носят названия нежестких ограничений (это (в))h

98

Далее всюду (кроме оговоренных случаев) будем рассматривать ЗЛП в форме (I), предполагая, что все строки матрицы A[M, N] будут линейно независимы.

Множеством допустимых значений ЗЛП будем называть множество

D ={X[N]: A[M, N] X[N] = b[M ], X[N] ≥ 0[N] } ( + )

Базисным решением ЗЛП (с базисом индексов N ' ) будем называть допустимое решение ЗЛП X 0 [N] , являющееся базисным решением системы

A[M, N] X 0 [N] = b[M ]

с базисной матрицей A[M , N ' ] .

Базисное решение X 0 [N]будет невырожденным, если

X0 [N ' ] > 0[N ' ],

ивырожденным в противном случае

hДля простоты изложения, почти везде будем предполагать, что все базисные решения ЗЛП являются невырожденнымиh

7.3. Выпуклость множества допустимых решений ЗЛП

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

x1 V, x2 V x = λx1 + (1λ)x2 V, 0 ≤ λ ≤1 Имеет место следующее утверждение:

Множество D допустимых решений ЗЛП является выпуклым

Доказательство

Возьмем два произвольных допустимых решения X1[N], X 2 [N] D

X1[N] D A[M , N] X1[N] = b[M ], X1[N] 0[N] X 2 [N] D A[M , N] X 2 [N] = b[M ], X 2 [N] 0[N]

Рассмотрим X[N] = λX1[N] + (1λ)X 2 [N] , (0 λ 1) Покажем, что X[N] D

1)A[M, N] X[N] = A[M , N] (λX1[N]+ (1λ)X 2 [N])=

= λA[M, N] X1[N]+ (1λ)A[M, N] X1[N] = λb[M ]+ (1λ)b[M ] = b[M ](λ +1λ) = b[M ]

2) т. к. X1[N] 0[N] и λ 0 λX1[N] 0[N]

X 2 [N] ≥ 0[N] и (1λ) 0 (1λ)X 2 [N] 0[N] X[N] = λX1[N] + (1λ)X 2 [N] 0[N]

Крайней точкой (угловой точкой или вершиной) выпуклого множества D называется точка Х данного множества не представимая в виде