Professional Documents
Culture Documents
Lab 3
Lab 3
Ім'я: Андрій
Група: КН-406
Варіант: 2
Дата захисту: 14.10.2022р.
Кафедра: САПР
Дисципліна: Теорія прийняття рішень
Перевірив: Андрущак Н.А.
ЗВІТ
до лабораторної роботи №5
на тему "Прийняття колективних рішень "
Ручне виконання:
Метод Борда.
У методі Борда виборець виставляє кожному кандидатові ту кількість балів, яку хоче. Найбільш
прийнятний кандидат буде мати максимальну оцінку, а найменш прийнятний – 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)];
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);
Висновок: під час виконання лабораторної роботи я одержав практичні навички використання
різних методів колективного голосування для рішення проблем. Провів розрахунок для методів
колективного голосування Борда і Кондорсе, описав порядок виконання роботи і вказав
переможців за кожним методом. Реалізував програмне забезпечення, розв’язує дану задачу.