Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Прізвище: Білянський

Ім'я: Андрій
Група: КН-406
Варіант: 2
Дата захисту: 14.10.2022р.

Кафедра: САПР
Дисципліна: Теорія прийняття рішень
Перевірив: Андрущак Н.А.

ЗВІТ
до лабораторної роботи №5
на тему "Прийняття колективних рішень "

Мета роботи: одержання практичних навичок використання різних методів колективного


голосування для рішення проблем.
Індивідуальне завдання:
Задача.
Визначити який кандидат виграє А,Б,С по методу Кондорсе і по методу Борда для заданого
розподілу голосів?

Порядок вирішення завдання:


1) Провести розрахунок для кожного методу колективного голосовування.
2) Описати порядок виконання роботи і вказати переможці за кожним методом
3) Реалізувати програмне забезпечення, яке б розв'язувало дану задачу. Вибір мови
програмування не має значення. Обов'язково: дані мають зчитуватись з файлу і виводитись
у табличній формі.
4) Скласти звіт про виконання роботи

Ручне виконання:
Метод Борда.
У методі Борда виборець виставляє кожному кандидатові ту кількість балів, яку хоче. Найбільш
прийнятний кандидат буде мати максимальну оцінку, а найменш прийнятний – 0 балів.
Переможцем буде той кандидат, який отримає максимальну кількість балів.

А = 24 ∗ 2 + 23 ∗ 2 + 26 ∗ 1 + 6 ∗ 0 + 12 ∗ 1 + 19 ∗ 0 = 132
Б = 24 ∗ 1 + 23 ∗ 0 + 26 ∗ 2 + 6 ∗ 2 + 12 ∗ 0 + 19 ∗ 1 = 107
С = 24 ∗ 0 + 23 ∗ 1 + 26 ∗ 0 + 6 ∗ 1 + 12 ∗ 2 + 19 ∗ 2 = 91
Отже, переможцем є кандидат А.
1
Метод Кондорсе
У методі Кондорсе виборець має тільки один голос і віддає його за найкращу альтернативу.
Переможцем буде той кандидат, який набере найбільшу кількість балів, порівнюючи з іншими
кандидатами.

𝑻(А > Б) = 𝟐𝟒 + 𝟐𝟑 + 𝟏𝟐 = 𝟓𝟗
𝑇(Б > А) = 26 + 6 + 19 = 51

𝑻(Б > С) = 𝟐𝟒 + 𝟐𝟔 + 𝟔 = 𝟓𝟔
𝑇(С > Б) = 23 + 12 + 19 = 54

𝑻(А > С) = 𝟐𝟒 + 𝟐𝟑 + 𝟐𝟔 = 𝟕𝟑
𝑇(С > А) = 6 + 12 + 19 = 37

Кандидат А набрав більше балів, ніж кандидат Б і С, отже, переможцем є кандидат А.

Код програми:
const fs = require('fs');

try {
const data = fs
.readFileSync('file.txt', 'utf8')
.split('\r\n')
.map((e) => e.split(' '));

console.log('Борда');
Borda(data);
console.log('\nКондорсе');
Kondrose(data);
} catch (err) {
console.error(err);
}

function Borda(data) {
const votes = data.map((e) => +e[0]);
const candidatesOrder = data.map((e) => e[1].split('.'));
let candidates = Object.assign(
{},
...[...new Set(...candidatesOrder)].map((e) => ({ [e]: 0 }))
);

votes.forEach((vote, i) => {
let _candidates = candidatesOrder[i];

_candidates.forEach((candidate) => {
const index = _candidates.reverse().indexOf(candidate);
candidates[candidate] += vote * index;
});

2
});

console.log(candidates);
const max = Math.max(...Object.values(candidates));
const index = Object.values(candidates).indexOf(max);

console.log(
`Переміг кандидат ${Object.keys(candidates)[index]} із такою кількістю
голосів: ${max}`
);
}

function Kondrose(data) {
const votes = data.map((e) => +e[0]);
const candidates = data.map((e) => e[1].split('.'));
let candidatesList = [...new Set(...candidates)];

const votes1 = { AB: 0, BA: 0, BC: 0, CB: 0, AC: 0, CA: 0 };

votes.forEach((vote, i) => {
let _candidates = candidates[i];

if (_candidates.indexOf(candidatesList[0]) <
_candidates.indexOf(candidatesList[1])) {
votes1.AB += vote;
} else {
votes1.BA += vote;
}

if (_candidates.indexOf(candidatesList[1]) <
_candidates.indexOf(candidatesList[2])) {
votes1.BC += vote;
} else {
votes1.CB += vote;
}

if (_candidates.indexOf(candidatesList[0]) <
_candidates.indexOf(candidatesList[2])) {
votes1.AC += vote;
} else {
votes1.CA += vote;
}
});

console.log(votes1);

const max = Math.max(...Object.values(votes1));


const index = Object.values(votes1).indexOf(max);
3
console.log(
`Переміг кандидат ${Object.keys(votes1)[index][0]} із такою кількістю голосів:
${max}`
);
}

Результати виконання програми:

Висновок: під час виконання лабораторної роботи я одержав практичні навички використання
різних методів колективного голосування для рішення проблем. Провів розрахунок для методів
колективного голосування Борда і Кондорсе, описав порядок виконання роботи і вказав
переможців за кожним методом. Реалізував програмне забезпечення, розв’язує дану задачу.

You might also like