Beispiel #1
0
    def run(self,mod):
        frontier = []
        for _ in range(self.candidates):
            frontier.append(mod.generate())
        generations = 0

        lives = 5
        baseline = frontier[:]
        prev_era = self.fitting(mod,baseline)
        for i in range(self.generations):
            to_select_sample = self.select(mod,frontier) # binary denomination score of all pairs
            sorted_sample = OrderedDict(sorted(to_select_sample.items(), key=lambda t: t[1],reverse=True)) # sorted by the scores
            selected_sample = Utility.take(40, sorted_sample.iteritems()) # select 40% of the population
            selection_pool = []
            for key, value in selected_sample:
                selection_pool.append(frontier[key])
            new_frontier = self.get_new_frontier(mod,selection_pool) # perform crossover
            mutated_frontier = self.do_mutation(mod,new_frontier) # mutated some candidates
            cur_era = self.fitting(mod,mutated_frontier) #average
            generations += 1
            ret_val = Utility.better(mod,prev_era,cur_era)
            if ret_val > 0:
                prev_era = cur_era[:]
            lives += ret_val
            if lives is 0:
                return prev_era

            #print "Generations : ", generations
        #print "Best Solution : ", sum(cur_era)

        return cur_era
Beispiel #2
0
def de(mod):
    frontier_size = 50
    max_tries = 40
    f = 0.75
    cf = 0.3
    epsilon = 0.1
    ib = 0
    frontier = generate_frontier(frontier_size, mod)
    eb = init_score(mod, frontier)
    prev = []
    lives = 5
    p = 1
    for k in range(max_tries):
        Utility.say(str(p) + "|")
        total, n, eb, ib, frontier, cur = update(mod, f, cf, ib, frontier, eb)
        if not prev:
            prev = cur[:]
        else:
            lives += Utility.check_type2(prev, cur)
            prev = cur[:]
        if lives is 0:
            break
        p += max_tries
        Utility.say("\n")
    f1, f2 = mod.objs(frontier[ib])
    Utility.printOutput("Success", f1, f2, frontier[ib], eb)
    return frontier[ib]
Beispiel #3
0
    def run(self, mod):
        frontier = []
        for _ in range(self.candidates):
            frontier.append(mod.generate())
        generations = 0
        lives = 5
        baseline = frontier[:]
        prev_era = self.fitting(mod, baseline)
        #print "Optimizer"
        for i in range(self.generations):
            #print "Start generation"
            to_select_sample = self.select(
                mod, frontier)  # binary denomination score of all pairs
            sorted_sample = OrderedDict(
                sorted(to_select_sample.items(),
                       key=lambda t: t[1],
                       reverse=True))  # sorted by the scores
            slice = int(0.5 * self.candidates)
            selected_sample = Utility.take(
                slice,
                sorted_sample.iteritems())  # select 50% of the population
            selection_pool = []
            for key, value in selected_sample:
                selection_pool.append(frontier[key])
            new_frontier = self.get_new_frontier(
                mod, selection_pool)  # perform crossover
            mutated_frontier = self.do_mutation(
                mod, new_frontier)  # mutated some candidates
            cur_era = self.fitting(mod, mutated_frontier)  #average
            generations += 1
            if Utility.better(mod, prev_era, cur_era):
                prev_era = cur_era[:]
                lives += 0
            else:
                lives += -1
            if lives is 0:
                return prev_era

            #print "Generations : ", generations
        #print "Best Solution : ", sum(cur_era)

        return cur_era
Beispiel #4
0
 def select(self,mod,frontier):
     binary_result = {}
     can_id = 0
     for left in frontier:
         count = 0
         for right in frontier:
             if Utility.compare(mod,mod.objs(left),mod.objs(right)):
                 count += 1
         binary_result[can_id] = count
         can_id += 1
     return binary_result
Beispiel #5
0
 def select(self, mod, frontier):
     binary_result = {}
     can_id = 0
     for left in frontier:
         count = 0
         for right in frontier:
             if Utility.compare(mod, mod.objs(left), mod.objs(right)):
                 count += 1
         binary_result[can_id] = count
         can_id += 1
     return binary_result
