Ejemplo n.º 1
0
	def get_final_paretos(self):
		# pull all non-expanded models in queue out and push into final
		# could also use spea2_list here, they should have same contents
		final = self.final + self.nsga2_list 

		# generate final pareto fronts
		self.fitness_calc(final)
		final_list = selection.sortLogNondominated(final, len(final))
		return final_list
Ejemplo n.º 2
0
	def heap_select(self, heap_list, pop_count, fitness_calc):
		fitness_calc(heap_list)
		if self.use_nsga2:
			selected = selection.selNSGA2(heap_list, pop_count, nd='log')
		else:
			selected = selection.sortLogNondominated(heap_list, pop_count, True)
			selected = [ s for slist in selected for s in slist]
			# print("selected", selected)

		return selected
Ejemplo n.º 3
0
	def heap_pop(self, heap_list, pop_count, fitness_calc):
		fitness_calc(heap_list)

		if self.use_nsga2:
			popped = selection.selNSGA2(heap_list, pop_count, nd='log')
		else:
			popped = selection.sortLogNondominated(heap_list, pop_count, True)
			popped = [ p for plist in popped for p in plist]
			# print("popped", popped)

		heap_list = [m for m in heap_list if not m in popped]

		if self.max_heap_size > 0 and len(heap_list) > self.max_heap_size:
			heap_list = heap_list[:self.max_heap_size]


		return popped, heap_list
Ejemplo n.º 4
0
	def print_best(self, count, file=sys.stdout):
		print ("Best " + str(count) + " of " + str(len(self.final)), file=file)
		# self.fitness_calc(self.final)
		models = self.heap_select(self.final, count, self.fitness_calc)
		best = selection.sortLogNondominated(models, count)
		print (best[0][0].print_long_columns(), file=file)
		print ("-----------------------------------------------------------------------------------", file=file)
		cnt = 0
		self.best_size = 0
		self.best_err = 10000000000
		self.best_r2 = 0
		self.best_vari = 0
		self.ave_size = 0
		self.ave_err = 0
		self.ave_r2 = 0
		self.ave_vari = 0

		for front in best:
			for m in front:
				if cnt >= count:
					break
				cnt += 1
				print ("  ", m.print_long(), file=file)

				if m.score < self.best_err:
					self.best_size = m.size()
					self.best_err = m.score
					self.best_r2 = m.r2
					self.best_vari = m.evar
				self.ave_size += m.size()
				self.ave_err += m.score
				self.ave_r2 += m.r2
				self.ave_vari += m.evar

			print ("", file=file)
			if cnt >= count:
				break

		self.ave_size /= float(count)
		self.ave_err /= float(count)
		self.ave_r2 /= float(count)
		self.ave_vari /= float(count)

		print ("-----------------------------------------------------------------------------------", file=file)
Ejemplo n.º 5
0
	def finalize(self, nfronts=4):
		# finalization
		print ("\n\nFinalizing\n\n")

		# pull all non-expanded models in queue out and push into final
		# could also use spea2_list here, they should have same contents
		final = self.final + self.nsga2_list 

		# generate final pareto fronts
		self.fitness_calc(final)
		final_list = selection.sortLogNondominated(final, len(final))

		self.print_final_models(final_list, 128, self.logs["final"])

		# print first 4 pareto fronts
		print ("Final Results")
		print (final_list[0][0].print_columns())
		print ("-----------------------------------------------------------------------------------")
		for front in final_list[:nfronts]:
			for m in front:
				print ("  ", m)
			print ("")

		print ("\n")
		print ("num peekd models:  ", self.peekd_models)
		print ("num evald models:  ", self.evald_models)
		print ("num peek evals:  ", self.peek_nfev, self.peek_nfev * self.peek_npts)
		print ("num eval evals:  ", self.eval_nfev, self.eval_nfev * self.eval_npts)
		print ("num total evals: ", self.peek_nfev * self.peek_npts + self.eval_nfev * self.eval_npts)
		
		# print ("\n\n", nx.info(self.GRAPH), "\n\n")

		# handle issue with extra stray node with parent_id == -2 (at end of nodes list)
		# del_n = []
		# for n in nx.nodes_iter(self.GRAPH):
		# 	modl = self.memoizer.get_by_id(n)
		# 	if modl.score is None:
		# 		del_n.append(n)
		# for n in del_n:
		# 	self.GRAPH.remove_node(n)


		if self.workers > 0:
			print ("\n\nstopping workers")
			for proc in self.peek_procs:
				self.peek_in_queue.put(None)
			for proc in self.eval_procs:
				self.eval_in_queue.put(None)
			for proc in self.alge_procs:
				self.alge_in_queue.put(None)
			for proc in self.expd_procs:
				self.expd_in_queue.put(None)

			for proc in self.peek_procs:
				proc.join()
			for proc in self.eval_procs:
				proc.join()
			for proc in self.alge_procs:
				proc.join()
			for proc in self.expd_procs:
				proc.join()

		if self.remote_eval == True:
			self.ws.close()


		print ("\n\ndone\n\n")

		if self.log_details:
			for name, file_obj in self.logs.items():
				if file_obj is not sys.stdout:
					file_obj.close()