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

=====

x _ o p t =

2 . 0 . 1 .

f _ o p t =

1 6 0 .

>d i a r y ( 0 )

5. Задача о надежности

Задача 3 (о надежности) Конструируется электронный прибор, состоящий из трех основных компонентов. Все компоненты соединены последовательно, поэтому выход из строя одной из них приводит к отказу всего прибора. Надежность прибора можно повысить путем дублирования каждой компоненты. Kаждая компонента может состоять из одного, двух или трех блоков. Общая стоимость прибора не должна превышать 10 тысяч евро. В таблице 16 приведены данные o стоимости cj (xj ) и надежности Rj (xj ) j-ой компоненты, состоящей из xj блоков.

Требуется определить количество блоков xj в компоненте j; при котором надежность прибора максимальна, а стоимость не превышает заданной величины.

xj

j = 1

j = 2

j = 3

 

C1

R1

C2

R2

C3

R3

1

1

0.6

3

0.7

2

0.5

2

2

0.8

5

0.8

4

0.7

3

3

0.9

6

0.9

5

0.9

Таблица 16: Данные о стоимости и надежности каждой компоненты прибора.

Сначала рассмотрим задачу в общей постановке.

 

n

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

max

{j=1

R

(x

)

;

 

 

f1(y1) = x1;:::;xn

 

j

j

 

}

 

 

 

j=1 cj (xj ) y1;

 

 

 

x

1

– целые,

j = 1 : n

.

 

j

 

 

Легко вывести рекуррентные уравнения Беллмана для процедуры обратной прогонки.

fn(yn)

=xn

 

max

 

ynfRn(xn)g;

 

 

 

cn(xn)

 

 

 

j

 

 

 

 

 

fj (yj )

=xj

 

max

 

yjfRj (xj ) fj+1

(y

j cj (xj ))g;

cj(xj)

 

 

j

 

 

 

 

 

 

j = n 1; n 2; : : : 1:

Этап 3. Третья компонента прибора.

 

 

f3(y3) =

max

R

 

(X ) :

 

 

 

x3

f

 

3

3

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оптимальное

 

 

 

R3(x3)

 

 

 

 

решение

 

y3

x3 = 1

x3 = 2

x3 = 3

f3(y3)

x3

2

0.5

 

 

 

 

 

 

0.5

 

1

3

0.5

 

 

 

 

 

 

0.5

 

1

4

0.5

 

0.7

 

 

 

 

 

0.7

 

2

5

0.5

 

0.7

 

 

0.9

 

0.9

 

3

6

0.5

 

0.7

 

 

0.9

 

0.9

 

3

Таблица 17: Задача о надежности, этап 3

27

Этап 2. Вторая и третья компоненты прибора.

 

 

max

R

 

(x

 

)

 

f

 

(y

 

c2(x2))g;

 

 

f2(y2) = x2=1:3f

 

2

 

2

 

 

3

 

2

 

 

R2(x2) f3(y2 c2(x2))

 

 

Оптимальное

 

 

 

решение

 

y2

x2 = 1

x2 = 2

 

 

 

x2 = 3

 

f2(y2)

x2

5

.7*.5=.35

 

 

 

 

 

 

 

 

 

.35

 

1

6

.7*.5=.35

 

 

 

 

 

 

 

 

 

.35

 

1

7

.7*.7=.49

.8*.5=.40

 

 

 

 

 

 

.49

 

1

8

.7*.9=.63

.8*.5=.40

 

.9*.5=.45

.63

 

1

9

.7*.9=.63

.8*.7=.56

 

.9*.5=.45

.63

 

1

Таблица 18: Задача о надежности, этап 2

Этап 1. Первая, вторая и третья компоненты прибора.

 

 

max

R

 

(x

 

)

 

f

 

(y

1 c1

(x1))g;

 

 

f1(y1) = x1=1:3f

 

1

 

1

 

 

2

 

 

 

R1(x1) f2(y1 c1(x1))

 

 

Оптим.

 

 

 

 

решение

 

y1

x1 = 0

x1 = 1

 

 

 

 

x1 = 2

 

f1(y1)

x1

6

.6*.35=.210

 

 

 

 

 

 

 

 

 

.210

 

1

7

.6*.35=.210

.8*.35=.280

 

 

 

 

 

.280

 

2

8

.6*.49=.294

.8*.35=.280

 

.9*.35=.315

.315

 

3

9

.6*.63=.378

.8*.49=.392

 

.9*.35=.315

.392

 

2

10

.6*.63=.378

.8*.63=.504

 

.9*.49=.441

.504

 

2

