% Лабораторна робота № 6 ТССА 05-06-22 % РОЗКРИТТЯ СИТУАЦІЙНОЇ НЕВИЗНАЧЕНОСТІ В ЗАДАЧАХ СИСТЕМНОГО АНАЛІЗУ % - - - Використовується функція - - - % x_view = view_estimation(x, matrix_name, row_name, col_name); файл view_estimation.m % x - оцінки % matrix_name - назва матриці % row_name - назви варіантів структури (рядки) % col_name - назви критеріїв оптимальності (стовбці) % x_view - результат виведення: 1 - так; 0 - ні clear all; % - - - Введення початкових даних - - - % Матриця рішень містить оцінки ефективності (прибутку/втрат) для прийнятого рішення % в залежності від умов функціонування вимірювальної системи % Можливі варіанти рішень (рядки) та варіанти умов функціонування (стовбці) % Оцінки в умовних одиницях прибутку/втрат d=[-18 -20 -22 -4 -22 -26 -1 -23 -27 0 -25 -29]; % Найменування варіантів рішень (однакова довжина всіх рядків) dVar=['Щоденна перев. КВП '; 'Щотижнева перев. КВП';... 'Щомісячна перев. КВП'; 'Перев. КВП відсутня ']; % Найменування варіантів умов функціонування % вимірювальної системи (однакова довжина всіх рядків) dCrit=['КВП спр.'; 'КВП зб.п'; 'КВПне пр']; % Додатня оцінка вказує на прибуток (TypeEst=1) або на втрати (TypeEst=0) TypeEst=1; % Ймовірності появи j-ї умови функціонування вимірювальної системи q=[1/3 1/3 1/3]; % Ваговий коефіцієнт для критерію Гурвіца C=0.5; % Ступінь довіри до розподілу ймовірності v=0.9; % Оцінка допустимого риску для BL(MM)-критерію EpsDop=0.5; % - - - Початкові дані для вирішення задачі ситуаційної невизначеності - - - fprintf(1,'\n%s\n', 'Лабораторна робота № 6 ТССА'); fprintf(1,'%s\n\n', 'РОЗКРИТТЯ СИТУАЦІЙНОЇ НЕВИЗНАЧЕНОСТІ В ЗАДАЧАХ СИСТЕМНОГО АНАЛІЗУ'); view_estimation(d, 'Матриця рішень', dVar, dCrit); if TypeEst==1 fprintf(1,'%s\n', 'Оцінка вказує на прибуток'); else fprintf(1,'%s\n', 'Оцінка вказує на втрати'); end; fprintf(1,'%s %4.2f %4.2f %4.2f %4.2f %4.2f %4.2f', ... 'Ймовірності появи j-ї умови функ. вим. системи', q(:)); fprintf(1,'\n'); fprintf(1,'%s%4.2f\n', 'Ваговий коефіцієнт для критерію Гурвіца ', C); fprintf(1,'%s%4.2f\n', 'Ступінь довіри до розподілу ймовірності ', v); fprintf(1,'%s%4.2f\n\n', 'Оцінка допустимого риску для BL(MM)-критерію ', EpsDop); % - - - Мінімаксний (максімінний) критерій Вальда - - - fprintf(1,'%s\n', '- - - Мінімаксний (максімінний) критерій Вальда - - -'); if TypeEst==1 dr=min(d')'; [drmax,i]=max(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmax=%4.2f - значення корисності рішення',drmax)) else dr=max(d')'; [drmin,i]=min(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmin=%4.2f - значення корисності рішення',drmin)) end; fprintf(1,'\n'); % - - - Критерій Байеса-Лапласа - - - fprintf(1,'%s\n', '- - - Критерій Байеса-Лапласа - - -'); if TypeEst==1 dr=d*q'; [drmax,i]=max(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmax=%4.2f - значення корисності рішення',drmax)) else dr=d*q'; [drmin,i]=min(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmin=%4.2f - значення корисності рішення',drmin)) end; fprintf(1,'\n'); % - - - Критерій Сэвіджа - - - fprintf(1,'%s\n', '- - - Критерій Сэвіджа - - -'); if TypeEst==1 % Знаходження матриці залишків a=max(d); m=size(d); m=m(1); a=repmat(a,m,1); aij=a-d; % Знаходження оптимального рішення dr=max(aij')'; [drmin,i]=min(dr); view_estimation(d, 'Матриця рішень', dVar, dCrit); view_estimation([aij dr], 'Матриця втрат ', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmin=%4.2f - мін. втрата (макс. дод. виграш)',drmin)) else a=min(d); m=size(d); m=m(1); a=repmat(a,m,1); aij=d-a; dr=min(aij')'; [drmax,i]=max(dr); view_estimation(d, 'Матриця рішень', dVar, dCrit); view_estimation([aij dr], 'Матриця втрат ', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmax=%4.2f - макс. виграш (мін. дод. втрати)',drmax)) end; fprintf(1,'\n'); % - - - Критерій Гурвіця - - - fprintf(1,'%s\n', '- - - Критерій Гурвіця - - -'); fprintf(1,'%s\n', '- - - Критерій Байеса-Лапласа - - -'); if TypeEst==1 % Знаходження minmax та maxmax рішення a=C*(min(d'))'; b=(1-C)*(max(d'))'; % Знаходження середньозважених результатів dr=(a+b); [drmax,i]=max(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmax=%4.2f - значення корисності рішення',drmax)) else a=C*(max(d'))'; b=(1-C)*(min(d'))'; dr=(a+b); [drmin,i]=min(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmin=%4.2f - значення корисності рішення',drmin)) end; fprintf(1,'\n'); % - - - Критерій Ходжа-Лемана - - - fprintf(1,'%s\n', '- - - Критерій Ходжа-Лемана - - -'); if TypeEst==1 % Знаходження рішення по Ходжа-Леману a=d*q'.*v; % Знаходження minmax рішення b=(min(d').*(1-v))'; % Знаходження результату рішення dr=a+b; [drmax,i]=max(dr'); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmax=%4.2f - значення корисності рішення',drmax)) else a=d*q'.*v; b=(max(d').*(1-v))'; dr=a+b; [drmin,i]=min(dr'); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmin=%4.2f - значення корисності рішення',drmin)) end; fprintf(1,'\n'); % - - - Критерій Гермейера - - - fprintf(1,'%s\n', '- - - Критерій Гермейера - - -'); if TypeEst==1 m=size(d); m=m(1); q1=repmat(q,m,1); d=d.*q1; dr=min(d')'; [drmax,i]=max(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmax=%4.2f - значення корисності рішення',drmax)) else m=size(d); m=m(1); q1=repmat(q,m,1); d=d.*q1; dr=max(d')'; [drmin,i]=min(dr); view_estimation([d dr], 'Матриця рішень', dVar, [dCrit; 'Ціл функ']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmin=%4.2f - значення корисності рішення',drmin)) end; fprintf(1,'\n'); % - - - BL(MM)-критерій - - - if TypeEst==1 fprintf(1,'%s\n', '- - - BL(MM)-критерій - - -'); % Знаходження рішення по BL критерію a=d*q'; % Знаходження di0j0 b=min(d'); [di0j0,i]=max(b'); % Знаходження c=di0j0-mindij m=size(d); m=m(1); q=repmat(di0j0,m,1); c=q-b'; % Знаходження t=maxdij t=max(d')'; % Знаходження f=maxdij-maxdi0j v=d(i,:); g=max(v'); g=repmat(g,m,1); f=t-g; % Знаходження результату рішення k=EpsDop*abs(di0j0); I1=c<=k; I2=f>=c; p=I1&I2; y=min(a); for i=1:m if p(i)==1 r(i)=a(i); else r(i)=y; end end [drmax,i]=max(r'); view_estimation([d a c f], 'Матриця рішень', dVar, [dCrit; 'Матем оч'; 'ОЗ-мінРя'; 'МахР-Мах']); disp(sprintf('Рішення i=%g - %s',i,dVar(i,:))) disp(sprintf('drmax=%4.2f - значення корисності рішення',drmax)) end; fprintf(1,'\n');