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
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
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
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