Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ №1 МОДеС.docx
Скачиваний:
3
Добавлен:
04.09.2019
Размер:
129.54 Кб
Скачать

Додаток а

Програма, реалізована на 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