Листинг программы.
Program practica;
Var
a:array[1..50,1..50] of real;
il,iv,ig,is,i,j,n,m:integer;
f1,f2:text;
alfa:real;
function laplas(n,m:integer):integer;
Var
b:array[1..50] of real;
max:real;
i1:integer;
Begin
for i:=1 to n do
b[i]:=0;
for i:=1 to n do
for j:=1 to m do
b[i]:=b[i]+a[i,j];
for i:=1 to n do
b[i]:=b[i]/n;
max:=b[1]; i1:=1;
for i:=1 to n do
if b[i]>max then
begin
max:=b[i];
i1:=i;
end;
laplas:=i1;
end;
function vald(n,m:integer):integer;
Var
b:array[1..50] of real;
max:real;
i1:integer;
Begin
for i:=1 to n do
b[i]:=a[i,1];
for i:=1 to n do
for j:=1 to m do
if a[i,j]<b[i] then
b[i]:=a[i,j];
max:=b[1]; i1:=1;
for i:=1 to n do
if b[i]>max then
begin
max:=b[i];
i1:=i;
end;
vald:=i1;
end;
Function gurv(alfa:real;n,m:integer):integer;
var
b1,b2:array[1..50] of real;
max:real;
i1:integer;
begin
for i:=1 to n do
begin
b1[i]:=a[i,1];
b2[i]:=a[i,1];
end;
for i:=1 to n do
for j:=1 to m do
begin
if a[i,j]<b1[i] then
b1[i]:=a[i,j];
if a[i,j]>b2[i] then
b2[i]:=a[i,j];
end;
for i:=1 to n do
b1[i]:=alfa*b1[i]+(1-alfa)*b2[i];
max:=b1[1]; i1:=1;
for i:=1 to n do
if b1[i]>max then
begin
max:=b1[i];
i1:=i;
end;
gurv:=i1;
end;
function sevidg(n,m:integer):integer;
Var
r:array[1..50,1..50] of real;
b1,b2:array[1..50] of real;
min:real;
i1:integer;
begin
for j:=1 to m do
b1[j]:=a[1,j];
for j:=1 to m do
for i:=1 to n do
if a[i,j]>b1[j] then
b1[j]:=a[i,j];
for i:=1 to n do
for j:=1 to m do
r[i,j]:=b1[j]-a[i,j];
for i:=1 to n do
b2[i]:=r[i,1];
for i:=1 to n do
for j:=1 to m do
if r[i,j]>b2[i] then
b2[i]:=r[i,j];
min:=b2[1]; i1:=1;
for i:=1 to n do
if b2[i]<min then
begin
min:=b2[i];
i1:=i;
end;
sevidg:=i1;
end;
Begin
assign(f1,'input.txt');
assign(f2,'output.txt');
reset(f1);
read(f1,n);
read(f1,m);
read (f1,alfa);
for i:=1 to n do
begin
for j:=1 to m do
read(f1,a[i,j]);
readln(f1);
end;
close(f1);
rewrite(f2);
il:=laplas(n,m);
iv:=vald(n,m);
ig:=gurv(alfa,n,m);
is:=sevidg(n,m);
write(f2,'kriterii Laplasa: ',il);
writeln(f2);
write(f2,'kriterii Valda: ',iv);
writeln(f2);
write(f2,'kriterii Gyrvisa: ',ig);
writeln(f2);
write(f2,'kriterii Sevidga: ',is);
close(f2);
readln;
end.
Проверка правильности программы.
Проверим правильность программы на примере следующей задачи. Предприниматель хочет взять взять в аренду на один год отель. Имеются отели четырех типов: на 20, 30, 40 или 50 комнат. Прибыль предпринимателя определяется двумя параметрами: x – общее число комнат отеля, у- среднее число занятых комнат в год. При этом x принимает значения 20, 30, 40, 50, а у – любое целое значение не превосходящее 50. Прибыль F(x, y)= 1825y-477.5x-2550. Необходимо найти оптимальный выбор отеля.
Пусть стратегия 1 – отель на 20 комнат,
стратегия 2 – отель на 30 комнат,
стратегия 3 – отель на 40 комнат,
стратегия 4 – отель на 50 комнат.
Для определенности предположим, что y принимает значения: 10, 15, 20, 25, 30, 40, 50. Занумеруем эти значения номерами: 1, 2, 3, 4, 5, 6, 7 соответственно. Матрица будет иметь следующий вид:
62 |
153 |
245 |
245 |
245 |
245 |
245 |
14 |
105 |
197 |
288 |
380 |
380 |
380 |
-34 |
57 |
150 |
240 |
332 |
515 |
515 |
-81 |
10 |
102 |
192 |
285 |
468 |
651 |
Тогда суммы в критерии Лапласа для каждой строки примерно равны соответственно 205.7, 249.1, 253.6, 232.4, следовательно оптимальной является стратегия под номером 3.
Минимальная прибыль для каждой из стратегий равна соответственно: 62, 14, -34, -81, следовательно оптимальной по критерию Вальда будет стратегия номер 1.
Возьмем для критерия Гурвица значение за значения параметра α=0.2. Максимальная прибыль для каждой стратегии равна соответственно: 245, 380, 515, 651. Тогда взвешенные суммы для каждой из стратегий равны соответственно: 208.4, 306.4, 405.2, 504.6, следовательно оптимальной в данном случае будет стратегия номер 4.
В критерии Севиджа максимальные элементы для каждого столбца равны соответственно: 62, 153, 197, 288, 380, 515, 651. Матрица рисков будет иметь вид:
0 |
0 |
0 |
43 |
135 |
270 |
406 |
48 |
48 |
48 |
0 |
0 |
135 |
271 |
28 |
96 |
95 |
48 |
48 |
0 |
136 |
-19 |
143 |
143 |
96 |
95 |
47 |
0 |
Максимальными элементами строк будут соответственно:406, 271, 136, 143, следовательно оптимальной будет 3 стратегия.
Файл output.txt при записи в файл input.txt числа строк = 4, числа столбцов = 7, значения параметра 0.2 и соответствующей матрицы, после применения программы будет иметь вид:
kriterii Laplasa: 3
kriterii Valda: 1
kriterii Gyrvisa: 4
kriterii Sevidga: 3
Что соответствует номерам оптимальных стратегий для каждого критерия, как подсчитано выше.