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