Добавление условий в оператор if - PullRequest
0 голосов
/ 09 мая 2020

Я разрабатываю расписание соревнований, но придерживаюсь условий.

Я выдвинул 5 условий, в соответствии с которыми соревнования должны им соответствовать.

Я должен делать жадно алгоритм.

Я придумал это до сих пор:

while len(gamesgreedy) != len(games):
    v1 = CompetitionSchedule.violation_team_round_multiple(
        self, gamesreedy, start_index)
    v2 = CompetitionSchedule.violation_bye_per_team(
        self, gamesgreedy, start_index)
    v3 = CompetitionSchedule.violation_double_city(
        self, gamesgreedy, start_index)
    v4 = CompetitionSchedule.violations_double_match(self, gamesgreedy,)
    v5 = CompetitionSchedule.violations_home_away(
        self, gamesgreedy, start_index)

    for x in gamestup:
        gamesgreedy.append(x) if sum(v1, v2, v3, v3, v4, v5) <

У меня есть пул всех возможных совпадений, и я хочу добавить одно совпадение с наименьшим количеством нарушений и так далее, пока я не получу полное расписание.

Нарушения целые числа. Итак, сначала gamesgreedy - это пустой список, а затем добавьте совпадение 1 и проверьте, приносит ли это наименьшее количество нарушений по сравнению со всеми другими совпадениями.

После этого мне придется повторить этот шаг где функции теперь проверяют gamesgreedy с совпадением 1 и совпадением 2 в нем, и так далее.

1 Ответ

0 голосов
/ 10 мая 2020

Переместить вычисление в функцию.

def calculate_violations(self_, gamesgreedy, start_index):
    v1 = CompetitionSchedule.violation_team_round_multiple(
        self_, gamesgreedy, start_index)
    v2 = CompetitionSchedule.violation_bye_per_team(
        self_, gamesgreedy, start_index)
    v3 = CompetitionSchedule.violation_double_city(
        self_, gamesgreedy, start_index)
    v4 = CompetitionSchedule.violations_double_match(
        self_, gamesgreedy, start_index)
    v5 = CompetitionSchedule.violations_home_away(
        self_, gamesgreedy, start_index)
    return sum([v1, v2, v3, v4, v5])

Пока вы не обработаете все совпадения, сопоставьте каждое оставшееся совпадение с количеством нарушений, выберите совпадение с минимальным количеством нарушений и используйте его на следующем шаге.

gamesgreedy = []
while len(gamesgreedy) < len(games):
    match_violations = {
        match: calculate_violations(self, gamesgreedy + [match], start_index)
        for match in games if match not in gamesgreedy}
    best_match = min(match_violations, key=lambda m: match_violations[m])
    gamesgreedy.append(best_match)

Переменная gamesgreedy затем содержит совпадения в оптимальном порядке.

Обратите внимание, что это только лучшее предположение, учитывая неясную цель вопроса.

...