Replace solution instances with individual
This commit is contained in:
parent
ac300129ce
commit
49d8383133
|
@ -12,9 +12,9 @@ def get_row_distance(source, destination, data):
|
|||
return row["distance"].values[0]
|
||||
|
||||
|
||||
def compute_distance(element, solution, data):
|
||||
def compute_distance(element, individual, data):
|
||||
accumulator = 0
|
||||
distinct_elements = solution.query(f"point != {element}")
|
||||
distinct_elements = individual.query(f"point != {element}")
|
||||
for _, item in distinct_elements.iterrows():
|
||||
accumulator += get_row_distance(
|
||||
source=element, destination=item.point, data=data
|
||||
|
@ -22,18 +22,18 @@ def compute_distance(element, solution, data):
|
|||
return accumulator
|
||||
|
||||
|
||||
def generate_first_solution(n, m, data):
|
||||
solution = DataFrame(columns=["point", "distance"])
|
||||
solution["point"] = choice(n, size=m, replace=False)
|
||||
solution["distance"] = solution["point"].apply(
|
||||
func=compute_distance, solution=solution, data=data
|
||||
def generate_individual(n, m, data):
|
||||
individual = DataFrame(columns=["point", "distance", "fitness"])
|
||||
individual["point"] = choice(n, size=m, replace=False)
|
||||
individual["distance"] = individual["point"].apply(
|
||||
func=compute_distance, individual=individual, data=data
|
||||
)
|
||||
return solution
|
||||
return individual
|
||||
|
||||
|
||||
def evaluate_element(element, data):
|
||||
def evaluate_individual(individual, data):
|
||||
fitness = []
|
||||
genotype = element.point.values
|
||||
genotype = individual.point.values
|
||||
distances = data.query(f"source in @genotype and destination in @genotype")
|
||||
for item in genotype[:-1]:
|
||||
element_df = distances.query(f"source == {item} or destination == {item}")
|
||||
|
@ -114,15 +114,15 @@ def crossover(mode, parents, m):
|
|||
return position_crossover(parents, m)
|
||||
|
||||
|
||||
def element_in_dataframe(solution, element):
|
||||
duplicates = solution.query(f"point == {element}")
|
||||
def element_in_dataframe(individual, element):
|
||||
duplicates = individual.query(f"point == {element}")
|
||||
return not duplicates.empty
|
||||
|
||||
|
||||
def select_new_gene(individual, n):
|
||||
while True:
|
||||
new_gene = randint(n)
|
||||
if not element_in_dataframe(solution=individual, element=new_gene):
|
||||
if not element_in_dataframe(individual=individual, element=new_gene):
|
||||
return new_gene
|
||||
|
||||
|
||||
|
@ -141,9 +141,9 @@ def mutate(population, n, probability=0.001):
|
|||
return population
|
||||
|
||||
|
||||
def tournament_selection(solution):
|
||||
individuals = solution.sample(n=2)
|
||||
best_index = solution["distance"].astype(float).idxmax()
|
||||
def tournament_selection(population):
|
||||
individuals = population.sample(n=2)
|
||||
best_index = population["distance"].idxmax()
|
||||
return individuals.iloc[best_index]
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue