Added to database file
This commit is contained in:
@ -19,17 +19,17 @@ class Matplotlib_Graph:
|
|||||||
self.yscale = "linear"
|
self.yscale = "linear"
|
||||||
|
|
||||||
|
|
||||||
def generation_total_fitness(self):
|
def generation_total_fitness(self, config_id = None):
|
||||||
"""Show a plot of generation by generation total fitness."""
|
"""Show a plot of generation by generation total fitness."""
|
||||||
|
|
||||||
# Query the X data
|
# Query the X data
|
||||||
generations = self.database.get_total_generations()
|
generations = self.database.get_total_generations(config_id)
|
||||||
|
|
||||||
# Create the generations list - [0,1,2,etc]
|
# Create the generations list - [0,1,2,etc]
|
||||||
self.x = list(range(0, generations))
|
self.x = list(range(0, generations))
|
||||||
|
|
||||||
# Query for Y data
|
# Query for Y data
|
||||||
self.y = self.database.get_generation_total_fitness()
|
self.y = self.database.get_generation_total_fitness(config_id)
|
||||||
|
|
||||||
if self.yscale == "log":
|
if self.yscale == "log":
|
||||||
# If using log then the values have to be positive numbers
|
# If using log then the values have to be positive numbers
|
||||||
@ -40,17 +40,17 @@ class Matplotlib_Graph:
|
|||||||
plt.ylabel('Generation Total Fitness')
|
plt.ylabel('Generation Total Fitness')
|
||||||
plt.title('Relationship Between Generations and Generation Total Fitness')
|
plt.title('Relationship Between Generations and Generation Total Fitness')
|
||||||
|
|
||||||
def highest_value_chromosome(self):
|
def highest_value_chromosome(self,config_id = None):
|
||||||
"""Generation by Max value chromosome """
|
"""Generation by Max value chromosome """
|
||||||
|
|
||||||
# Query the X data
|
# Query the X data
|
||||||
generations = self.database.get_total_generations()
|
generations = self.database.get_total_generations(config_id)
|
||||||
|
|
||||||
# Create the generations list - [0,1,2,etc]
|
# Create the generations list - [0,1,2,etc]
|
||||||
self.x = list(range(0, generations))
|
self.x = list(range(0, generations))
|
||||||
|
|
||||||
# Query for Y data
|
# Query for Y data
|
||||||
self.y = self.database.get_highest_chromosome()
|
self.y = self.database.get_highest_chromosome(config_id)
|
||||||
|
|
||||||
if self.yscale == "log":
|
if self.yscale == "log":
|
||||||
# If using log then the values have to be positive numbers
|
# If using log then the values have to be positive numbers
|
||||||
@ -62,17 +62,17 @@ class Matplotlib_Graph:
|
|||||||
plt.title('Relationship Between Generations and Highest Fitness')
|
plt.title('Relationship Between Generations and Highest Fitness')
|
||||||
|
|
||||||
|
|
||||||
def lowest_value_chromosome(self):
|
def lowest_value_chromosome(self,config_id = None):
|
||||||
"""Generation by Min value Chromosome """
|
"""Generation by Min value Chromosome """
|
||||||
|
|
||||||
# Query the X data
|
# Query the X data
|
||||||
generations = self.database.get_total_generations()
|
generations = self.database.get_total_generations(config_id)
|
||||||
|
|
||||||
# Create the generations list - [0,1,2,etc]
|
# Create the generations list - [0,1,2,etc]
|
||||||
self.x = list(range(0, generations))
|
self.x = list(range(0, generations))
|
||||||
|
|
||||||
# Query for Y data
|
# Query for Y data
|
||||||
self.y = self.database.get_lowest_chromosome()
|
self.y = self.database.get_lowest_chromosome(config_id)
|
||||||
|
|
||||||
if self.yscale == "log":
|
if self.yscale == "log":
|
||||||
# If using log then the values have to be positive numbers
|
# If using log then the values have to be positive numbers
|
||||||
|
|||||||
@ -18,6 +18,7 @@ class SQL_Database:
|
|||||||
"""Get the current config_id from the config table."""
|
"""Get the current config_id from the config table."""
|
||||||
return self.query_one_item("SELECT MAX(id) FROM config")
|
return self.query_one_item("SELECT MAX(id) FROM config")
|
||||||
|
|
||||||
|
|
||||||
def sql_type_of(self, obj):
|
def sql_type_of(self, obj):
|
||||||
"""Returns the sql type for the object"""
|
"""Returns the sql type for the object"""
|
||||||
|
|
||||||
@ -196,11 +197,19 @@ class SQL_Database:
|
|||||||
return query_data[0]
|
return query_data[0]
|
||||||
|
|
||||||
|
|
||||||
def get_generation_total_fitness(self,config_id = None):
|
def past_runs(self,database_name = 'database.db'):
|
||||||
|
"""Show a summerization of the past runs that the user has done."""
|
||||||
|
|
||||||
|
self.conn = self.create_connection(database_name)
|
||||||
|
query_data = self.query_all(f"SELECT id,generation_goal,chromosome_length FROM config;")
|
||||||
|
print(query_data)
|
||||||
|
|
||||||
|
def get_generation_total_fitness(self,config_id = None,database_name = 'database.db'):
|
||||||
"""Get each generations total fitness sum from the database """
|
"""Get each generations total fitness sum from the database """
|
||||||
|
|
||||||
if config_id == None: config_id = self.config_id
|
if config_id == None: config_id = self.config_id
|
||||||
|
|
||||||
|
self.conn = self.create_connection(database_name)
|
||||||
query_data = self.query_all(f"SELECT SUM(fitness) FROM data WHERE config_id={config_id} GROUP BY generation;")
|
query_data = self.query_all(f"SELECT SUM(fitness) FROM data WHERE config_id={config_id} GROUP BY generation;")
|
||||||
|
|
||||||
# Format the fitness data into one list
|
# Format the fitness data into one list
|
||||||
@ -209,21 +218,22 @@ class SQL_Database:
|
|||||||
return formated_query_data
|
return formated_query_data
|
||||||
|
|
||||||
|
|
||||||
def get_total_generations(self,config_id = None):
|
def get_total_generations(self,config_id = None,database_name = 'database.db'):
|
||||||
"""Get the total generations from the database"""
|
"""Get the total generations from the database"""
|
||||||
|
|
||||||
if config_id == None: config_id = self.config_id
|
if config_id == None: config_id = self.config_id
|
||||||
|
self.conn = self.create_connection(database_name)
|
||||||
query_data = self.query_one_item(f"SELECT COUNT(DISTINCT generation) FROM data WHERE config_id={config_id};")
|
query_data = self.query_one_item(f"SELECT COUNT(DISTINCT generation) FROM data WHERE config_id={config_id};")
|
||||||
|
|
||||||
return query_data
|
return query_data
|
||||||
|
|
||||||
|
|
||||||
def get_highest_chromosome(self,config_id = None):
|
def get_highest_chromosome(self,config_id = None,database_name = 'database.db'):
|
||||||
"""Get the highest fitness of each generation"""
|
"""Get the highest fitness of each generation"""
|
||||||
|
|
||||||
if config_id == None: config_id = self.config_id
|
if config_id == None: config_id = self.config_id
|
||||||
|
|
||||||
|
self.conn = self.create_connection(database_name)
|
||||||
query_data = self.query_all(f"SELECT fitness, max(fitness) FROM data WHERE config_id={config_id} GROUP by generation;")
|
query_data = self.query_all(f"SELECT fitness, max(fitness) FROM data WHERE config_id={config_id} GROUP by generation;")
|
||||||
|
|
||||||
# Format the fitness data into one list
|
# Format the fitness data into one list
|
||||||
@ -232,14 +242,51 @@ class SQL_Database:
|
|||||||
return formated_query_data;
|
return formated_query_data;
|
||||||
|
|
||||||
|
|
||||||
def get_lowest_chromosome(self,config_id = None):
|
def get_lowest_chromosome(self,config_id = None,database_name = 'database.db'):
|
||||||
"""Get the lowest fitness of each generation"""
|
"""Get the lowest fitness of each generation"""
|
||||||
|
|
||||||
if config_id == None: config_id = self.config_id
|
if config_id == None: config_id = self.config_id
|
||||||
|
|
||||||
|
self.conn = self.create_connection(database_name)
|
||||||
query_data = self.query_all(f"SELECT fitness, min(fitness) FROM data WHERE config_id={config_id} GROUP by generation;")
|
query_data = self.query_all(f"SELECT fitness, min(fitness) FROM data WHERE config_id={config_id} GROUP by generation;")
|
||||||
|
|
||||||
# Format the fitness data into one list
|
# Format the fitness data into one list
|
||||||
formated_query_data = [i[0] for i in query_data]
|
formated_query_data = [i[0] for i in query_data]
|
||||||
|
|
||||||
return formated_query_data;
|
return formated_query_data;
|
||||||
|
|
||||||
|
|
||||||
|
# Getters and setter for class
|
||||||
|
|
||||||
|
def get_config_id(self):
|
||||||
|
|
||||||
|
try:
|
||||||
|
# return the config id if its already set
|
||||||
|
self.__config_id = "something"
|
||||||
|
except:
|
||||||
|
# Get the most resent run from config table.
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
# config_id and config table dont exist: Tell the user
|
||||||
|
print("""You are required to run a ga before you
|
||||||
|
can connect to the database. Run ga.evolve()""")
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def get_conn(self):
|
||||||
|
"""Conn """
|
||||||
|
try:
|
||||||
|
# Return if the connection has already been set
|
||||||
|
return self.__conn
|
||||||
|
except:
|
||||||
|
# Check if you can connect to the database named in ga
|
||||||
|
self.__conn = self.create_connection(ga.database_name)
|
||||||
|
|
||||||
|
except:
|
||||||
|
# See if the default database exists
|
||||||
|
self.__conn = self.create_connection("database.db")
|
||||||
|
except:
|
||||||
|
# if the connection
|
||||||
|
print("""You are required to run a ga before you
|
||||||
|
can connect to the database. Run ga.evolve()""")
|
||||||
|
break
|
||||||
|
|||||||
22
src/run.py
22
src/run.py
@ -4,21 +4,11 @@ import matplotlib.pyplot as plt
|
|||||||
# Create the genetic algorithm
|
# Create the genetic algorithm
|
||||||
ga = EasyGA.GA()
|
ga = EasyGA.GA()
|
||||||
|
|
||||||
# Create 25 chromosomes each with 10 genes and 200 generations
|
|
||||||
ga.population_size = 200
|
|
||||||
ga.chromosome_length = 10
|
|
||||||
ga.generation_goal = 150
|
|
||||||
|
|
||||||
# Evolve the genetic algorithm
|
|
||||||
ga.evolve()
|
ga.evolve()
|
||||||
# Print generation and population
|
|
||||||
ga.print_generation()
|
|
||||||
ga.print_population()
|
|
||||||
|
|
||||||
# Plot the data from the genetic algorithm
|
ga.database.past_runs()
|
||||||
plt.figure(figsize = [6, 6])
|
|
||||||
ga.graph.highest_value_chromosome() # Change this so it doesn't make its own figure or show
|
|
||||||
plt.xlabel('My datas generations') # override the xlabel
|
|
||||||
plt.ylabel('How well the fitness is') # override the ylabel
|
ga.graph.highest_value_chromosome(1) # Change this so it doesn't make its own figure or show
|
||||||
plt.title('My GA fitness x generations') # override the title
|
ga.graph.show()
|
||||||
plt.show()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user