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

книги из ГПНТБ / Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие

.pdf
Скачиваний:
26
Добавлен:
19.10.2023
Размер:
3.78 Mб
Скачать

 

 

 

 

 

 

 

 

 

 

90

 

 

 

 

 

 

 

 

raaxj=

 

 

+dij

Гз]

=

0 +

5

*

5

 

ti[4]

=

О С 5

ti

[4]. = 5

шах»'»« Й

+aij

M

=

2 + 2

»

4

 

ti[4]

=

5 7 4

 

 

 

raax»=tl[2]

+dij

[5]

=

2 +

6

 

8

 

ti[6j

=

0 < 8

ti

[6]: =8

oa3s=*i [2]t

 

dij

[б]

=

2 + 5

»

7

 

ti[7]

=

0 < 7

ti

[?b =7

masts ti [3]+

 

dij

w

=

1 + 2

=

3

 

ti[4l

=

5 7 3

 

 

 

max: a ti[3]t

 

« Ц

и

=

1 +

7

=

8

 

ti[sl

=

0< 8

ti

[5 J 5=8

maxja ti [4]+

 

dij

[9]

=

5 +

6 = 11

 

« Й

 

=

В<11

ti

=11

maxt= ti [4 ]*

 

dij [t o ] =

5 +

2 =

 

 

 

 

 

 

 

 

7

 

ti [б I =

8 > 7

 

 

 

mexi = ti [5]*

 

dij [il]

= 1 1 + 4

= 15

 

ti[a]

=

0<15

ti

М »

= 15

maxja ti

el*

 

<3131I,]

= ■ 8 + 2

= 10

 

ti[7]

=

7 < Ю

ti

li--= 10

maxi =.ti

6] 4

dij [13]

=

8 +

7

= 15

 

ti[a] =

15=15

 

 

 

maxi-.ti

Vj4

 

a 13 [14]

= 10 +

4 = 14

 

ti[8] =

15 >14

 

 

 

/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Третьим циклом Присваивается самой поздней дате оконча-

ния последнего события самая ранняя дата его окончания

 

 

 

 

 

te

8]

= ti

fej

=

15 ,

 

 

 

 

 

 

а затем определяются самые поздние даты окончания событий

min»=

tQ м

 

-a 13

[14]

= 15-4

= II

 

te Й

=

и 7 II

te

[1> =11

min! =

te

и

-dij

N= 15-7

=

8

 

te [б]

=

М > 8

te

[6],

3 В

min:=

te

и

-dij

N

= 11-2 =

9

 

te [б] = Р< 9

 

 

 

rain:=

te М

 

-dij

Cxx]

= 15-4

= II

 

te [5]

=

М > II

te

[5] » =11

atn: =

te [б]

 

-dij

N

=

8-2

=

6

 

te [4]

=

м > 6

te

w *

= 6

mins =

te

и

 

 

 

 

 

 

 

 

 

 

 

 

te Г4]: = 5

и

-dij

(?]

= 11-6

=

5

 

te [4]

=

б > 5

П)1П;=

te

-dij

[ej

= 11-7

=

4

 

te Й

=

М > 4

te

Й ! = 4

mins =

te W

 

-dij

Ы

= 5-2 = 3

 

te

=

4 73

te

[з]« = 3

mint=

te

и

-dij

[el

= 11-5

=

6

 

te [21 =

М > 6

te- [sj*

s 6

min: =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

te м

 

-dij

Й

=

8—6

=

2

 

te й

=

6 >2

te

[*h

=» 2

minj =

te

W

w=

5-2

=

 

 

te

С2)

ч

 

 

 

 

 

 

“ dij

3

 

 

-

з

 

 

 

 

te

М

 

=

5“5

=

0

 

te й

 

М > 0

te

 

= 0

min: =

 

 

-dij

[3]

 

=

M *

91 " '

min»»

t e p ]

-dij [2]=

3 -

1 =» 2

te

[lj=.

0 < 2

min» =

te[2]

-dij[lj =

2 -

2 = 0

te

[l]=

0= 0

Заключительным циклом присваиваются значения всем выход­

ным данным.

/

к

81 Гк]

в2 [к]

* м

£2 М

•« М

«

/*]

1

О

о

2

2

О

 

о

2

о

2

1

8

2

 

о

3

0

0

б

В

о

 

о

4

2

3

4

5

1

 

3

S

2

2

8

8

о

 

о

6

2

в

7

11

4

 

1

7

1

3

S

Б

2

 

2

8

1

4

8

11

3

 

3

0

5

В

11

11

о

 

0

10

в

6

7

8

1

 

1

п

П

11

ш

15

о, '

 

о

12

8

9

10

11

1

 

о

13

8

8

16

16

о

 

о

14

10

11

14

16

1

 

1

Причем, ввиду простоты соответствующих выкладок, мы их опус­ тили. Так как критический путь проходит по работам с нулевым полным резервом, то в его состав входят работы с номерами I, 3, 5, 9, II и 13. Просмотр этих работ позволяет установить, что в данном случае имеются два критических пути; первый про­ ходит по работам с номерами I, 5, 13, а второй - по работам

сномерами 3, 9, II.

Взаключение приводится сетевой график, отвечающий рас­ сматриваемому примеру

92

Решение задачи линейного программирования симплексным методом

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

ргооеДцге simplex ( m,n,M,a,Ъ,о) *

 

 

 

integer т,П{ real М; array

а,Ъ,о;

 

 

'begin integer ite r,

jO; array A £ 0»a,

Of**n| *

 

 

 

integer

array

base [ 1

*

1

propfdere Ы? (start, new.work,fin.unbohlabel unboj

begin Boolean

opt;

start

;

 

 

 

е ц new (opt);

i f opt

then go to

e2; work;

go

to ei;

 

 

 

 

 

93 -

 

 

 

e2 i fin end

ЕР ;

 

 

 

 

 

procedure

start i

|

 

 

 

 

begin

integer

i , j

f

A J"o.G~j s a

Oj iteri

з

0 ;

for

jj = 1:

atep

\

until n do

А j Ofjl

«=

c [ j j »

 

for

is

*

1

etep' .1

 

until

 

m

do

 

 

 

 

 

 

begin

A ^ i ,

cl

i

з Ъ [ i ]

;

 

 

 

 

 

 

 

 

 

 

 

for

J t з

1

step 4

 

until

 

n

 

do

 

 

 

 

 

 

 

begin

A

[ i,

jj

 

t *

 

a [ t » ®

 

t

H

*

 

 

г »Гт

 

 

 

 

 

A [0,

j

 

t

A

[0 , 1 ]

 

4

 

1!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

do

 

for

J; =

n T

l

etep j

until

n ■»

m

 

 

 

A fi,j| t*

A^i,nflJ

15

base [ljt

з

irf-i l

 

A [G,oj «»

 

 

0j *

И * A

£l,(^

! 5 §

 

1

?

 

 

for

it

n

u + 1

ste£

t

until

 

n +

m

do

 

 

 

 

 

A

jo,j|

5 =

0

end

start

t

 

 

 

 

 

 

 

p ro o e d u r e

new

1

( c p t ) f

 

 

B o o le a n

opt

j

 

 

 

 

 

 

b e g i n i n t e g e r

j

t

, r e a l

 

tpax

;

 

 

 

 

3

0

;

 

 

 

 

 

f o r ] t » 1 b te p i

u n t i l

n

 

do

 

 

 

 

 

 

 

.

i f

A

f o . j/

>

 

« a x

 

than.

 

 

 

 

 

 

 

 

 

 

j

begin max .» =«

A [o ,jJ

*

 

i

0

*

*

J

 

5 ЙЙ *

 

 

opts

з

шах з

0

end

new

;

 

 

 

 

 

 

 

 

p ro o e d u re

w ork

1

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin integer

 

i .jJ O ,

 

real

min,

a lt

Boolean

un ,

 

ite r:

з

iter

1;

 

unt

з

 

true;

mint

з

И ;

 

 

for 1;

=

i

step 1

 

until,

 

-.m

 

do

 

 

^

 

 

 

 

i f

A

(l,jq J >

0

 

then

 

 

 

 

 

 

 

 

 

 

begin

 

el t

з

a

 

£i*oj

/

A

 

|^i,j0j

l

 

 

 

 

 

 

i f

un

V

®in >

 

al

 

then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

94

 

 

 

 

begin

ain

: = at

5

iOi =

1 »

uni =« false end

end

 

 

 

 

 

 

 

 

 

 

 

If

un

 

then go

to

unbo;

base

[to] i = jO ;

ai i

= i

/

A |TlO,

joj

(

 

 

 

for

3 t

1

step

1

until

a +

n

do

 

A [lO .jj

t =

A

[ i O j ]

*

a1

;

 

for

1: =

0 step

1

until

10 - 1 ,1 0 +

1 . step 1 until

 

begin

a1 : a A

r

 

7

»

 

 

 

 

m

do

;

 

£l,;JOf

 

 

 

 

 

 

 

 

 

for

ji

a

0

step

i until

m

t-n

do

 

 

 

 

A [i.jj

:=

A ji,j]

- ai

* A |iO,jJ

ends

endwork*

procedure

fin

i

j

 

 

 

 

 

 

 

 

 

 

 

 

begin

Integer

 

1,

j ; real ai ;

 

 

 

 

 

 

 

 

for

1 i

a

 

1

step

1

until

m

do

 

 

 

 

begin

 

at

i *

0

;

 

 

 

 

 

 

 

 

 

 

for

j

i

1

step t

until m

do

 

 

 

 

 

 

afi

=

e{

* a £ 1,

base

 

[ j ]J

x A

pj,oJ ;

.ВЫВОД

( base

j i j

,

A

£ l,o ],0 t,b

[lj, A [o,n+l|

+M)

end

end ' fin

* •

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЬР ( start 1 , new

t , work t ,

fin

1 ,

unbo )

;

 

 

ко

to

e3;

unboj

вывод

 

(jO,

A [ 0,jO j);

fin

t ;

e3i end simplex

95

Итцк, входными параметрами к процедуре staple* яв­ ляется:

- матрица коэффициентов системы ограничений задачи ли­ нейного программирования, представленных в виде равенств, раз­ мерами m * п ;

-вектор-столбец правых частей упомннутой системы ог­ раничений;

-вектор-строка коэффициентов линейной формы задачи ли­

нейного

программирования, причем рассматриваемая линейная фор­

ма должна не содержать свободного члена;

 

 

-

некоторая очень большая величина М

(например, 10^)'.

В эту процедуру входит процедура

ь р

с формальными

параметрами эta r t,new,work, fin и unbo

 

, из которых

первые четыре, в свою очередь, являются процедурами, а послед­

ний -

это метка. Суть этой процедуры заключается в том,

что

 

с помощью булевской величины

 

0pt

, процедуры

start-

и двух

 

меток

е%

и

е2

она делает следующее. Если

opt

 

имеет

 

значение

true

s то переход к метке

е г

 

обеспечивает

 

выполнение процедуры

fin

и

этим заканчивается процедура IP

 

В противном случае, т.е. если

opt

 

имеет

значение

false

,

выполняется процедура

work

 

, а затем осуществляется пере­

 

ход к метке' е1

. Теперь поясним процедуры

start

,

new

,

work

и

±in

* которые входят в процедуру

 

цр

и

заменя­

 

ются в дальнейшем фактическими параметрами start

1 ,

new 1

,

work 1

и

fin 1

• Процедура

start

1

заключается в построе­

ний расширенной и дополненной матрицы системы ограничений

 

(расширенной - за счет добавления строки, отвечающей линейной

 

формеди дополненной - за счет столбца свободных членов), при­

 

чем из строки, отвечающей линейной форме, исключены искусст­

 

венные переменные. Кроме того,

процедура start

1

фиксирует

 

номера базисных неизвестных.

 

 

 

 

 

 

 

 

 

 

 

Процедура

new 1

(opt)

 

находит наибольший положи­

 

тельный элемент нулевой строки (не принимая во внимание эле­

 

мента этой строки, стоящего в столбце

свободных членов),

но­

 

мерстолбца

( 3 0 )

, в котором он находится и приписывает

 

величине

opt

значение

true

t если величина находимого

 

 

 

 

 

96

 

 

 

шах

равна нулю,

и

значение lalae

, если эта величина

 

больше нуля.

 

 

 

 

 

 

 

Процедура work

1

выполняет симплексное преобразование

матрицы, т.е. выводит из

базиса переменную с номером iO

и

на ее место вводит

переменную с номером

jO

. Кроме того,

при невозможности выполнения симплексного преобразования из-за

отсутствия в

столбце JO

положительного элемента

(не в ну­

 

левой строке)

происходит выход из процедуры на метку

ш л о

.

что соответствует неограниченности линейной формы снизу.

 

Процедура f i m обеспечивает вывод номеров базисных переменны!»

и значение соответствующих переменных, доставляющих'минимум ли-- нейной форме.

Приведем решение следующей задачи -линейного программиро­

вания.

Найти минимум линейной формы

 

 

 

 

 

0= -х 2 *■ 2x5

 

 

 

 

 

 

при системе

ограничений

 

 

 

 

 

 

х1

-

х2 +

2*3 '

2х4 *

б15 * 2 '

 

 

 

 

х1 * 2хр -Х3 * 7X4 +

3x5

» 5 i

 

 

 

 

—x-j +

+ x^ —

 

 

^ A t

 

 

 

~

 

 

 

 

 

0

( i = 1 . 2 , 3 >4 , 5

 

 

Входными параметра!® процедуры

Simplex

будут:.

 

a[l:3,

1:5]

,

*

[i:^

 

' c [i-.d ]

 

(

I

-I 2 - 2 -

6 \

 

 

 

 

 

 

 

I

2 -1 7

3

(2 5 4)

 

(О - I 0 .0 2)

\-I

1 1 - 1 0 /

 

 

 

 

 

 

С этими дашшми

переходим к выполнению процедуры.start 1 _ ,

причем рекомендуем читателю непрерывно

сопоставлять

приводи­

мые ниже

вычисления с написанием этой процедуры на АЛГОЛ-60

 

 

 

А [0,о]:= 0,

 

 

iter ' :

= 0

 

AfO.Ij

:=0 ,

A

[0 ,2l :=-1 ,

л[о,3] :=0 ,

а [о ,4] :=0

А[0 ,^

 

 

 

А

[1,0]":=2,

А|2,0] :=5,

А [3,<j : =4,

97

A[l,lJ:=I, A[lf2]:=-I, Ар.з] :=2, A[l,4] :=-2, a [i ,5]:=-6

A[2,l]:=I, A[2,2j:=2f

A[2,3]

:=-I, A[2,4j :=7, A[2,5]:=3

 

A p,lj :=—I , A [3,2]

:=I,

A [3,3] :=I,

A [3,4] :=-I, A [ 3 ,s] :=0

 

A

[D,lj :=0

+ M. I + M. I +'M(-I) = M

 

 

 

 

 

 

 

A

p,2] :=-I

+ M

(-1)

+ M2 + MI = -I

+ 2 M

 

 

 

 

 

A

p,3]

:=0 + М2

+ M (-1) + MI =

2M '

 

 

 

 

 

 

 

A

 

: = 0 + M (-2) + M7 + M (-1) = 4 M

 

 

 

 

A

[0,| : =

2 + M(-6 ) + М3

+ MO = 2 - 3M

 

 

 

 

 

 

A

p J

: =

0,

 

A

[1,77 : =0,

A

[ l , 8 ]

:

= 0

 

 

 

 

A

[I,d : =

I,

 

 

 

• *

 

 

 

 

 

base

[ij: = 6

 

 

A

[2,|

: =

0,

A

[2,7] :

=

О,

A [2 ,8 ]

: =

0

_

 

 

 

 

 

 

 

 

A ]2,f : = I

 

 

.

Ъаае

/2J : = 7

 

 

А

[З,б] : =0,

 

A

[3,7f

: =

0,

 

A [3,8/

 

: =

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A [3,8J

 

: =

I, Ь а а в [ з ] : =8

 

A

[o,0]

: =

0 + М2 + M5 + M4 = II M

 

 

 

 

 

 

 

 

 

Таким образом, в результате выполнения процедуры

atart 1

мы имеем построенную матрицу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А

3,0

: в]

 

 

 

 

 

 

 

 

И М

 

М

2M-I

 

 

-ЗМ+2

 

0

 

 

0

0

 

 

2

 

I

-I

 

 

2

 

- 2

 

-6

 

 

I

 

 

0

0

 

 

5

 

I

 

2

 

 

-I

 

7

 

3

 

-0

 

 

I

0

 

 

4

-I

 

I

 

 

I

 

-I -

0

 

0

 

 

0

I

 

 

и указание на номера базисных переменных

 

 

 

 

 

 

 

Ъаве jYj

: =

6 , basej2j : =

7, Ьазв[з|

: = 8 .

 

 

 

 

Процедура

new 1 (opt) использует

эту матрицу и находит

 

наибольший положительнйй элемент в нулевой ее строке, но не в

 

нулевом столбце и отмечает номер того столбца, где расположен

 

этот элемент, и приписывает величине

opt

 

 

значение

true

,

если шах =

0

 

 

 

, и

значение

fa lse

 

, если

пах >

0

,

 

 

max

:

=

4 М,

 

jO

i =

4,

opt

i

= fslae

 

 

 

 

98

--

Так как величина

opt приняла значение . false -t то

следующей выполняется

процедура

work \ , причем мы опять ре­

комендуем читателю вести непрерывное сопоставление приводимых нике вычислений с написанием этой процедуры на АЛГОЛ-60.

Iter

= 0

+ 1 =

1, un5

=

true,

mini =»

M

 

»

 

5

mins

5

iOt

=

2,

un: =. falae

 

a n

=~Т~,

=~1~,

 

_ 1 _

 

 

Ъаае

[ г ]

t =• 4

 

 

 

a i: =«

7

 

 

 

L J

 

 

 

 

 

Затем элементы

"ключевой" строки умножаются на

ai

т.е. на

-4—

и

получается матрица

 

 

 

 

1 Ш

М

2М—I

-ЗМ+2

0

0

0

а I : = 4М

2

I

-I

2

-2

-6

 

I

0

0

a i : =-2

5

I

2

-I

I

 

3

 

0

I

0

 

7

7

7

7

 

 

7

 

 

7

 

 

4

-I

I

I

-I

 

0

 

0

0

I

а ! : = -I

теперь остальные строки матрицы преобразуются'по формуле

a [ i , j ]

 

 

at

 

А

 

 

 

 

что соответствует преобразованию по правилу прямоугольника:

52м

2м

£м- 1

Д м

0

- Д м +2

 

0

- 4 М ■ 0

7

7

7

7

 

7

 

 

 

7

 

24

9

_ 3

12

0

_ 36

 

I

_

2

0

7

7

7

7

7

 

_

7

 

 

 

 

5

I

2

_ I

I

3

 

0

 

I

0

7

7

7

7

 

7

 

 

 

7

 

33

_ 6

9

6

0

3

0

 

Г

I

7

7

7

7

7

 

7

 

 

 

 

 

 

После

этого мы

снова выполняем процедуру

new

л

(o p t)

 

и если в результате

ее выполнения величина o p t: = _£al_se

 

то переходим к выполнению процедуры

work i

 

 

 

 

 

 

 

 

 

99

 

 

 

 

new (o p t)

 

 

 

 

 

 

 

 

 

 

18

 

M,

JO»

a

3,

 

false

 

 

maxi= ~7

 

opti

 

wort 1

i t e r t = «

1

*

1

*

2 ,

un«= t r u e , m int

H

 

a1 <

i 2 , m in :

a

2 ,

 

10»=

1 »

uni *

falae

 

 

'

 

base

£ lj

i

=» 3

 

 

a1:

ГГГ

 

 

 

 

 

 

 

 

 

52m

 

 

 

& Й -1

I§M

0

- 22m +2

0

-

0

a

I

: A

7

 

7

 

7

 

7

 

 

7

 

 

 

7

 

 

 

7

2

 

3

_

I

 

I

0

 

-3

 

 

7

I

0

 

 

 

 

 

 

 

 

12

6 .

 

 

 

 

 

4

4

 

 

 

 

 

 

 

 

 

 

 

5

 

I

 

2

_

I

I

 

3

 

 

0

I

0

a

т

I

 

 

 

 

 

 

 

 

 

It»—7

7

 

7

 

7

"

7

 

 

7

 

 

 

7

 

 

 

1

33

_

6

 

9

 

6

0

 

3

 

 

0

I

I

a

Xla “f

7

~

7

 

7

 

7

 

7

 

 

7

 

 

 

 

 

 

 

 

 

 

 

3M

-

3 M

 

3 u-i

 

0

'o

 

3M+2

 

- - U

-M

0

 

 

 

 

 

2

 

2

 

 

 

 

 

 

 

2

I

 

 

 

 

2

 

3_____

I

 

I

0

 

-3

 

1

0

 

 

 

 

 

 

 

6

 

 

 

 

 

4

 

4

 

 

 

 

 

 

 

12

 

 

 

 

I

 

I .

 

I

 

0

I

 

 

0

 

I

I

0

 

 

 

 

 

4

 

4

 

 

 

 

 

 

 

12

6

 

 

 

 

3

 

3

 

3

 

0

0

 

 

3

 

- i

0

I

 

 

 

 

 

2

 

2

 

 

 

 

 

 

 

2

 

 

 

 

 

new

1.

(opt)

 

max»

» 3*

2 >

jOl

a

5,

Opt» a

false

 

 

 

 

 

 

wort 1

 

 

lteri

a 2+1*3,

ПП»

a

true.

mini

5C My

 

 

 

 

 

 

 

 

81 J

a

1 , mlnjt 1 ,

10» a 3, unt

a

false

 

 

 

 

 

 

 

 

 

 

 

 

Ъаае

 

»

a 5

 

 

 

 

 

S 1 » a

Соседние файлы в папке книги из ГПНТБ