Beispiel #6
0
def update(mod, f, cf, ib, frontier, eb, total=0.0, n=0):
    cur = []
    for i, x in enumerate(frontier):
        sc = mod.score(x)
        new = extrapolate(frontier, x, f, cf, i, mod)
        new_sc = mod.score(new)
        if Utility.check_type1(mod, new, frontier[ib]):
            Utility.say('?')
            eb = sc = new_sc
            frontier[i] = new[:]
            ib = i
        elif Utility.check_type1(mod, new, x):
            Utility.say('+')
            sc = new_sc
            frontier[i] = new[:]
        else:
            Utility.say('.')
        total += sc
        n += 1
        cur.append(sc)
    return total, n, eb, ib, frontier, cur
Beispiel #7
0
def update(mod,f,cf,ib,frontier,eb, total=0.0, n=0):
    cur = []
    for i,x in enumerate(frontier):
        sc = mod.score(x)
        new = extrapolate(frontier,x,f,cf,i,mod)
        new_sc = mod.score(new)
        if new_sc > eb:
            Utility.say('?')
            eb = sc = new_sc
            frontier[i] = new[:]
            ib = i
        elif new_sc > sc:
            Utility.say('+')
            sc = new_sc
            frontier[i] = new[:]
        else:
            Utility.say('.')
        total += sc
        n += 1
        cur.append(sc)
    cur = sum(cur)/len(cur)
    return total,n,eb,ib,frontier,cur
Beispiel #8
0
def de(mod,frontier_size,max_tries,cf):
    f = 0.75
    epsilon = 0.1
    lives = 3
    ib = 0
    frontier = generate_frontier(frontier_size,mod)
    eb = sys.maxint
    prev = [sys.maxint]*mod.no_objectives
    lives = 5
    p = 1
    for k in range(max_tries):
        Utility.say(str(p)+"|"+"Best Hyper = " + str(eb) + "Best Solution = " + str(frontier[ib]))
        total,n,eb,ib,frontier,cur = update(mod,f,cf,ib,frontier,eb)
        if cur > prev:
            prev = cur
        else:
            lives -= 1
        if lives is 0:
            break
        p += frontier_size
        Utility.say("\n")
    f1 = mod.objs(frontier[ib])
    Utility.printOutput("Success",f1,frontier[ib],eb)
    return frontier[ib]
Beispiel #9
0
def mws(mod):
    max_tries = 25
    max_changes = 100
    threshold = 0.01
    p = 0.05
    lives = 3
    best_sn = mod.generate()
    norm = mod.baseline_study()
    norm, best_sc = mod.get_energy(best_sn,norm)

    prev = []
    k = 1
    for i in range(max_tries):
        sn = mod.generate()
        cur = []
        Utility.say(str(k)+"|")
        for j in range(max_changes):
            norm,score = mod.get_energy(sn,norm)
            if score < threshold:
                f1,f2 = mod.objs(sn)
                norm,score = mod.get_energy(sn,norm)
                best_sn = sn[:]
                best_sc = score
                Utility.printOutput("Success", f1,f2,best_sn,f1+f2)
                return best_sn
            limit = len(mod.decisons)-1 if len(mod.decisons) > 0 else 0
            c = random.randint(0,limit)
            if p < random.random():
                temp = mutate(mod,sn,c)
                if mod.checkconstraint(temp):
                    sn = temp[:]
                    Utility.say('?')
                else:
                    Utility.say('.')
            else:
                changed, sn = maximizesolution(mod,sn,c,norm)
                if changed:
                    norm,local_sc = mod.get_energy(sn,norm)
                    if Utility.check_type1(mod,sn,best_sn):
                        best_sc = local_sc
                        best_sn = sn[:]
                    sn = sn[:]
                    Utility.say('+')
                else:
                    Utility.say('!')
            norm,local_sc = mod.get_energy(sn,norm)
            cur.append(local_sc)
        if not prev:
            prev = cur[:]
        else:
            lives += Utility.check_type2(prev,cur)
            prev = cur[:]
        if lives is 0:
            break
        k += max_changes
        Utility.say("\n")
    f1,f2 = mod.objs(sn)
    Utility.printOutput('Failure',f1,f2,best_sn,f1+f2)
    return best_sn
