- •Курсовая работа
- •1. Постановка задачи
- •2. Динамическое программирование
- •3. Принцип оптимальности Беллмана
- •4. Решение многошаговых задач оптимизации методом динамического программирования
- •5. Пример решения задачи оптимизации методом динамического программирования
- •6. Задача распределения ресурсов
- •7. Алгоритм решения задачи
- •8. Текст программы.
- •9. Контрольный расчет
- •10. Применение программы для исходной задачи. Вариант 2821
8. Текст программы.
Решение задачи методом динамического программирования на алгоритмическом языке 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.
9. Контрольный расчет
Исходные данные:
-
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 |
0.00000 |
0 |
0.00000 |
0 |
0.00000 |
0 |
1 |
0.20000 |
1 |
0.20000 |
0 |
0.20000 |
0 |
2 |
0.32000 |
2 |
0.32000 |
0 |
0.32000 |
0 |
3 |
0.39200 |
3 |
0.39200 |
0 |
0.41000 |
1 |
4 |
0.43520 |
|
0.45200 |
1 |
0.48200 |
1 |
5 |
0.46112 |
5 |
0.49520 |
1 |
0.54500 |
2 |
6 |
0.47667 |
6 |
0.53720 |
|
0.60500 |
2 |
7 |
0.48600 |
7 |
0.56660 |
3 |
0.64910 |
3 |
8 |
0.49160 |
8 |
0.59252 |
3 |
0.69230 |
3 |
9 |
0.49496 |
9 |
0.61310 |
4 |
0.73430 |
|
Хопт = {4;2;3}.
Математическое ожидание равно 0.7343.
10. Применение программы для исходной задачи. Вариант 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 |
0.00000 |
0 |
0.00000 |
0 |
0.00000 |
0 |
||
1 |
0.41818 |
1 |
0.58548 |
1 |
0.58548 |
0 |
||
2 |
0.62100 |
2 |
1.00366 |
1 |
1.00366 |
0 |
||
3 |
0.71936 |
|
1.20648 |
1 |
1.20648 |
0 |
||
4 |
0.76707 |
4 |
1.37392 |
2 |
1.37392 |
0 |
||
5 |
0.79021 |
5 |
1.47229 |
|
1.48221 |
1 |
||
6 |
0.80143 |
6 |
1.52018 |
3 |
1.58058 |
1 |
||
7 |
0.80687 |
7 |
1.56789 |
3 |
1.67598 |
2 |
||
8 |
0.80951 |
8 |
1.59103 |
3 |
1.76003 |
3 |
||
9 |
0.81079 |
9 |
1.60472 |
4 |
1.83408 |
4 |
||
10 |
0.81142 |
10 |
1.61595 |
4 |
1.89932 |
5 |
||
11 |
0.81172 |
11 |
1.62139 |
4 |
1.95679 |
6 |
||
12 |
0.81186 |
12 |
1.62531 |
5 |
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 |
0.00000 |
0 |
0.00000 |
0 |
0.00000 |
0 |
|||||
1 |
0.58058 |
1 |
0.58548 |
1 |
0.58548 |
0 |
|||||
2 |
0.74605 |
|
1.16606 |
1 |
1.16606 |
0 |
|||||
3 |
0.79320 |
3 |
1.33351 |
2 |
1.33351 |
0 |
|||||
4 |
0.80664 |
4 |
1.49897 |
2 |
1.49897 |
0 |
|||||
5 |
0.81047 |
5 |
1.54686 |
3 |
1.60726 |
1 |
|||||
6 |
0.81156 |
6 |
1.59402 |
|
1.70267 |
2 |
|||||
7 |
0.81188 |
7 |
1.60772 |
4 |
1.78672 |
3 |
|||||
8 |
0.81196 |
8 |
1.62116 |
4 |
1.86077 |
4 |
|||||
9 |
0.81199 |
9 |
1.62507 |
5 |
1.92600 |
5 |
|||||
10 |
0.81200 |
10 |
1.62890 |
5 |
1.98348 |
6 |
|||||
11 |
0.81200 |
11 |
1.63002 |
6 |
2.03411 |
7 |
|||||
12 |
0.81200 |
12 |
1.63112 |
6 |
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 |
0.00000 |
0 |
0.00000 |
0 |
0.00000 |
0 |
1 |
0.74298 |
1 |
0.74298 |
0 |
0.74298 |
0 |
2 |
0.80613 |
|
1.32846 |
1 |
1.32846 |
0 |
3 |
0.81150 |
3 |
1.49591 |
2 |
1.49591 |
0 |
4 |
0.81196 |
4 |
1.55906 |
2 |
1.60420 |
1 |
5 |
0.81200 |
5 |
1.60695 |
|
1.69960 |
2 |
6 |
0.81200 |
6 |
1.62065 |
4 |
1.78365 |
3 |
7 |
0.81200 |
7 |
1.62602 |
4 |
1.85770 |
4 |
8 |
0.81200 |
8 |
1.62993 |
5 |
1.92294 |
5 |
9 |
0.81200 |
9 |
1.63105 |
6 |
1.98609 |
5 |
10 |
0.81200 |
10 |
1.63151 |
6 |
2.04356 |
6 |
11 |
0.81200 |
11 |
1.63183 |
7 |
2.09420 |
7 |
12 |
0.81200 |
12 |
1.63192 |
8 |
2.14209 |
|
Хопт = {2;3;7}.
Математическое ожидание равно 2.14209.
