Esempio n. 1
0
def gale1(iter=1000, pop=1600, model=IPMDFC()):
    n_proc = int(1000.00 / iter)
    new = gale0(model, new=[], pop=int(pop / n_proc))
    while iter:
        iter -= 1
        new = gale0(model, new, pop=int(pop / n_proc))
    return new
Esempio n. 2
0
def runGALE(iterationsP, minBP, maxBP):
  from galeForModel import GALE  
  from galeForModel import distFromHellScore
  from modelForGALE import IPMDFC
  import utility 
  modelObj=IPMDFC()
  galeOutput = GALE(modelObj, iterationsP)
  #print("Final gale out put ", galeOutput) 
  for item in galeOutput: 
    print("item length is " , len(item))   
    print("item is ", item)
    objectivevals = modelObj.solve(item)
    print("objective values are ", objectivevals)
    fromHellScore = distFromHellScore(objectivevals)
    print("Distance from hell score is: ", fromHellScore)
    finalScore = utility.getNormalizedScoreForGale(minBP, maxBP, fromHellScore)
    print("Final score (after normalization ...)", finalScore)
Esempio n. 3
0
def runGALE(iterationsP, minBP, maxBP):
    from galeForModel import GALE
    from galeForModel import distFromHellScore
    from modelForGALE import IPMDFC
    import utility
    modelObj = IPMDFC()
    galeOutput = GALE(modelObj, iterationsP)
    #print("Final gale out put ", galeOutput)
    for item in galeOutput:
        print("item length is ", len(item))
        print("item is ", item)
        objectivevals = modelObj.solve(item)
        print("objective values are ", objectivevals)
        fromHellScore = distFromHellScore(objectivevals)
        print("Distance from hell score is: ", fromHellScore)
        finalScore = utility.getNormalizedScoreForGale(minBP, maxBP,
                                                       fromHellScore)
        print("Final score (after normalization ...)", finalScore)
Esempio n. 4
0
  for cc in collect: final.extend(cc)
  ret = gale0( modelObjP ,new=final,pop=len(final))
  #print('Time Taken: ', time()-t)
  # true = DTLZ2(n_dec=30, n_obj=3).get_pareto()
  #m = measure(model=DTLZ2(n_dec=30, n_obj=3))
  #conv = m.convergence(ret)
  #print("Convergence:",conv)
  # set_trace()
  return ret
  
def distFromHellScore(objListParam):
  import math  
  square = lambda val: math.pow(val,2)
  sq_root = lambda val: math.sqrt(val)
  dist_from_hell =0
  for f in objListParam:
    dist_from_hell += square(f)
  dist_from_hell = sq_root(dist_from_hell)
  return dist_from_hell  

if __name__=="__main__":
  iterations = 100
  modelObj=IPMDFC()
  galeOutput = GALE(modelObj, iterations)
  #print("Final gale out put ", galeOutput) 
  for item in galeOutput: 
    print("item length is " , len(item))   
    print("item is ", item)
    objectivevals = modelObj.solve(item)
    print("objective values are ", objectivevals)
    print("Distance from hell score is: ", distFromHellScore(objectivevals))
Esempio n. 5
0
def gale0(model=IPMDFC(), new=[], pop=int(1e4)):
    """
  Recursive FASTMAP clustering.
  """
    if len(new) == 0:
        frontier = model.generate(pop)
    else:
        frontier = new
        frontier.extend(model.generate(pop - len(new)))

    N = np.shape(frontier)[0]
    leaf = []
    norm = np.max(frontier, axis=0) - np.min(frontier, axis=0)

    def cdom(x, y, better=['less', 'less', 'less']):
        def loss1(i, x, y):
            return (x - y) if better[i] == 'less' else (y - x)

        def expLoss(i, x, y, n):
            return np.exp(loss1(i, x, y) / n)

        def loss(x, y):
            n = min(len(x), len(y))  #lengths should be equal
            losses = [
                expLoss(i, xi, yi, n) for i, (xi, yi) in enumerate(zip(x, y))
            ]
            return sum(losses) / n

        "x dominates y if it losses least"
        return loss(x, y) < loss(y, x)

    def distant(lst):
        R, C = np.shape(lst)
        farthest = lambda one, rest: sorted(rest, key=lambda F: aDist(F, one))[
            -1]
        one = lst[randi(0, R - 1)]
        mid = farthest(one, lst)
        two = farthest(mid, lst)
        return one, two

    def mutate(lst, good, g=0.15):
        new = []
        for l in lst:
            new.append([a + (b - a) * g for a, b in zip(l, good)])
        return new

    def aDist(one, two):
        return np.sqrt(np.sum(
            (np.array(one) / norm - np.array(two) / norm)**2))

    def recurse(dataset):
        R, C = np.shape(dataset)  # No. of Rows and Col
        # Find the two most distance points.
        one, two = distant(dataset)

        # Project each case on
        def proj(test):
            a = aDist(one, test)
            b = aDist(two, test)
            c = aDist(one, two)
            return (a**2 - b**2 + c**2) / (2 * c)

        if R < np.sqrt(N):
            leaf.extend(dataset)
        else:
            half1 = cdom(model.solve(one), model.solve(two))
            if half1:
                _ = recurse(
                    sorted(dataset, key=lambda F: proj(F))[:int(R / 2)])
            else:
                _ = recurse(
                    sorted(dataset, key=lambda F: proj(F))[int(R / 2):])

    recurse(frontier)
    a, b = distant(leaf)
    (good, bad) = (a, b) if cdom(model.solve(a), model.solve(b)) else (b, a)
    new = mutate(leaf, good, g=0.5)
    return new
Esempio n. 6
0
    # true = DTLZ2(n_dec=30, n_obj=3).get_pareto()
    #m = measure(model=DTLZ2(n_dec=30, n_obj=3))
    #conv = m.convergence(ret)
    #print("Convergence:",conv)
    # set_trace()
    return ret


def distFromHellScore(objListParam):
    import math
    square = lambda val: math.pow(val, 2)
    sq_root = lambda val: math.sqrt(val)
    dist_from_hell = 0
    for f in objListParam:
        dist_from_hell += square(f)
    dist_from_hell = sq_root(dist_from_hell)
    return dist_from_hell


if __name__ == "__main__":
    iterations = 100
    modelObj = IPMDFC()
    galeOutput = GALE(modelObj, iterations)
    #print("Final gale out put ", galeOutput)
    for item in galeOutput:
        print("item length is ", len(item))
        print("item is ", item)
        objectivevals = modelObj.solve(item)
        print("objective values are ", objectivevals)
        print("Distance from hell score is: ",
              distFromHellScore(objectivevals))