def test_caseiter_to_caseset(self): cases = ListCaseIterator(self.caselist[3:]) cs = caseiter_to_caseset(cases) for case1,case2 in zip(cases, cs): self.assertTrue(case1 == case2) cssub = caseiter_to_caseset(cases, ['comp1.b','comp2.b','comp2.c+comp2.d']) for case1,case2 in zip(cases, cssub): self.assertTrue(set(case2.keys('in')).issubset(case1.keys('in'))) self.assertTrue(set(case2.keys('out')).issubset(case1.keys('out')))
def test_caseiter_to_caseset(self): cases = ListCaseIterator(self.caselist[3:]) cs = caseiter_to_caseset(cases) for case1, case2 in zip(cases, cs): self.assertTrue(case1 == case2) cssub = caseiter_to_caseset(cases, ["comp1.b", "comp2.b", "comp2.c+comp2.d"]) for case1, case2 in zip(cases, cssub): self.assertTrue(set(case2.keys("in")).issubset(case1.keys("in"))) self.assertTrue(set(case2.keys("out")).issubset(case1.keys("out")))
def test_caseiter_to_caseset(self): cases = ListCaseIterator(self.caselist[3:]) cs = caseiter_to_caseset(cases) for case1, case2 in zip(cases, cs): self.assertTrue(case1 == case2) cssub = caseiter_to_caseset(cases, ['comp1.b', 'comp2.b', 'comp2.c+comp2.d']) for case1, case2 in zip(cases, cssub): self.assertTrue(set(case2.keys('in')).issubset(case1.keys('in'))) self.assertTrue(set(case2.keys('out')).issubset(case1.keys('out')))
def execute(self): """Finds and removes pareto optimal points in the given case set. Returns a list of pareto optimal points. Smaller is better for all criteria. """ #convert stuff to caseSets if they are not case_sets = [] for ci in self.case_sets: if not isinstance(ci, CaseSet): case_sets.append(caseiter_to_caseset(ci)) else: case_sets.append(ci) y_list = [] if len(case_sets) > 1: case_set = case_sets[0].union(*case_sets[1:]) else: case_set = case_sets[0] criteria_count = len(self.criteria) try: # need to transpose the list of outputs y_list = zip(*[case_set[crit] for crit in self.criteria]) except KeyError: self.raise_exception( 'no cases provided had all of the outputs ' 'matching the provided criteria, %s' % self.criteria, ValueError) y_temp = list(y_list) self.dominated_set = CaseSet() self.pareto_set = CaseSet() #TODO: need a way to copy casesets for point1, case in zip(y_list, iter(case_set)): dominated = False for point2 in y_temp: if self._is_dominated(point1, point2): self.dominated_set.record(case) y_temp.remove(point1) dominated = True break if not dominated: self.pareto_set.record(case)
def execute(self): """Finds and removes pareto optimal points in the given case set. Returns a list of pareto optimal points. Smaller is better for all criteria. """ #convert stuff to caseSets if they are not case_sets = [] for ci in self.case_sets: if not isinstance(ci,CaseSet): case_sets.append(caseiter_to_caseset(ci)) else: case_sets.append(ci) y_list = [] if len(case_sets) > 1: case_set = case_sets[0].union(*case_sets[1:]) else: case_set = case_sets[0] criteria_count = len(self.criteria) try: # need to transpose the list of outputs y_list = zip(*[case_set[crit] for crit in self.criteria]) except KeyError: self.raise_exception('no cases provided had all of the outputs ' 'matching the provided criteria, %s'%self.criteria, ValueError) y_temp = list(y_list) self.dominated_set = CaseSet() self.pareto_set = CaseSet() #TODO: need a way to copy casesets for point1, case in zip(y_list, iter(case_set)): dominated = False for point2 in y_temp: if self._is_dominated(point1, point2): self.dominated_set.record(case) y_temp.remove(point1) dominated = True break if not dominated: self.pareto_set.record(case)