Only insert element that are not duplicated
This commit is contained in:
		
							parent
							
								
									5e6a6d00e9
								
							
						
					
					
						commit
						2eb84a6883
					
				@ -3,14 +3,17 @@ from numpy.random import choice, seed
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def get_first_random_solution(m, data):
 | 
					def get_first_random_solution(m, data):
 | 
				
			||||||
    seed(42)
 | 
					    seed(42)
 | 
				
			||||||
    random_indexes = choice(len(data.index), size=m)
 | 
					    random_indexes = choice(len(data.index), size=m, replace=False)
 | 
				
			||||||
    return data.iloc[random_indexes]
 | 
					    return data.loc[random_indexes]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def replace_worst_element(previous, data):
 | 
					def replace_worst_element(previous, data):
 | 
				
			||||||
    solution = previous.copy()
 | 
					    solution = previous.copy()
 | 
				
			||||||
    worst_index = solution["distance"].astype(float).idxmin()
 | 
					    worst_index = solution["distance"].astype(float).idxmin()
 | 
				
			||||||
    solution.loc[worst_index] = data.sample(random_state=42).squeeze()
 | 
					    random_element = data.sample().squeeze()
 | 
				
			||||||
 | 
					    while solution.isin(random_element.values.ravel()).any().any():
 | 
				
			||||||
 | 
					        random_element = data.sample().squeeze()
 | 
				
			||||||
 | 
					    solution.loc[worst_index] = random_element
 | 
				
			||||||
    return solution, worst_index
 | 
					    return solution, worst_index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,11 +31,6 @@ def get_random_solution(previous, data):
 | 
				
			|||||||
    return solution
 | 
					    return solution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def remove_duplicates(element, data):
 | 
					 | 
				
			||||||
    duplicate_free_df = data.query(
 | 
					 | 
				
			||||||
        "(source not in @element.source) or (destination not in @element.destination)"
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    return duplicate_free_df
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def explore_neighbourhood(element, data, max_iterations=100000):
 | 
					def explore_neighbourhood(element, data, max_iterations=100000):
 | 
				
			||||||
@ -41,7 +39,6 @@ def explore_neighbourhood(element, data, max_iterations=100000):
 | 
				
			|||||||
    for _ in range(max_iterations):
 | 
					    for _ in range(max_iterations):
 | 
				
			||||||
        previous_solution = neighbourhood[-1]
 | 
					        previous_solution = neighbourhood[-1]
 | 
				
			||||||
        neighbour = get_random_solution(previous=previous_solution, data=data)
 | 
					        neighbour = get_random_solution(previous=previous_solution, data=data)
 | 
				
			||||||
        data = remove_duplicates(element=neighbour, data=data)
 | 
					 | 
				
			||||||
        if neighbour.equals(previous_solution):
 | 
					        if neighbour.equals(previous_solution):
 | 
				
			||||||
            break
 | 
					            break
 | 
				
			||||||
        neighbourhood.append(neighbour)
 | 
					        neighbourhood.append(neighbour)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user