向 if 语句添加条件

Adding conditions to an if statement

我正在设计比赛时间表,但我受困于条件。

我提出了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,依此类推。

将评估移至函数。

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])

在处理完所有匹配项之前,将每个剩余匹配项映射到违规次数,select 违规次数最少的匹配项,并在下一步中使用它。

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 变量然后包含最佳顺序的匹配项。

请注意,考虑到问题不明确 objective,这只是最佳猜测。