Beispiel #10
0
def mws(mod):
    max_tries = 100
    max_changes = 100
    threshold = 0.001
    p = 0.05
    lives = 3
    best_sn = mod.generate()
    norm = mod.baseline_study()
    norm, best_sc = mod.get_energy(best_sn,norm)

    prev = mod.default_objs()
    k = 1
    Utility.say(str(k)+"|")
    for i in range(max_tries):
        sn = mod.generate()
        cur = []
        for j in range(max_changes):
            norm,score = mod.get_energy(sn,norm)
            if score < threshold:
                f1,f2 = mod.objs(sn)
                norm,score = mod.get_energy(sn,norm)
                best_sn = sn[:]
                best_sc = score
                Utility.printOutput("Success", f1,f2,best_sn,best_sc)
                return best_sn
            limit = len(mod.decisons)-1 if len(mod.decisons) > 0 else 0
            c = random.randint(0,limit)
            if p < random.random():
                temp = mutate(mod,sn,c)
                if mod.checkconstraint(temp):
                    sn = temp[:]
                    Utility.say('?')
                else:
                    Utility.say('.')
            else:
                changed, local_sn = maximizesolution(mod,sn,c,norm)
                if changed:
                    norm,local_sc = mod.get_energy(local_sn,norm)
                    if local_sc < best_sc:
                        best_sc = local_sc
                        best_sn = local_sn[:]
                    sn = local_sn[:]
                    Utility.say('+')
                else:
                    Utility.say('.')
            cur.append(mod.objs(sn))
        cur = map(Utility.mean, zip(*cur))
        if Utility.better(prev,cur):
            lives -= 1
        if lives is 0:
            break
        else:
            prev = cur[:]
        k += max_changes
        Utility.say("\n"+str(int(k))+"|")
    f1,f2 = mod.objs(sn)
    Utility.printOutput('Failure',f1,f2,best_sn,best_sc)
    return best_sn
Beispiel #11
0
def sa(mod):
    s = mod.generate()
    norm = mod.baseline_study()
    norm,e = mod.get_energy(s,norm)
    sb = s[:]
    eb = e
    k = 1.0
    kmax = 999.0
    lives = 5
    Utility.say("1|")
    prev = []
    cur = []
    while k < kmax:
      sn = mod.generate()
      norm, en = mod.get_energy(sn,norm)

      if Utility.check_type1(mod,sn,sb):
        sb = sn[:]
        eb = en
        Utility.say("!")
      if Utility.check_type1(mod,sn,s):
        s = sn[:]
        e = en
        Utility.say("+")
      elif mod.prob(e, en, k*7/(kmax)) < random.random():
        s = sn
        e = en
        Utility.say("?")
      Utility.say(".")
      cur.append(en)

      k = k + 1
      if k % 50 == 0:
        #cur = map(Utility.mean, zip(*cur))
        if not prev:
            prev = cur[:]
        else:
            lives += Utility.check_type2(prev,cur)
            prev = cur[:]
        if lives is 0:
            break
        cur = []
        Utility.say("\n"+str(int(k))+"|")

    f1,f2 = mod.objs(sb)
    Utility.printOutput('Success',f1,f2,sb,f1+f2)
    return sb