Таблица 19: Задача о надежности, этап 1

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

5.1. Задача о надёжности на компьютере.

Отличие от общей задачи о распределении инвестиций минимально. Надо только не забыть, что здесь надо для целевой функции сложение заменить на умножение. А также вспомнить, что 0 + x = x для сложения, а для умножения ноль заменяется на единицу: 1 x = x:

 

> f i l e _ =

 

’ NadDi . s c e ’ ;

 

 

 

 

>w r i t e ( 6 , m g e t l ( f i l e _ ) )

 

 

 

/ /

Программа

NadDi . s c e

 

 

 

 

 

/ /

Решение

задачи

о надёжности

 

 

 

/ /

методом

динамического

программирования .

 

 

/ /

====

24

 

марта

2011 года ==== Визгунов НП . .

 

 

c l e a r ,

c l c ,

mode ( 0 ) ,

l i n e s ( 0 , 9 0 )

 

 

y_1 = 10

 

 

 

 

 

 

 

 

C

= [ 1

 

 

3

2

 

 

 

 

 

 

2

 

 

5

4

 

 

 

 

 

 

3

 

 

6

5 ]

 

 

 

 

 

R = [ 0 . 6

 

0 . 7

0 . 5

 

 

 

 

 

 

0 . 8

 

0 . 8

0 . 7

 

 

 

 

 

 

0 . 9

 

0 . 9

0 . 9 ]

 

 

 

 

 

[ x9 , n ]

=

s i z e ( R ) ;

/ /

x9

Количество

управлений

 

y9

 

=

y_1 +

1 ;

/ /

y9=y_1

+1 Количество

состояний

28

 

/ /

Вычисляем таблицы для

 

 

 

 

 

 

 

 

 

 

/ /

динамического программирования ДП

 

 

 

 

 

X = %inf *

o n e s ( y9 ,

n + 1 ) ;

 

 

 

 

 

 

 

 

 

F

= X ;

 

 

 

 

 

/ /

 

 

 

 

 

 

F ?

 

 

F ( : , n + 1 )

=

o n e s ( y9 ,

1 ) ;

что

находится сейчас в

 

 

f o r j = n : 1 : 1

 

 

 

 

 

 

 

 

 

 

 

 

Fyx

= %inf

* o n e s ( y9 ,

x9 ) ;

 

 

 

 

 

 

 

 

f o r

y

=

0 : y_1

 

 

/ /

y

состояние

на

шаге

j

 

 

 

f o r

x

= 1

: x9

 

 

/ /

x

управление

на

шаге

j

 

 

 

 

yy = y C ( x , j ) ;

 

 

 

 

 

 

 

 

 

 

 

 

i f

0 <= yy & yy

<=

y_1

 

 

 

 

 

 

 

 

 

 

/ /

Уравнение Ричарда

Беллмана

 

 

 

 

 

 

 

 

Fyx ( 1 + y ,

x )

=

R ( x ,

j ) *

F ( 1 + y C ( x , j ) ,

j + 1 ) ;

 

 

 

 

 

/ /

Fyx (1+ y , x )

=

R ( x , j )

+ F(1+

yy ,

j + 1 ) ;

 

 

 

end

end

 

 

 

 

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/ /

F , Fyx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[ cFy ,

cX ] =

max ( Fyx ,

’ c ’ ) ;

/ / c

column ,

столбец

 

 

F ( : , j ) = cFy ;

 

 

 

 

 

 

 

 

 

 

 

 

X ( : , j )

=

cX ;

 

 

 

 

 

 

 

 

 

 

 

 

 

/ /

Печать

шапки

 

 

 

 

 

 

 

 

 

 

 

 

xmaxi =

sum ( b o o l 2 s ( R ( : , j )

>

%inf ) ) ;

 

 

 

 

 

w r i t e ( 6 , ’ ’ )

 

 

 

 

 

 

 

 

 

 

 

 

w r i t e ( 6 ,

’ Этап ’

+

s t r i n g ( j ) ’ )

 

 

 

 

 

/ /

t i r e 4 0 =

’~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~ ’;

 

 

t i r e 4 0 = p a r t ( ’ ~ ’ , o n e s ( 1 , 2 1 ) ) + ’ | ’ + . . .

 

 

 

 

p a r t ( ’ ~ ’ , o n e s ( 1 , 7 * xmaxi + 2 ) ) ;

 

 

 

 

 

w r i t e ( 6 , t i r e 4 0 ) ;

 

 

 

 

 

 

 

 

 

 

 

 

