def allocate(self, avoid_conflicts=True): p = PanelMaker() panels = p.form_panels(self.adjudicators, len(self.debates)) assert len(self.debates) <= len(panels) self.debates.sort(key=lambda d: self.get_debate_energy(d), reverse=True) panels.sort(key=lambda p: p.get_energy(), reverse=True) self.pairings = list(zip(self.debates, panels)) if avoid_conflicts: for i, (debate, panel) in enumerate(self.pairings): if panel.conflicts(debate): j = self.search_swap(i, list(range(i, 0, -1))) if j is None: j = self.search_swap(i, list(range(i+1, len(panels)))) from adjallocation.allocation import AdjudicatorAllocation allocation = [] for debate, panel in self.pairings: a = AdjudicatorAllocation(debate) a.chair = panel[0] a.panel = panel[1:] allocation.append(a) return allocation
def allocate(self, avoid_conflicts=True): p = PanelMaker() panels = p.form_panels(self.adjudicators, len(self.debates)) assert len(self.debates) <= len(panels) self.debates.sort(key=lambda d: self.get_debate_energy(d), reverse=True) panels.sort(key=lambda p: p.get_energy(), reverse=True) self.pairings = list(zip(self.debates, panels)) if avoid_conflicts: for i, (debate, panel) in enumerate(self.pairings): if panel.conflicts(debate): j = self.search_swap(i, list(range(i, 0, -1))) if j is None: j = self.search_swap(i, list(range(i + 1, len(panels)))) from adjallocation.allocation import AdjudicatorAllocation allocation = [] for debate, panel in self.pairings: a = AdjudicatorAllocation(debate) a.chair = panel[0] a.panel = panel[1:] allocation.append(a) return allocation