# Данные рангов экспертов (каждый подсписок - оценки одного эксперта)
ranks = [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[1, 10, 2, 3, 4, 5, 7, 6, 8, 9],
[6, 1, 10, 2, 4, 7, 9, 3, 5, 8],
[6, 3, 10, 5, 1, 8, 9, 2, 4, 7],
[3, 1, 9, 2, 10, 4, 6, 5, 7, 8],
[1, 2, 6, 3, 4, 5, 8, 7, 9, 10],
[1, 2, 5, 4, 3, 6, 8, 7, 9, 10],
[10, 8, 9, 6, 2, 5, 7, 1, 4, 3],
[2, 7, 9, 3, 6, 10, 5, 1, 4, 8],
[2, 8, 9, 3, 6, 10, 5, 1, 4, 7]
]
# Названия мессенджеров
messengers = {
1: "WhatsApp",
2: "WeChat",
3: "FB Messenger",
4: "Telegram",
5: "Snapchat",
6: "QQ",
7: "Line",
8: "Discord",
9: "Zalo",
10: "Momo"
}
num_messengers = len(messengers)
num_experts = len(ranks)
# 1. Суммарные ранги
total_ranks = {messengers[i+1]: 0 for i in range(num_messengers)}
for expert_ratings in ranks:
for i, rating in enumerate(expert_ratings):
total_ranks[messengers[i+1]] += rating
print("Суммарные ранги по мессенджерам:")
for messenger, total in total_ranks.items():
print(f"{messenger}: {total}")
# 2. Метод Кондорсе — создание матрицы парных сравнений
pairwise_matrix = [[0]*num_messengers for _ in range(num_messengers)]
for i in range(num_messengers):
for j in range(num_messengers):
if i == j:
continue
count = 0
for expert in ranks:
if expert[i] < expert[j]:
count += 1
pairwise_matrix[i][j] = count
print("\nМатрица парных сравнений (число экспертов, предпочитающих строку столбцу):")
header = "\t" + "\t".join(messengers[i+1] for i in range(num_messengers))
print(header)
for i in range(num_messengers):
row_name = messengers[i+1]
row = []
for j in range(num_messengers):
if i == j:
row.append("-")
else:
row.append(str(pairwise_matrix[i][j]))
print(f"{row_name}\t" + "\t".join(row))
# Дополнительное — таблица отношений в виде 0/1
relation_matrix = [['-' if i == j else 0 for j in range(num_messengers)] for i in range(num_messengers)]
for i in range(num_messengers):
for j in range(num_messengers):
if i == j:
continue
if pairwise_matrix[i][j] > pairwise_matrix[j][i]:
relation_matrix[i][j] = 1
else:
relation_matrix[i][j] = 0
print("\nТаблица отношений (0/1), где 1 — мессенджер строки побеждает у столбца:")
print(header)
for i in range(num_messengers):
row_name = messengers[i+1]
row = [str(relation_matrix[i][j]) for j in range(num_messengers)]
print(f"{row_name}\t" + "\t".join(row))
# Подсчет побед каждого мессенджера по Кондорсе
condorcet_wins = [0]*num_messengers
for i in range(num_messengers):
for j in range(num_messengers):
if i == j:
continue
if pairwise_matrix[i][j] > pairwise_matrix[j][i]:
condorcet_wins[i] += 1
max_wins = max(condorcet_wins)
condorcet_winners = [messengers[i+1] for i, wins in enumerate(condorcet_wins) if wins == max_wins]
print("\nКоличество побед в парных сравнениях по методу Кондорсе:")
for i in range(num_messengers):
print(f"{messengers[i+1]}: {condorcet_wins[i]}")
print(f"\nЛучший мессенджер по методу Кондорсе: {', '.join(condorcet_winners)} (побед в парах: {max_wins})")
# 3. Метод Борда
# Баллы = n - ранг + 1, где n — количество мессенджеров
borda_scores = {messengers[i+1]: 0 for i in range(num_messengers)}
for expert_ratings in ranks:
for i, rank in enumerate(expert_ratings):
score = num_messengers - rank + 1 # обратный ранг
borda_scores[messengers[i+1]] += score
print("\nБаллы по методу Борда:")
for messenger, score in borda_scores.items():
print(f"{messenger}: {score}")
max_borda = max(borda_scores.values())
borda_winners = [m for m, s in borda_scores.items() if s == max_borda]
print(f"\nЛучший мессенджер по методу Борда: {', '.join(borda_winners)} (баллов: {max_borda})")