w r i t e ( 6 ,

’ Y ’ +

s t r i n g ( j )

+ . . .

 

 

 

 

 

 

 

’ F j ( Yj ) Xj * | Fyx ’ ) ;

 

 

 

 

 

 

w r i t e ( 6 , t i r e 4 0 ) ;

 

 

 

 

 

 

 

 

 

 

 

 

/ /

Печать

только нужных

строчек

и

столбцов таблицы

 

 

 

/ /

Допустимые

состояния

на

этапе

j меняются

 

 

 

 

 

/ /

в пределах

от y m i n i до

y m a x i

включительно

 

 

 

 

 

y m i n i =

sum ( C ( 1 , j : $ ) ) ;

 

 

 

 

 

 

 

 

 

 

ymaxi =

y_1 sum ( C ( 1 ,

1 :

j 1 ) ) ;

 

 

 

 

 

 

T a b l e

=

[ ( 0 : y_1 ) ’ ,

F ( : , j ) ,

X ( : , j ) , Fyx ] ;

 

 

 

 

w r i t e ( 6 , T a b l e ( 1 + ( y m i n i : ymaxi ) , 1 : ( 3 + xmaxi ) ) , . . .

 

 

 

’ ( ( f 6 . 0 , f 7 . 3 , f 6 . 0 ) , ” ” | ” ” , 1 0 0 ( f 7 . 3 ) ) ’ )

 

 

w r i t e ( 6 , t i r e 4 0 ) ;

 

 

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/ /

Вычисление f o p t , r X o p t

и

r Y o p t

 

 

 

 

 

 

/ /

==============================

 

 

 

 

 

r X o p t

= z e r o s ( 1 , n ) ;

/ /

r

row , строка

 

 

 

 

r Y o p t = z e r o s ( 1 , n ) ;

 

 

 

 

 

 

 

 

 

 

 

y

= y_1 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f o r j

= 1

:

n

 

 

 

 

 

 

 

 

 

 

 

 

 

r X o p t ( j ) = X( 1 + y , j ) ;

 

 

 

 

 

 

 

 

 

 

r Y o p t ( j ) = y ;

 

 

 

 

 

 

 

 

 

 

 

 

y = y C ( r X o p t ( j ) , j ) ;

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

29

/ /

Печать

ответа :

/ /

==============

C ,

R , y_

1

 

 

 

w r i t e ( 6 , ’ =========== Ответ : ============ ’ ) w r i t e ( 6 , ’ =============================== ’ )

f o p t = F ( 1 + y_1 , 1 ) ;

w r i t e ( 6 , ’ f o p t = ’ + s t r i n g ( f o p t ) ) ;

w r i t e ( 6 , r X o p t , ’ ( ” ” r X o p t = ” ” , 100 i 6 ) ’ ) w r i t e ( 6 , r Y o p t , ’ ( ” ” r Y o p t = ” ” , 100 i 6 ) ’ )

>e x e c ( f i l e _ , 0 )

 

y_1

=

 

 

 

1 0 .

 

 

C

=

 

 

 

1 .

3 .

2 .

 

2 .

5 .

4 .

 

3 .

6 .

5 .

R

=

 

 

 

0 . 6

0 . 7

0 . 5

 

0 . 8

0 . 8

0 . 7

 

0 . 9

0 . 9

0 . 9

 

 

 

 

Этап 3

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

Y3 F j ( Yj ) Xj * | Fyx

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

2 . 0 . 5 0 0

1 .

|

0 . 5 0 0

I n f

I n f

3 . 0 . 5 0 0

1 .

|

0 . 5 0 0

I n f

I n f

4 . 0 . 7 0 0

2 .

|

0 . 5 0 0

0 . 7 0 0

I n f

5 .

0 . 9 0 0

3 .

|

0 . 5 0 0

0 . 7 0 0

0 . 9 0 0

6 .

0 . 9 0 0

3 .

|

0 . 5 0 0

0 . 7 0 0

0 . 9 0 0

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

Этап 2

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

Y2 F j ( Yj ) Xj * | Fyx

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

5 . 0 . 3 5 0

1 .

|

0 . 3 5 0

I n f

I n f

6 . 0 . 3 5 0

1 .

|

0 . 3 5 0

I n f

I n f

7 . 0 . 4 9 0

1 .

|

0 . 4 9 0

0 . 4 0 0

I n f

8 .

0 . 6 3 0

1 .

|

0 . 6 3 0

0 . 4 0 0

0 . 4 5 0

9 .

0 . 6 3 0

1 .

|

0 . 6 3 0

0 . 5 6 0

0 . 4 5 0

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

Этап 1

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

Y1 F j ( Yj ) Xj * | Fyx

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

