def test_dom1(self): u = np.matrix([[38], [500], [500]]) v = np.matrix([[39], [600], [600]]) self.assertTrue(mooproblem.dom1(u, v)) w = np.matrix([[38], [500], [450]]) self.assertFalse(mooproblem.dom1(u, w)) self.assertFalse(mooproblem.dom1(u, u))
def fnds(setp): # This module performs the fast-non-dominated-sort described in Deb(2002). # To run this module, enable the following line: # from mop import dom numsol = len(setp) fronts = [] sp = [] fhold = [] nps = [] for p in range(numsol): shold = [] nump = 0 for q in range(numsol): if setp[p] != setp[q]: if mop.dom1(setp[p].getfits(), setp[q].getfits()): shold.append(setp[q]) if mop.dom1(setp[q].getfits(), setp[p].getfits()): nump += 1 sp.append(shold) nps.append(nump) if nump == 0: fhold.append(setp[p]) setp[p].updaterank(1) fronts.append(fhold) # Pareto set i = 0 while fronts[i] != []: q = [] for j in range(numsol): if setp[j] in fronts[i]: for k in range(numsol): if setp[k] in sp[j]: nps[k] -= 1 if nps[k] == 0: setp[k].updaterank(i + 2) q.append(setp[k]) fronts.append(q) i += 1 return setp, fronts
def finalapproxset(self): # This function finds the final approximate set. numsol = len(self.archive) ndset = [] keys = [k for k, v in self.archive.items()] for p in range(numsol): np = 0 u = self.archive.get(keys[p]) for q in range(numsol): v = self.archive.get(keys[q]) if u != v: # If v dominates u, increase domination count if mop.dom1(v.getfits(), u.getfits()): np += 1 if np == 0: ndset.append(u) return ndset