@@ -19,9 +19,10 @@ def comparar_resultados(opt: int = 0, iteraciones: int = 10, semilla: Union[int,
1919 'CambiarEstacionDescarga' , \
2020 'IntercambiarEstacionDescarga' , \
2121 'QuitarEstacionDescarga' , \
22- 'ReasignarFurgoneta' }}) -> None :
22+ 'ReasignarFurgoneta' , \
23+ 'ReducirNumeroBicicletasCarga' }}) -> None :
2324
24- tiempo_default , tiempo_modificado = 0 , 0
25+ tiempo_default , tiempo_modificado , soluciones_expandidas_default , soluciones_expandidas_modificado = 0 , 0 , 0 , 0
2526 beneficios_default , beneficios_modificado = [], []
2627 distancias_default , distancias_modificado = [], []
2728 rng = random .Random (semilla )
@@ -32,78 +33,78 @@ def comparar_resultados(opt: int = 0, iteraciones: int = 10, semilla: Union[int,
3233 state1 = generate_initial_state (opt = opt , semilla = seed )
3334 state2 = generate_initial_state (opt = opt , semilla = seed , operadores_activos = operadores_activos )
3435
35- inici = time .time ()
36- hill_climbing_1 = hill_climbing (ProblemaBicing (initial_state = state1 ))
37- tiempo_default += time .time () - inici
36+ problema1 = ProblemaBicing (initial_state = state1 )
37+ inici1 = time .time ()
38+ hill_climbing_1 = hill_climbing (problema1 )
39+ tiempo_default += time .time () - inici1
3840
41+ soluciones_expandidas_default += problema1 .solutions_checked
3942 beneficios_default .append (hill_climbing_1 .heuristic (coste_transporte = params .coste_transporte ))
4043 distancia_total_default = sum ([hill_climbing_1 .get_distancias_furgoneta (id_f )[2 ] for id_f in range (params .n_furgonetas )])
4144 distancias_default .append (distancia_total_default )
4245
43- inici = time .time ()
44- hill_climbing_2 = hill_climbing (ProblemaBicing (initial_state = state2 ))
45- tiempo_modificado += time .time () - inici
46+ problema2 = ProblemaBicing (initial_state = state2 )
47+ inici2 = time .time ()
48+ hill_climbing_2 = hill_climbing (problema2 )
49+ tiempo_modificado += time .time () - inici2
4650
51+ soluciones_expandidas_modificado += problema2 .solutions_checked
4752 beneficios_modificado .append (hill_climbing_2 .heuristic (coste_transporte = params .coste_transporte ))
4853 distancia_total_modificado = sum ([hill_climbing_2 .get_distancias_furgoneta (id_f )[2 ] for id_f in range (params .n_furgonetas )])
4954 distancias_modificado .append (distancia_total_modificado )
5055
51- print (f"\n HEURISTIC: { 2 if params .coste_transporte else 1 } | OPT { opt } | ITERACIONES\n " )
52- print (f"MEDIA DEFECTO: { sum (beneficios_default )/ iteraciones } | TIEMPO DEFAULT: { (tiempo_default / iteraciones )* 1000 } ms | DISTANCIA DEFAULT: { sum (distancias_default )/ iteraciones } | VARIANZA BENEF. DEFAULT: { sum ([(beneficio - (sum (beneficios_default )/ iteraciones ))** 2 for beneficio in beneficios_default ])/ iteraciones } " )
53- print (f"MEDIA MODIFICADO: { sum (beneficios_modificado )/ iteraciones } | TIEMPO MODIFICADO: { (tiempo_modificado / iteraciones )* 1000 } ms) | DISTANCIA MODIFICADO: { sum (distancias_modificado )/ iteraciones } | VARIANZA BENEF.MODIFICADO: { sum ([(beneficio - (sum (beneficios_modificado )/ iteraciones ))** 2 for beneficio in beneficios_modificado ])/ iteraciones } \n " )
56+ print (f"\n HEURISTIC: { 2 if params .coste_transporte else 1 } | OPT: { opt } | ITERACIONES: { iteraciones } \n " )
57+ print (f"MEDIA DEFECTO: { sum (beneficios_default )/ iteraciones } | TIEMPO DEFAULT: { (tiempo_default / iteraciones )* 1000 } ms | Nº = { int ( soluciones_expandidas_default / iteraciones ) } | DISTANCIA DEFAULT: { sum (distancias_default )/ iteraciones } | VARIANZA BENEF. DEFAULT: { sum ([(beneficio - (sum (beneficios_default )/ iteraciones ))** 2 for beneficio in beneficios_default ])/ iteraciones } " )
58+ print (f"MEDIA MODIFICADO: { sum (beneficios_modificado )/ iteraciones } | TIEMPO MODIFICADO: { (tiempo_modificado / iteraciones )* 1000 } ms) | Nº = { int ( soluciones_expandidas_modificado / iteraciones ) } | DISTANCIA MODIFICADO: { sum (distancias_modificado )/ iteraciones } | VARIANZA BENEF.MODIFICADO: { sum ([(beneficio - (sum (beneficios_modificado )/ iteraciones ))** 2 for beneficio in beneficios_modificado ])/ iteraciones } \n " )
5459
5560def comparar_operadores (opt : int = 0 , iteraciones : int = 10 , semilla : Union [int , None ] = None , operadores : dict = {operator : True for operator in {'CambiarEstacionCarga' , \
5661 'IntercambiarEstacionCarga' , \
5762 'CambiarOrdenDescarga' , \
5863 'CambiarEstacionDescarga' , \
5964 'IntercambiarEstacionDescarga' , \
6065 'QuitarEstacionDescarga' , \
61- 'ReasignarFurgoneta' }}) -> None :
66+ 'ReasignarFurgoneta' , \
67+ 'ReducirNumeroBicicletasCarga' }}) -> None :
6268
6369 progreso = 0
6470 media_beneficios = []
6571
66- operadores ['CambiarEstacionCarga' ] = True
67- for _ in range (2 ):
68- operadores ['IntercambiarEstacionCarga' ] = True
69- for _ in range (2 ):
70- operadores ['CambiarOrdenDescarga' ] = True
71- for _ in range (2 ):
72- operadores ['CambiarEstacionDescarga' ] = True
73- for _ in range (2 ):
74- operadores ['IntercambiarEstacionDescarga' ] = True
75- for _ in range (2 ):
76- operadores ['QuitarEstacionDescarga' ] = True
77- for _ in range (2 ):
78- operadores ['ReasignarFurgoneta' ] = True
79- for _ in range (2 ):
80- progreso += 1
81- print (f"PROGRESO: { (progreso / 128 )* 100 } %" )
82-
83- beneficios_tmp = []
84- tiempo , soluciones_expandidas = 0 , 0
85- rng = random .Random (semilla )
86- for _ in range (iteraciones ):
87- seed = rng .randint (0 , 1_000_000 )
72+ for val8 in [True , False ]:
73+ operadores ['ReducirNumeroBicicletasCarga' ] = val8
74+ for val7 in range (2 ):
75+ operadores ['CambiarEstacionCarga' ] = val7
76+ for val6 in range (2 ):
77+ operadores ['IntercambiarEstacionCarga' ] = val6
78+ for val5 in range (2 ):
79+ operadores ['CambiarOrdenDescarga' ] = val5
80+ for val4 in range (2 ):
81+ operadores ['CambiarEstacionDescarga' ] = val4
82+ for val3 in range (2 ):
83+ operadores ['IntercambiarEstacionDescarga' ] = val3
84+ for val2 in range (2 ):
85+ operadores ['QuitarEstacionDescarga' ] = val2
86+ for val1 in range (2 ):
87+ operadores ['ReasignarFurgoneta' ] = val1
8888
89- state = generate_initial_state (opt = opt , semilla = seed , operadores_activos = operadores )
89+ progreso += 1
90+ print (f"PROGRESO: { (progreso / 256 )* 100 } %" )
9091
91- problema = ProblemaBicing ( initial_state = state )
92- inici = time . time ()
93- hill_climbing_1 = hill_climbing ( problema )
94- tiempo += time . time () - inici
95- soluciones_expandidas += problema . solutions_checked
96- beneficios_tmp . append ( hill_climbing_1 . heuristic ( coste_transporte = params . coste_transporte ))
97-
98- media_beneficios . append (( sum ( beneficios_tmp ) / iteraciones , tiempo / iteraciones , int ( soluciones_expandidas / iteraciones ), { k : v for k , v in operadores . items ()}))
99-
100- operadores [ 'ReasignarFurgoneta' ] = False
101- operadores [ 'QuitarEstacionDescarga' ] = False
102- operadores [ 'IntercambiarEstacionDescarga' ] = False
103- operadores [ 'CambiarEstacionDescarga' ] = False
104- operadores [ 'CambiarOrdenDescarga' ] = False
105- operadores [ 'IntercambiarEstacionCarga' ] = False
106- operadores [ 'CambiarEstacionCarga' ] = False
92+ beneficios_tmp = []
93+ tiempo , soluciones_expandidas = 0 , 0
94+ rng = random . Random ( semilla )
95+ for _ in range ( iteraciones ):
96+ seed = rng . randint ( 0 , 1_000_000 )
97+
98+ state = generate_initial_state ( opt = opt , semilla = seed , operadores_activos = operadores )
99+
100+ problema = ProblemaBicing ( initial_state = state )
101+ inici = time . time ()
102+ hill_climbing_1 = hill_climbing ( problema )
103+ tiempo += time . time () - inici
104+ soluciones_expandidas += problema . solutions_checked
105+ beneficios_tmp . append ( hill_climbing_1 . heuristic ( coste_transporte = params . coste_transporte ))
106+
107+ media_beneficios . append (( sum ( beneficios_tmp ) / iteraciones , tiempo / iteraciones , int ( soluciones_expandidas / iteraciones ), { k : v for k , v in operadores . items ()}))
107108
108109 media_beneficios .sort (key = lambda x : x [0 ])
109110
@@ -120,7 +121,7 @@ def comparar_operadores(opt: int = 0, iteraciones: int = 10, semilla: Union[int,
120121 values = ['T' if v else 'F' for v in exp [3 ].values ()]
121122 print (f"B: { exp [0 ]} | T: { exp [1 ]* 1000 } ms | Nº: { exp [2 ]} | OP: { values } \n " )
122123
123- print (f"OPT: { opt } | ITERACIONES: { iteraciones } | HEURISTIC : { 2 if params .coste_transporte else 1 } | SEMILLA: { semilla } \n " )
124+ print (f"OPT: { opt } | ITERACIONES: { iteraciones } | HEURÍSTICO : { 2 if params .coste_transporte else 1 } | SEMILLA: { semilla } \n " )
124125
125126def mejor_initial_state (initial_strategies : list = [0 , 1 , 2 ], iteraciones : int = 10 ) -> None :
126127 results_accumulated = {strategy : 0 for strategy in initial_strategies }
@@ -149,11 +150,11 @@ def mejor_initial_state(initial_strategies: list = [0, 1, 2], iteraciones: int =
149150if __name__ == "__main__" :
150151
151152# Experimento
152- """tiempo_inicio = time.time( )
153- initial_state: EstadoBicing = generate_initial_state(opt=2 )
153+ """initial_state: EstadoBicing = generate_initial_state(opt=2 )
154+ initial_state.heuristic(coste_transporte=params.coste_transporte )
154155 problema_bicing = ProblemaBicing(initial_state)
156+ tiempo_inicio = time.time()
155157 final_solution_HC = hill_climbing(problema_bicing)
156- initial_state.heuristic(coste_transporte=params.coste_transporte)
157158 tiempo_final = time.time()
158159
159160 initial_state.print_state(inicial=True)
@@ -170,23 +171,41 @@ def mejor_initial_state(initial_strategies: list = [0, 1, 2], iteraciones: int =
170171 'CambiarEstacionDescarga' : True , \
171172 'IntercambiarEstacionDescarga' : True , \
172173 'QuitarEstacionDescarga' : True , \
173- 'ReasignarFurgoneta' : True }
174+ 'ReasignarFurgoneta' : True , \
175+ 'ReducirNumeroBicicletasCarga' : False }
174176
175177 comparar_resultados (opt = 2 , iteraciones = 100 , operadores_activos = operadores_experimento )
176- #comparar_operadores(opt=1 , semilla=random.randint(0, 1_000_000), iteraciones=100)
178+ #comparar_operadores(opt=2 , semilla=random.randint(0, 1_000_000), iteraciones=100)
177179 #mejor_initial_state(iteraciones=100)
178180
179181# Obtener estadísticas y generar un box plot
180- """times_hill_climbing = [timeit(lambda: hill_climbing(problema_bicing), number=1) for _ in range(15)]
181- times_simulated_annealing = [timeit(lambda: simulated_annealing(problema_bicing), number=1) for _ in range(15)]
182+ """iterations_plot = 100
183+ initial_state = generate_initial_state(opt=2)
184+ initial_state.heuristic(coste_transporte=params.coste_transporte)
185+ problema_bicing = ProblemaBicing(initial_state)
186+ times_hill_climbing = [timeit(lambda: hill_climbing(problema_bicing), number=1) for _ in range(iterations_plot)]
187+ benefits_hill_climbing = [hill_climbing(problema_bicing).heuristic(coste_transporte=params.coste_transporte) for _ in range(iterations_plot)]
188+ #times_simulated_annealing = [timeit(lambda: simulated_annealing(problema_bicing), number=1) for _ in range(15)]
182189
183- data_to_plot = [times_hill_climbing, times_simulated_annealing]
184- labels=['hill_climbing', 'simulated_annealing']
190+ times_to_plot = [times_hill_climbing]
191+ #times_to_plot = [times_hill_climbing, times_simulated_annealing]
192+ labels=['Hill Climbing']
193+ #labels=['hill_climbing', 'simulated_annealing']
185194
186- plt.boxplot(data_to_plot, labels=labels)
187- plt.ylabel('Tiempo de ejecución (s)')
188- plt.title('Comparativa de Hill Climning y Simulated Annealing con Boxplots')
189- plt.savefig('test.png')"""
195+ plt.boxplot(times_hill_climbing, labels=labels)
196+ plt.ylabel('Tiempo de ejecución (ms)')
197+ plt.title('Resultados Hill Climbing (100 iteraciones)')
198+ #plt.title('Comparativa de Hill Climning y Simulated Annealing con Boxplots')
199+ plt.savefig('times.png')
200+
201+ benefits_to_plot = [benefits_hill_climbing]
202+ plt.boxplot(benefits_hill_climbing, labels=labels)
203+ plt.ylabel('Beneficio total (€)')
204+ plt.title('Resultados Hill Climbing (100 iteraciones)')
205+ #plt.title('Comparativa de Hill Climbing y Simulated Annealing con Boxplots')
206+ plt.savefig('benefits.png')"""
207+
208+
190209
191210# Obtener estadísticas y generar un line plot
192211 """hill_climbing_value = None # HEM DE FER QUE HILL CLIMBING VALUE --> returns a list of objective function values over iterations:
0 commit comments