6 . 0 . 2 1 0

1 .

|

0 . 2 1 0

I n f

I n f

7 . 0 . 2 8 0

2 .

|

0 . 2 1 0

0 . 2 8 0

I n f

8 .

0 . 3 1 5

3 .

|

0 . 2 9 4

0 . 2 8 0

0 . 3 1 5

9 .

0 . 3 9 2

2 .

|

0 . 3 7 8

0 . 3 9 2

0 . 3 1 5

1 0 . 0 . 5 0 4

2 .

|

0 . 3 7 8

0 . 5 0 4

0 . 4 4 1

~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~

C

=

 

 

 

1 .

3 .

2 .

 

2 .

5 .

4 .

 

3 .

6 .

5 .

R

=

 

 

 

0 . 6

0 . 7

0 . 5

 

0 . 8

0 . 8

0 . 7

 

0 . 9

0 . 9

0 . 9

30

y_1 = 1 0 .

=========== Ответ : ============

===============================

f o p t

=

0 . 5 0 4

 

 

r X o p t =

2

1

3

r Y o p t

=

10

8

5

 

 

 

 

 

>d i a r y ( 0 )

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

> f i l e _ =

 

’ NadPe . s c e ’ ;

>w r i t e ( 6 , m g e t l ( f i l e _ ) )

/ /

Программа

NadPe . s c e

/ /

Решение

задачи о

надёжности

/ /

методом

полного

перебора .

/ /

==== 24

 

марта 2011 года ==== Визгунов НП . .

c l e a r ,

c l c ,

mode ( 0 ) , l i n e s ( 0 , 9 0 )

y_1 = 10

 

 

 

 

C

= [

1

 

3

2

 

 

 

2

 

5

4

 

 

 

3

 

6

5

]

R = [ 0 . 6

 

0 . 7

0 . 5

 

 

 

0 . 8

 

0 . 8

0 . 7

 

 

 

0 . 9

 

0 . 9

0 . 9 ]

 

 

 

 

 

 

 

[ u9 ,

n ]

= s i z e ( C ) ;

/ /

u9

число

возможных

управлений

x_min = o n e s ( 1 , n )

 

 

 

 

/ / [ 1

1

1

1 ]

x_max

=

sum ( a b s ( R )

~= %inf ,

’ r ’ )

/ /

[ 3

3

3

3 ]

x

=

x_min ;

 

 

 

 

 

 

 

 

 

 

x _ o p t = x_min ;

 

 

 

 

 

 

 

 

 

 

f _ o p t

=

%inf ;

 

 

 

 

 

 

 

 

 

 

j = n ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w h i l e

%t

 

 

 

 

 

 

 

 

 

 

 

 

 

i f

x ( j )

<=

x_max ( j )

 

 

 

 

 

 

 

 

c o s t

=

0 ;

 

 

 

 

 

 

 

 

 

 

 

f o r

i

=

1

: n

 

 

 

 

 

 

 

 

 

end

c o s t = c o s t + C ( x ( i ) , i ) ;

 

 

 

 

 

 

c o s t

<=

y_1

 

 

 

 

 

 

 

 

i f

 

 

 

 

 

 

 

 

 

 

 

f

=

1 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

f o r

i

=

1 : n

 

 

 

 

 

 

 

 

 

 

 

f = f * R ( x ( i ) , i ) ;

 

 

 

 

 

 

 

 

end

f _ o p t

< f

 

 

 

 

 

 

 

 

 

 

i f

 

 

 

 

 

 

 

 

 

 

 

 

/ /

Для печати

промежуточных

данных

убрать

;

 

 

 

 

f _ o p t

=

f ;

 

 

 

 

 

 

 

 

 

 

 

x _ o p t

=

x ;

 

 

 

 

 

 

 

 

 

 

e l s e i f f _ o p t == f

 

 

 

 

 

 

 

 

 

 

f _ o p t ;

 

 

 

 

 

 

 

 

 

 

 

 

x _ o p t = [ x _ o p t ; x ] ;

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

end

/ /

c o s t

 

 

 

 

 

 

 

 

 

 

j

=

n ;

 

 

 

 

 

 

 

 

 

 

 

e l s e

 

 

/ /

x ( j ) > x_max ( j )

 

 

 

 

 

 

x ( j ) = x_min ( j ) ;

 

 

 

 

 

 

 

 

j

=

j

1 ;

 

 

 

 

 

 

 

 

 

 

i f

 

j

<=

1 e 8

 

 

 

 

 

 

 

 

 

 

 

/ /

Решение

получено выйти

из

цикла

 

 

 

31