Файл: Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.10.2024

Просмотров: 106

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

 

 

 

 

 

 

 

 

 

 

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 если величина находимого