UI elements using the new structs #8
										
											Binary file not shown.
										
									
								
							@@ -5,8 +5,8 @@ from fastapi import FastAPI
 | 
				
			|||||||
app = FastAPI()
 | 
					app = FastAPI()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.get("/optimize/{max_steps}/{print_to_console}")
 | 
					@app.get("/optimize/{max_steps}/{print_details}")
 | 
				
			||||||
def main(max_steps: int, print_to_console: bool):
 | 
					def main(max_steps: int, print_details: bool):
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    # CONSTRAINT TO RESPECT MAX NUMBER OF STEPS
 | 
					    # CONSTRAINT TO RESPECT MAX NUMBER OF STEPS
 | 
				
			||||||
    #max_steps = 16
 | 
					    #max_steps = 16
 | 
				
			||||||
@@ -23,7 +23,7 @@ def main(max_steps: int, print_to_console: bool):
 | 
				
			|||||||
    landmarks.append(landmark("arrivée", -1, (0, 0)))
 | 
					    landmarks.append(landmark("arrivée", -1, (0, 0)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    visiting_order = solve_optimization(landmarks, max_steps, print_to_console)
 | 
					    visiting_order = solve_optimization(landmarks, max_steps, print_details)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #return visiting_order
 | 
					    #return visiting_order
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							@@ -261,7 +261,7 @@ def path_length(P: list, resx: list) :
 | 
				
			|||||||
    return np.dot(P, resx)
 | 
					    return np.dot(P, resx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Main optimization pipeline
 | 
					# Main optimization pipeline
 | 
				
			||||||
def solve_optimization (landmarks, max_steps, printing_console) :
 | 
					def solve_optimization (landmarks, max_steps, printing_details) :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # SET CONSTRAINTS FOR INEQUALITY
 | 
					    # SET CONSTRAINTS FOR INEQUALITY
 | 
				
			||||||
    c, A_ub, b_ub = init_ub_dist(landmarks, max_steps)              # Add the distances from each landmark to the other
 | 
					    c, A_ub, b_ub = init_ub_dist(landmarks, max_steps)              # Add the distances from each landmark to the other
 | 
				
			||||||
@@ -283,15 +283,7 @@ def solve_optimization (landmarks, max_steps, printing_console) :
 | 
				
			|||||||
    # Solve linear programming problem
 | 
					    # Solve linear programming problem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq = b_eq, bounds=x_bounds, method='highs', integrality=3)
 | 
					    res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq = b_eq, bounds=x_bounds, method='highs', integrality=3)
 | 
				
			||||||
    circle = has_circle(res.x)
 | 
					 | 
				
			||||||
    i = 0
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    # Break the circular symmetry if needed
 | 
					 | 
				
			||||||
    while len(circle) != 0 :
 | 
					 | 
				
			||||||
        A_ub, b_ub = break_circle(landmarks, A_ub, b_ub, circle)
 | 
					 | 
				
			||||||
        res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq = b_eq, bounds=x_bounds, method='highs', integrality=3)
 | 
					 | 
				
			||||||
        circle = has_circle(res.x)
 | 
					 | 
				
			||||||
        i += 1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Raise error if no solution is found
 | 
					    # Raise error if no solution is found
 | 
				
			||||||
@@ -305,16 +297,29 @@ def solve_optimization (landmarks, max_steps, printing_console) :
 | 
				
			|||||||
        res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq = b_eq, bounds=x_bounds, method='highs', integrality=3)
 | 
					        res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq = b_eq, bounds=x_bounds, method='highs', integrality=3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not res.success :
 | 
					        if not res.success :
 | 
				
			||||||
            raise ValueError("No solution could be found, even when increasing max_steps using the heuristic")
 | 
					            s = "No solution could be found, even when increasing max_steps using the heuristic"
 | 
				
			||||||
 | 
					            return s
 | 
				
			||||||
 | 
					            #raise ValueError("No solution could be found, even when increasing max_steps using the heuristic")
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    # If there is a solution, we're good to go, just check for
 | 
				
			||||||
 | 
					    else :
 | 
				
			||||||
 | 
					        circle = has_circle(res.x)
 | 
				
			||||||
 | 
					        i = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if printing_console is True :
 | 
					        # Break the circular symmetry if needed
 | 
				
			||||||
        if i != 0 :
 | 
					        while len(circle) != 0 :
 | 
				
			||||||
            print(f"Neded to recompute paths {i} times because of unconnected loops...")
 | 
					            A_ub, b_ub = break_circle(landmarks, A_ub, b_ub, circle)
 | 
				
			||||||
 | 
					            res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq = b_eq, bounds=x_bounds, method='highs', integrality=3)
 | 
				
			||||||
 | 
					            circle = has_circle(res.x)
 | 
				
			||||||
 | 
					            i += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if printing_details is True :
 | 
				
			||||||
 | 
					            if i != 0 :
 | 
				
			||||||
 | 
					                print(f"Neded to recompute paths {i} times because of unconnected loops...")
 | 
				
			||||||
            X = print_res(res, landmarks, P)
 | 
					            X = print_res(res, landmarks, P)
 | 
				
			||||||
            return X
 | 
					            return X
 | 
				
			||||||
    else :
 | 
					        else :
 | 
				
			||||||
        return untangle(res.x)
 | 
					            return untangle(res.x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user