- •Вступ Лабораторна робота № 1-2.
- •Лабораторна робота № 3-4.
- •Лабораторна робота №5-6.
- •Короткі теоретичні відомості.
- •1. Норма модуля корисності
- •2. Норма ризику
- •3. Кутова норма корисності
- •Норма модуля корисності.
- •Норма ризику
- •3. Кутова норма корисності
- •Додаток завдання для лабораторних занять та виконання самостійної роботи
- •1. Варіанти задачі прийняття рішення
- •2. Варіанти ймовірностей задачі прийняття рішення
- •Список літератури
Лабораторна робота № 3-4.
Тема: Агреговані методи прийняття рішень.
Мета: Ознайомитися із агрегованими методами прийняття рішень.
Завдання (вибирається згідно варіанту виданого викладачем):
Знайти оптимальний варіант прийняття рішення.
Альтернатива 1 3.110 1.660 0.600 0.920
Альтернатива 2 1.650 3.510 0.780 2.570
Альтернатива 3 0.600 0.780 1.870 1.650
Імовірність |
0,218 |
0,362 |
0,247 |
0,173 |
Вимоги до оформлення звіту:
Тема лабораторної роботи
Мета лабораторної роботи
Теоретичні відомості
Алгоритм описаних методів
Програмний продукт
Результати роботи створеного програмного продукту
Хід роботи.
1. При переслідуванні кількох цілей прийняття рішення використання тільки одного критерію є неприйнятним. У таких випадках слід застосовувати засоби приведення багатокритеріальності задачі до однокритеріальності через введення цільової функції.
2. Адитивний метод.
Для адитивного методу наперед повинні бути задані вагові коефіцієнти кожного вибору в різних станах системи. Обчислення здійснюються за формулою:
;
i,j=1,2…m;
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
|
|
1 |
3,11 |
1,66 |
0,66 |
0,92 |
|
|
2 |
1,65 |
3,51 |
0,78 |
2,57 |
|
|
3 |
0,60 |
0,78 |
1,87 |
1,65 |
|
|
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
Suma |
Ka |
1 |
0,68 |
0,60 |
0,16 |
0,16 |
1,60 |
2,27 |
2 |
0,36 |
1,27 |
0,19 |
0,44 |
2,27 |
|
3 |
0,13 |
0,28 |
0,46 |
0,29 |
1,16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.Мультиплікативний метод.
Критерій мультиплікативного методу здійснюється за формулою:
,
i=1,2…m.
Мультиплікативний метод |
||||||
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
|
|
1 |
3,11 |
1,66 |
0,66 |
0,92 |
|
|
2 |
1,65 |
3,51 |
0,78 |
2,57 |
|
|
3 |
0,60 |
0,78 |
1,87 |
1,65 |
|
|
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
sum |
Km |
1 |
1,28 |
1,20 |
0,90 |
0,99 |
5,65 |
5,92 |
2 |
1,12 |
1,58 |
0,94 |
1,18 |
5,92 |
|
3 |
0,89 |
0,91 |
1,17 |
1,09 |
4,96 |
|
4. Метод мінімаксу.
Критерій мінімаксу визначається за допомогою формули:
,
і=1,2…n, j=1,2…m;
Метод мінімаксу |
||||||
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
max g ij |
|
1 |
3,11 |
1,66 |
0,66 |
0,92 |
3,11 |
|
2 |
1,65 |
3,51 |
0,78 |
2,57 |
3,51 |
|
3 |
0,60 |
0,78 |
1,87 |
1,65 |
1,87 |
|
max |
3,11 |
3,51 |
1,87 |
2,57 |
|
|
Матриця ризиків |
||||
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
1 |
0,00 |
1,45 |
2,45 |
2,19 |
2 |
1,86 |
0,00 |
2,73 |
0,94 |
3 |
1,27 |
1,09 |
0,00 |
0,22 |
|
|
|
|
|
Rij’ |
|
|
||||
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
maxj |
min |
1 |
0,00 |
0,41 |
1,31 |
0,85 |
1,31 |
0,41 |
2 |
0,60 |
0,00 |
1,46 |
0,37 |
1,46 |
|
3 |
0,41 |
0,31 |
0,00 |
0,09 |
0,41 |
|
5. Метод мінімальної відстані.
Критерій методу мінімальної відстані шукають за формулою:
,
де i=1,2..m,
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
1 |
3,11 |
1,66 |
0,66 |
0,92 |
2 |
1,65 |
3,51 |
0,78 |
2,57 |
3 |
0,60 |
0,78 |
1,87 |
1,65 |
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
корінь |
min |
1 |
0,00 |
2,10 |
6,00 |
4,80 |
3,59 |
1,69 |
2 |
3,46 |
0,00 |
7,45 |
0,88 |
3,43 |
|
3 |
1,61 |
1,19 |
0,00 |
0,05 |
1,69 |
|
6.Метод кращої суми місць.
У методі кращої суми місць використовується матриця місць альтернатив. Обчислення проводяться з номерами місць альтернатив для кожного вибору системи. У випадку однакових корисностей одного стану замість номерів місць записується середнє значення цих номерів. Найкориснішою альтернативою згідно цього методу вважається альтернатива з найбільшою сумою місць.
Метод кращої суми місць |
||||
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
1 |
3,11 |
1,66 |
0,66 |
0,92 |
2 |
1,65 |
3,51 |
0,78 |
2,57 |
3 |
0,60 |
0,78 |
1,87 |
1,65 |
Матриця місць альтернатив |
|
|
||||
Порядок Альтернатива |
Вибір1 |
Вибір 2 |
Вибір3 |
Вибір 4 |
Сума альтернатив |
max |
1 |
3 |
2 |
1 |
1 |
7 |
10 |
2 |
2 |
3 |
2 |
3 |
10 |
|
3 |
1 |
1 |
3 |
2 |
7 |
|
Виконання:
На основі описаних алгоритмах створений програмний продукт, який виконує обрахунок за допомогою агрегованих методів.
…
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
double a[4],b[4],c[4],p[4],m[3],M;
double f(double h[],int n);
int i;
m[0]=0;
m[1]=0;
m[2]=0;
a[0]=Convert::ToDouble(textBox2->Text);
a[1]=Convert::ToDouble(textBox3->Text);
a[2]=Convert::ToDouble(textBox4->Text);
a[3]=Convert::ToDouble(textBox5->Text);
b[0]=Convert::ToDouble(textBox8->Text);
b[1]=Convert::ToDouble(textBox9->Text);
b[2]=Convert::ToDouble(textBox10->Text);
b[3]=Convert::ToDouble(textBox11->Text);
c[0]=Convert::ToDouble(textBox14->Text);
c[1]=Convert::ToDouble(textBox15->Text);
c[2]=Convert::ToDouble(textBox16->Text);
c[3]=Convert::ToDouble(textBox17->Text);
p[0]=Convert::ToDouble(textBox19->Text);
p[1]=Convert::ToDouble(textBox20->Text);
p[2]=Convert::ToDouble(textBox21->Text);
p[3]=Convert::ToDouble(textBox22->Text);
for(i=0;i<4;i++)
{
a[i]=a[i]*p[i];
b[i]=b[i]*p[i];
c[i]=c[i]*p[i];
}
for(i=0;i<4;i++)
m[0]=m[0]+a[i];
for(i=0;i<4;i++)
m[1]=m[1]+b[i];
for(i=0;i<4;i++)
m[2]=m[2]+c[i];
M=f(m,3);
textBox6->Text=textBox6->Text+Convert::ToDouble(m[0]);
textBox12->Text=textBox12->Text+Convert::ToDouble(m[1]);
textBox18->Text=textBox18->Text+Convert::ToDouble(m[2]);
textBox23->Text=textBox23->Text+Convert::ToDouble(M);
}
private: System::Void button6_Click(System::Object^ sender, System::EventArgs^ e) {
this->Close();
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
double a[4],b[4],c[4],p[4],m[3],M;
double f(double h[],int n);
int i;
m[0]=1;
m[1]=1;
m[2]=1;
a[0]=Convert::ToDouble(textBox2->Text);
a[1]=Convert::ToDouble(textBox3->Text);
a[2]=Convert::ToDouble(textBox4->Text);
a[3]=Convert::ToDouble(textBox5->Text);
b[0]=Convert::ToDouble(textBox8->Text);
b[1]=Convert::ToDouble(textBox9->Text);
b[2]=Convert::ToDouble(textBox10->Text);
b[3]=Convert::ToDouble(textBox11->Text);
c[0]=Convert::ToDouble(textBox14->Text);
c[1]=Convert::ToDouble(textBox15->Text);
c[2]=Convert::ToDouble(textBox16->Text);
c[3]=Convert::ToDouble(textBox17->Text);
p[0]=Convert::ToDouble(textBox19->Text);
p[1]=Convert::ToDouble(textBox20->Text);
p[2]=Convert::ToDouble(textBox21->Text);
p[3]=Convert::ToDouble(textBox22->Text);
for(i=0;i<4;i++)
{
a[i]=pow(a[i],p[i]);
b[i]=pow(b[i],p[i]);
c[i]=pow(c[i],p[i]);
}
for(i=0;i<4;i++)
m[0]=m[0]*a[i];
for(i=0;i<4;i++)
m[1]=m[1]*b[i];
for(i=0;i<4;i++)
m[2]=m[2]*c[i];
M=f(m,3);
textBox6->Text=textBox6->Text+Convert::ToDouble(m[0]);
textBox12->Text=textBox12->Text+Convert::ToDouble(m[1]);
textBox18->Text=textBox18->Text+Convert::ToDouble(m[2]);
textBox23->Text=textBox23->Text+Convert::ToDouble(M);
}
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
double a[4],b[4],c[4],m[4],M,k[4];
double f(double h[],int n);
double g(double h[],int n);
int i,j;
a[0]=Convert::ToDouble(textBox2->Text);
a[1]=Convert::ToDouble(textBox3->Text);
a[2]=Convert::ToDouble(textBox4->Text);
a[3]=Convert::ToDouble(textBox5->Text);
b[0]=Convert::ToDouble(textBox8->Text);
b[1]=Convert::ToDouble(textBox9->Text);
b[2]=Convert::ToDouble(textBox10->Text);
b[3]=Convert::ToDouble(textBox11->Text);
c[0]=Convert::ToDouble(textBox14->Text);
c[1]=Convert::ToDouble(textBox15->Text);
c[2]=Convert::ToDouble(textBox16->Text);
c[3]=Convert::ToDouble(textBox17->Text);
m[0]=a[0];
m[1]=b[0];
m[2]=c[0];
k[0]=f(m,3);
m[0]=a[1];
m[1]=b[1];
m[2]=c[1];
k[1]=f(m,3);
m[0]=a[2];
m[1]=b[2];
m[3]=c[2];
k[2]=f(m,3);
m[0]=a[3];
m[1]=b[3];
m[2]=c[3];
k[3]=f(m,3);
for(i=0;i<4;i++)
{
a[i]=k[i]-a[i];
b[i]=k[i]-b[i];
c[i]=k[i]-c[i];
}
for(i=0;i<4;i++)
a[i]=a[i]/m[i];
for(i=0;i<4;i++)
b[i]=b[i]/m[i];
for(i=0;i<4;i++)
c[i]=c[i]/m[i];
m[0]=f(a,4);
m[1]=f(b,4);
m[2]=f(c,4);
M=g(m,3);
textBox6->Text=textBox6->Text+Convert::ToDouble(m[0]);
textBox12->Text=textBox12->Text+Convert::ToDouble(m[1]);
textBox18->Text=textBox18->Text+Convert::ToDouble(m[2]);
textBox23->Text=textBox23->Text+Convert::ToDouble(M);
}
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
double a[4],b[4],c[4],m[4],M,k[4];
double f(double h[],int n);
double g(double h[],int n);
int i,j;
a[0]=Convert::ToDouble(textBox2->Text);
a[1]=Convert::ToDouble(textBox3->Text);
a[2]=Convert::ToDouble(textBox4->Text);
a[3]=Convert::ToDouble(textBox5->Text);
b[0]=Convert::ToDouble(textBox8->Text);
b[1]=Convert::ToDouble(textBox9->Text);
b[2]=Convert::ToDouble(textBox10->Text);
b[3]=Convert::ToDouble(textBox11->Text);
c[0]=Convert::ToDouble(textBox14->Text);
c[1]=Convert::ToDouble(textBox15->Text);
c[2]=Convert::ToDouble(textBox16->Text);
c[3]=Convert::ToDouble(textBox17->Text);
m[0]=a[0];
m[1]=b[0];
m[2]=c[0];
k[0]=f(m,3);
m[0]=a[1];
m[1]=b[1];
m[2]=c[1];
k[1]=f(m,3);
m[0]=a[2];
m[1]=b[2];
m[2]=c[2];
k[2]=f(m,3);
m[0]=a[3];
m[1]=b[3];
m[2]=c[3];
k[3]=f(m,3);
for(i=0;i<4;i++)
{
a[i]=k[i]-a[i];
b[i]=k[i]-b[i];
c[i]=k[i]-c[i];
}
for(i=0;i<4;i++)
m[i]=sqrt(a[i]*a[i]+b[i]*b[i]+c[i]*c[i]);
M=g(m,4);
textBox23->Text=textBox23->Text+Convert::ToDouble(M);
}
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) {
double a[4],b[4],c[4],m[3],M;
double f(double h[],int n);
double g(double h[],int n);
int i,j;
a[0]=Convert::ToDouble(textBox2->Text);
a[1]=Convert::ToDouble(textBox3->Text);
a[2]=Convert::ToDouble(textBox4->Text);
a[3]=Convert::ToDouble(textBox5->Text);
b[0]=Convert::ToDouble(textBox8->Text);
b[1]=Convert::ToDouble(textBox9->Text);
b[2]=Convert::ToDouble(textBox10->Text);
b[3]=Convert::ToDouble(textBox11->Text);
c[0]=Convert::ToDouble(textBox14->Text);
c[1]=Convert::ToDouble(textBox15->Text);
c[2]=Convert::ToDouble(textBox16->Text);
c[3]=Convert::ToDouble(textBox17->Text);
m[0]=0;
m[1]=0;
m[2]=0;
for(i=0;i<4;i++)
{
if((a[i]>b[i])&&(a[i]>c[i])&&(b[i]<c[i]))
{
a[i]=3;
b[i]=1;
c[i]=2;
}
else
if((a[i]<b[i])&&(a[i]>c[i]))
{
b[i]=3;
a[i]=2;
c[i]=1;
}
else
if((a[i]>b[i])&&(a[i]>c[i])&&(b[i]>c[i]))
{
a[i]=3;
b[i]=2;
c[i]=1;
}
else
if((a[i]>b[i])&&(a[i]<c[i]))
{
c[i]=3;
a[i]=2;
b[i]=1;
}
else
if((a[i]<b[i])&&(a[i]<c[i])&&(b[i]<c[i]))
{
c[i]=3;
b[i]=2;
a[i]=1;
}
else
if((a[i]<b[i])&&(a[i]<c[i])&&(b[i]>c[i]))
{
c[i]=2;
b[i]=3;
a[i]=1;
}
}
for(i=0;i<4;i++)
{
m[0]=m[0]+a[i];
m[1]=m[1]+b[i];
m[2]=m[2]+c[i];
}
M=f(m,3);
textBox6->Text=textBox6->Text+Convert::ToDouble(m[0]);
textBox12->Text=textBox12->Text+Convert::ToDouble(m[1]);
textBox18->Text=textBox18->Text+Convert::ToDouble(m[2]);
textBox23->Text=textBox23->Text+Convert::ToDouble(M);
}
};
}
double f(double h[],int n)
{
double max;
int i;
max=h[0];
for(i=0;i<n;i++)
{
if(h[i]>max)
max=h[i];
}
return max;
}
double g(double h[],int n)
{
double min;
int i;
min=h[0];
for(i=0;i<n;i++)
{
if(h[i]<min)
min=h[i];
}
return min;
}
Результати роботи програми:
Висновок: виконуючи лабораторну роботу, студент ознайомився з агрегованих методів прийняття рішень: адитивний метод, мультиплікативний метод, метод мінімаксу, метод мінімальної відстані та метод кращої суми місць.
