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')))
Exemple #2
0
 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")))
Exemple #3
0
 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)