
- •2.2 Обчислення для множини допустимих проектних рішень значень функцій корисності часткових критеріїв , .
- •2.3 Визначення на множині можливих рішень підмножини компромісних рішень .
- •2.4 Метод попереднього визначення наближеної області компромісів
- •Додаток а
- •//Це значення функції корисності, внесені в масив чисел з плаваючою комою
Додаток а
Програма, реалізована на Java, яка приймає рішення за методом попарних зрівнянь. Кількість можливих рішень у області компромісів залежить від встановленої поступки.
Код на Java:
import java.math.*;
public class compromiss {
/**
* @param args
*/import java.math.*;
import java.util.Scanner;
public class compromiss {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//Це значення функції корисності, внесені в масив чисел з плаваючою комою
float k1[] = {
0.637f,
0.792f,
0.997f,
0.123f,
0.666f,
0.827f,
0.993f,
0.884f,
0.441f,
0.457f,
0.860f,
0.039f,
0.064f,
0.626f,
0.296f,
0.777f,
0.631f,
0.428f,
0.427f,
0.549f,
0.100f};
float k2[] = {
0.523f,
0.614f,
0.010f,
0.263f,
0.450f,
0.744f,
0.566f,
0.887f,
0.188f,
0.199f,
0.826f,
0.358f,
0.394f,
0.802f,
0.268f,
0.593f,
0.367f,
0.985f,
0.214f,
0.935f,
0.684f};
float k3[] = {
0.682f,
0.046f,
0.117f,
0.504f,
0.367f,
0.898f,
0.603f,
0.116f,
0.177f,
0.055f,
0.237f,
0.324f,
0.725f,
0.216f,
0.555f,
0.366f,
0.798f,
0.120f,
0.768f,
0.004f,
0.753f};
System.out.println("Введите уступку:");
float Q = 0.0f;
Scanner scan = new Scanner(System.in);
Q = scan.nextFloat();
//Ініціалізуємо мітки «входить до області компромісів/не входить до //області компромісів»
int l = k1.length;
boolean compr[] = new boolean[l];
for(int i = 0;i < l;i++)
{compr[i] = true;}//З початку усі рішення входять до області //компромісів (значення true)
//Нижче ми реалізуємо алгоритм попарних зрівнянь
for(int i = 0;i < l;i++)
{
for(int k = 0;k < l;k++)
{
if((i != k) && (compr[k] == true) && (compr[i] == true))
{
if(k3[i] >= (k3[k] + Q))
{
compr[k] = false;
}
}
}
}
for(int i = 0;i < l;i++)
{
for(int k = 0;k < l;k++)
{
if((i != k) && (compr[k] == true) && (compr[i] == true))
{
if(k2[i] >= (k2[k] + Q))
{
compr[k] = false;
}
}
}
}
for(int i = 0;i < l;i++)
{
for(int k = 0;k < l;k++)
{
if((i != k) && (compr[k] == true) && (compr[i] == true))
{
if(k1[i] >= (k1[k] + Q))
{
compr[k] = false;
}
}
}
}
//Виводимо на екран результати прийняття рішень…
for(int i = 0;i < l;i++)
{
if(compr[i] == true)
{
System.out.println("Вариант №" + (i+1) + ": [" + k1[i] + ", " + k2[i] + ", " + k3[i] + "] -- Полезность варианта:" + (3*k3[i]+2*k2[i]+k1[i]) / 6);
//Заради більшої достовірності отриманих результатів обчислюємо та //виводимо на екран середню корисність кожного варіанту
//Обчислення відбувались за такою ф-лою: (3*<значення критерію №3> + 3*<значення критерію №2> + 3*<значення критерію №3>) / 6
//коефіцієнти були присвоєні для кожного критерію в залежності від їх //важливості (у даному випадку 3->2->1)
}
}}
Знімки екрану:
Рисунок 2.6 – Результати для поступки 0,2
Рисунок 2.7 – Результати для поступки 0,3
Рисунок 2.8 – Результати для поступки 0,4
Рисунок 2.9 – Результати для поступки 0,5