Beispiel #12
0
def mws(mod):
    max_tries = 25
    max_changes = 100
    threshold = 0.01
    p = 0.05
    lives = 3
    best_sn = mod.generate()
    norm = mod.baseline_study()
    norm, best_sc = mod.get_energy(best_sn, norm)

    prev = []
    k = 1
    for i in range(max_tries):
        sn = mod.generate()
        cur = []
        Utility.say(str(k) + "|")
        for j in range(max_changes):
            norm, score = mod.get_energy(sn, norm)
            if score < threshold:
                f1, f2 = mod.objs(sn)
                norm, score = mod.get_energy(sn, norm)
                best_sn = sn[:]
                best_sc = score
                Utility.printOutput("Success", f1, f2, best_sn, f1 + f2)
                return best_sn
            limit = len(mod.decisons) - 1 if len(mod.decisons) > 0 else 0
            c = random.randint(0, limit)
            if p < random.random():
                temp = mutate(mod, sn, c)
                if mod.checkconstraint(temp):
                    sn = temp[:]
                    Utility.say('?')
                else:
                    Utility.say('.')
            else:
                changed, sn = maximizesolution(mod, sn, c, norm)
                if changed:
                    norm, local_sc = mod.get_energy(sn, norm)
                    if Utility.check_type1(mod, sn, best_sn):
                        best_sc = local_sc
                        best_sn = sn[:]
                    sn = sn[:]
                    Utility.say('+')
                else:
                    Utility.say('!')
            norm, local_sc = mod.get_energy(sn, norm)
            cur.append(local_sc)
        if not prev:
            prev = cur[:]
        else:
            lives += Utility.check_type2(prev, cur)
            prev = cur[:]
        if lives is 0:
            break
        k += max_changes
        Utility.say("\n")
    f1, f2 = mod.objs(sn)
    Utility.printOutput('Failure', f1, f2, best_sn, f1 + f2)
    return best_sn
Beispiel #13
0
def sa(mod):
    s = mod.generate()
    norm = mod.baseline_study()
    norm, e = mod.get_energy(s, norm)
    sb = s[:]
    eb = e
    k = 1.0
    kmax = 999.0
    lives = 5
    Utility.say("1|")
    prev = []
    cur = []
    while k < kmax:
        sn = mod.generate()
        norm, en = mod.get_energy(sn, norm)

        if Utility.check_type1(mod, sn, sb):
            sb = sn[:]
            eb = en
            Utility.say("!")
        if Utility.check_type1(mod, sn, s):
            s = sn[:]
            e = en
            Utility.say("+")
        elif mod.prob(e, en, k * 7 / (kmax)) < random.random():
            s = sn
            e = en
            Utility.say("?")
        Utility.say(".")
        cur.append(en)

        k = k + 1
        if k % 50 == 0:
            #cur = map(Utility.mean, zip(*cur))
            if not prev:
                prev = cur[:]
            else:
                lives += Utility.check_type2(prev, cur)
                prev = cur[:]
            if lives is 0:
                break
            cur = []
            Utility.say("\n" + str(int(k)) + "|")

    f1, f2 = mod.objs(sb)
    Utility.printOutput('Success', f1, f2, sb, f1 + f2)
    return sb
Beispiel #14
0
def sa(mod):
    s = mod.generate()
    norm = mod.baseline_study()
    norm,e = mod.get_energy(s,norm)
    sb = s[:]
    eb = e
    k = 1.0
    kmax = 1499.0
    lives = 5
    Utility.say("1|")
    prev = mod.default_objs()
    cur = []
    status = "Success"
    while k < kmax:
      sn = mod.generate()
      norm, en = mod.get_energy(sn,norm)
      if en < eb:
        sb = sn[:]
        eb = en
        Utility.say("!")
      if en < e:
        s = sn[:]
        e = en
        Utility.say("+")
      elif mod.prob(e, en, k*7/(kmax)) < random.random():
        s = sn
        e = en
        Utility.say("?")
      Utility.say(".")
      cur.append(mod.objs(sb))

      k = k + 1
      if k % 100 == 0:
        cur = map(Utility.mean, zip(*cur))
        if Utility.better(prev,cur):
            lives -= 1
        if lives is 0:
            status = "Terminated"
            break
        else:
            prev = cur[:]
        cur = []
        Utility.say("\n"+str(int(k))+"|")

    f1,f2 = mod.objs(sb)
    Utility.printOutput(status,f1,f2,sb,f1+f2)
    return sb