Алгоритм решения задачи

1) ,

2)

3)

4)

5)

6)

7) ?, если условие выполняется, то переход к пункту 8, иначе переход к пункту 9.

8)

9)

10) , если условие выполняется, то переход к пункту 11, иначе к пункту 6.

11) ,

12)

13) , если условие выполняется, то переход к пункту 14, иначе переход к пункту 4.

14) Вывод и

15) Перенос блока

16)

17) , если условие выполняется, то переход к пункту 18, иначе переход к пункту 3.

18)

19)

20)

21) Печать и

22)

23)

24) , если условие выполняется, то переход к пункту 25, иначе переход к пункту 20.

25) Stop.

Проиллюстрируем изложенный алгоритм на следующей тестовой задаче:

Максимизировать

при условиях

Сформулированная задача часто встречается в различных экономических приложениях и характеризует процесс распределения ресурсов.

Пусть необходимо распределить однотипных автомобилей для выполнения перевозок у клиентов. Считаются известными вероятности выполнения требуемых объемов перевозок одним автомобилем у каждого из клиентов и относительно важности этих перевозок.

Пусть - количество автомобилей, выделяемые - му клиенту, тогда вероятность выполнения всех перевозок -го клиента составляет

,

а математическое ожидание выполненного объема перевозок с учетом их важности у всех клиентов будет

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


Текст программы.

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

Program dp;

const

h=3;

M=9;

var

x:array[1..1000] of integer;

k:array[0..1000] of integer;

p,w:array[1..1000] of real;

F:array[0..1000,0..1000] of real;

Ps:array[0..1000,0..1000] of integer;

j,i,N,g:integer;

T,R:real;

Begin

p[1]:=0.4; p[2]:=0.2; p[3]:=0.3;

w[1]:=0.5; w[2]:=0.2; w[3]:=0.3;

for i:=1 to h do

begin

for j:=0 to M do

F[i,j]:=0;

end;

j:=1;

repeat

N:=0;

repeat

T:=-1000000;

x[j]:=0;

repeat

begin

R:=p[j]*(1-power(1-w[j],x[j]))+F[j-1,N-x[j]];

if R>T then begin

T:=R;

g:=x[j];

end;

x[j]:=x[j]+1;

end;

until x[j]>N;

F[j,N]:=T;

ps[j,N]:=g;

N:=N+1;

until N>M;

j:=j+1;

until j>h;

writeln (' N',' |','F1(x1) ','|','Ps1(x1)','|','F2(x2) ','|','Ps2(x2)','|','F3(x3) ','|','Ps3(x3)','|');

for j:=0 to M do

begin

write (j:2,' |');

for i:=1 to h do

begin

write (F[i,j]:7:5,'|');

write (ps[i,j]:4,' |');

end;

writeln;

end;

j:=h;

k[j]:=M;

repeat

j:=j-1;

k[j]:=k[j+1]-Ps[j+1,k[j+1]];

until j=0;

T:=0;

for j:=1 to h do

if T<F[j,k[j]] then T:=F[j,k[j]];

writeln('F(x1опт,x2опт,x3опт)=',T:7:5);

for j:=1 to h do

write('x',j,'опт= ',Ps[j,k[j]],'; ');

end.


Контрольный расчет

Исходные данные:

0.5 0.4
0.2 0.3
0.3 0.3

 

Все промежуточные вычисления по предыдущему алгоритму сведены в таблицу 1: Табл.1

N F1(x1) Ps1(x1) F2(x2) Ps2(x2) F3(x3) Ps3(x3)
  0.00000   0.00000   0.00000  
  0.20000   0.20000   0.20000  
  0.32000   0.32000   0.32000  
  0.39200   0.39200   0.41000  
  0.43520 0.45200   0.48200  
  0.46112   0.49520   0.54500  
  0.47667   0.53720 0.60500  
  0.48600   0.56660   0.64910  
  0.49160   0.59252   0.69230  
  0.49496   0.61310   0.73430

 

Хопт = {4;2;3}.

Математическое ожидание равно 0.7343.

 

Применение программы для исходной задачи. Вариант 2821

Исходные данные для данного варианта:

N = 12 J = 3
0.291 0.496
0.192 0.297
0.893 0.198

 

Ниже приведена таблица 2, на которой показаны все промежуточные вычисления программы для поставленной задачи.

Таблица результатов: Табл.2

N F1(x1) Ps1(x1) F2(x2) Ps2(x2) F3(x3) Ps3(x3)
  0.00000   0.00000   0.00000  
  0.41818   0.58548   0.58548  
  0.62100   1.00366   1.00366  
  0.71936 1.20648   1.20648  
  0.76707   1.37392   1.37392  
  0.79021   1.47229 1.48221  
  0.80143   1.52018   1.58058  
  0.80687   1.56789   1.67598  
  0.80951   1.59103   1.76003  
  0.81079   1.60472   1.83408  
  0.81142   1.61595   1.89932  
  0.81172   1.62139   1.95679  
  0.81186   1.62531   2.00743
                 

Хопт = {3;2;7}.

Математическое ожидание равно 2.00743.

В таблице 3 показаны результаты вычислений, когда .

Исходные данные:

0.812 0.715
0.82 0.714
0.91 0.119

 

Таблица результатов: Табл.3

N F1(x1) Ps1(x1) F2(x2) Ps2(x2) F3(x3) Ps3(x3)
  0.00000   0.00000   0.00000  
  0.58058   0.58548   0.58548  
  0.74605 1.16606   1.16606  
  0.79320   1.33351   1.33351  
  0.80664   1.49897   1.49897  
  0.81047   1.54686   1.60726  
  0.81156   1.59402 1.70267  
  0.81188   1.60772   1.78672  
  0.81196   1.62116   1.86077  
  0.81199   1.62507   1.92600  
  0.81200   1.62890   1.98348  
  0.81200   1.63002   2.03411  
  0.81200   1.63112   2.08200
                   

Хопт = {2;3;7}.

Математическое ожидание равно 2.08200.

 

В таблице 4 показаны результаты вычислений, когда .

Исходные данные:

0.812 0.915
0.82 0.714
0.91 0.119

 

Таблица результатов: Табл.4

N F1(x1) Ps1(x1) F2(x2) Ps2(x2) F3(x3) Ps3(x3)
  0.00000   0.00000   0.00000  
  0.74298   0.74298   0.74298  
  0.80613 1.32846   1.32846  
  0.81150   1.49591   1.49591  
  0.81196   1.55906   1.60420  
  0.81200   1.60695 1.69960  
  0.81200   1.62065   1.78365  
  0.81200   1.62602   1.85770  
  0.81200   1.62993   1.92294  
  0.81200   1.63105   1.98609  
  0.81200   1.63151   2.04356  
  0.81200   1.63183   2.09420  
  0.81200   1.63192   2.14209

Хопт = {2;3;7}.

Математическое ожидание равно 2.14209.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: