Швейцарская система планирования для лиги пинг-понгаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Швейцарская система планирования для лиги пинг-понга

Сообщение Anonymous »

Швейцарский график. помощь! пожалуйста
Я работаю над планированием 8 витрин на этот год. У меня есть фреймы данных для каждой витрины с указанием ранга и конференции, откуда родом каждый игрок. На каждой витрине зарегистрировано разное количество игроков, но это всегда разное количество игроков. Бывший. 48, 20 игроков. Некоторые игроки могут участвовать в нескольких шоукейсах или во всех восьми.
Ранги никогда не меняются. Они устанавливаются в начале года.
В каждой витрине проводится 3 раунда, и все игроки должны сыграть по одной игре в каждом раунде. Игроки не могут играть друг с другом более одного раза в течение года и не могут играть с другим игроком из одной конференции. Матчи для игроков должны определяться по аналогичному рейтингу.
Я пытался использовать швейцарскую систему для планирования игр на Python, и я могу ее сгенерировать, но это не так. последовательным, поскольку не все противники совпадают в каждом раунде. Я считаю, что это потому, что у нас есть дополнительное ограничение, а именно «конференции», тогда как в обычной швейцарской системе оно ограничивается только «рангом». Система должна быть ограничена как «рангом», так и «конференцией».
Есть ли у кого-нибудь предложения по поводу каких-либо пакетов или типов алгоритмов, которые я мог бы использовать? Или если вы думаете, что есть лучший способ решить эту проблему.
Спасибо!!!
++++ Редактировать +++< /p>
Хорошо, если честно, я не уверен, в чем проблема, поэтому я просто включу первую часть:
Вот что я сделал:

Код: Выделить всё

class Player:
def __init__(self, name, rating, area):
self.name = name
self.rating = rating
self.area = area
self.games_played = 0
def optimize_pairings(players, pairings_history, round_num):
# Ensure players list contains only Player objects
if not all(isinstance(player, Player) for player in players):
raise ValueError("Invalid player objects in the players list.")

# Create a binary variable for each pair of players
pair_vars = pulp.LpVariable.dicts("Pair", ((p1, p2) for p1 in players for p2 in players if p1 != p2), cat='Binary')

# Create a PuLP minimization problem
prob = pulp.LpProblem("Pairing Optimization", pulp.LpMinimize)

# Objective: minimize the total rating difference between paired players
prob += pulp.lpSum(pair_vars[(p1, p2)] * abs(p1.rating - p2.rating) for p1 in players for p2 in players if p1 != p2)

# Add constraints
for p1 in players:
prob += pulp.lpSum(pair_vars[(p1, p2)] for p2 in players if p1 != p2) == 1  # Each player is paired with exactly one opponent

for p1 in players:
for p2 in players:
if p1 != p2:
prob += pair_vars[(p1, p2)] + pair_vars[(p2, p1)] 

Подробнее здесь: [url]https://stackoverflow.com/questions/78203281/swiss-scheduling-system-for-ping-pong-league[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»