class TestEstadoIncubandoSism(unittest.TestCase): grafo = nx.scale_free_graph(100) modelo = crear_modelo_SISM(grafo, tiempo_incubacion=1, tiempo_inf_mild=0, tiempo_inf_grave=2, probabilidad_de_estar_incubando=1, probabilidad_deceso=1, probabilidad_riesgo=0, probabilidad_infecc_grave_riesgo=0, probabilidad_infecc_grave=1, probabilidad_deceso_riesgo=0) nodo = 0 def test_el_estado_se_instancia_correctamente(self): estado = EstadoInfectadoMildSISM(tiempo_infeccion=5) self.assertEqual(estado.tiempo_infeccion, 5) self.assertEqual(estado.__class__.__name__, ESTADO_INFECTADO_MILD) def test_al_transicionar_el_tiempo_de_infeccion_se_reduce_una_unidad(self): estado = EstadoInfectadoMildSISM(tiempo_infeccion=5) self.grafo.nodes[self.nodo]['riesgo'] = False self.grafo.graph['prob_de_deceso'] = 0 nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.tiempo_infeccion, 4) def test_al_transicionar_si_el_tiempo_de_infeccion_no_es_cero_el_estado_no_cambia( self): estado = EstadoInfectadoMildSISM(tiempo_infeccion=5) self.grafo.nodes[self.nodo]['riesgo'] = False self.grafo.graph['prob_de_deceso'] = 0 nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_INFECTADO_MILD) def test_cuando_el_tiempo_de_infeccion_llega_a_cero_el_estado_pasa_a_susceptible( self): estado = EstadoInfectadoMildSISM(tiempo_infeccion=1) self.grafo.nodes[self.nodo]['riesgo'] = False self.grafo.graph['prob_de_deceso'] = 0 nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_SUSCEPTIBLE)
class TestEstadoIncubandoSism(unittest.TestCase): grafo = nx.scale_free_graph(10) modelo = crear_modelo_SISM(grafo, tiempo_incubacion=1, tiempo_inf_mild=0, tiempo_inf_grave=2, probabilidad_de_estar_incubando=1, probabilidad_deceso=1, probabilidad_riesgo=0, probabilidad_infecc_grave_riesgo=0, probabilidad_infecc_grave=1, probabilidad_deceso_riesgo=0) nodo = 0 def test_el_estado_se_instancia_correctamente(self): estado = EstadoSusceptibleSISM() self.assertEqual(estado.__class__.__name__, ESTADO_SUSCEPTIBLE) def test_al_transicionar_si_todos_los_vecinos_estan_incubando_el_nodo_se_contagia( self): self.grafo.nodes[self.nodo]['estado'] = EstadoSusceptibleSISM() estado = self.grafo.nodes[self.nodo]['estado'] nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_INCUBANDO) def test_al_transicionar_si_ninguno_de_los_vecinos_esta_incubando_el_nodo_no_se_contagia( self): self.grafo.nodes[self.nodo]['estado'] = EstadoSusceptibleSISM() estado = self.grafo.nodes[self.nodo]['estado'] for vecino in self.grafo.neighbors(self.nodo): self.grafo.nodes[vecino]['estado'] = EstadoSusceptibleSISM() nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_SUSCEPTIBLE)
class TestEstadoIncubandoSism(unittest.TestCase): grafo = nx.scale_free_graph(100) modelo = crear_modelo_SISM(grafo, tiempo_incubacion=1, tiempo_inf_mild=0, tiempo_inf_grave=2, probabilidad_de_estar_incubando=1, probabilidad_deceso=1, probabilidad_riesgo=0, probabilidad_infecc_grave_riesgo=0, probabilidad_infecc_grave=1, probabilidad_deceso_riesgo=0) nodo = 0 def test_el_estado_se_instancia_correctamente(self): estado = EstadoIncubandoSISM(tiempo_incubacion=5) self.assertEqual(estado.tiempo_incubacion, 5) self.assertEqual(estado.__class__.__name__, ESTADO_INCUBANDO) def test_al_transicionar_el_tiempo_de_incubacion_se_reduce_una_unidad( self): estado = EstadoIncubandoSISM(tiempo_incubacion=5) nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.tiempo_incubacion, 4) def test_al_transicionar_si_el_tiempo_de_incubacion_no_es_cero_el_estado_no_cambia( self): estado = EstadoIncubandoSISM(tiempo_incubacion=5) nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_INCUBANDO) def test_si_no_es_de_riesgo_y_se_infecta_gravemente_el_nuevo_estado_es_infectado_grave( self): estado = EstadoIncubandoSISM(tiempo_incubacion=1) self.grafo.nodes[self.nodo]['riesgo'] = False self.grafo.graph['prob_infec_grave_riesgo'] = 0 self.grafo.graph['prob_infec_grave'] = 1 nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_INFECTADO_GRAVE) def test_si_es_de_riesgo_y_se_infecta_gravemente_el_nuevo_estado_es_infectado_grave( self): estado = EstadoIncubandoSISM(tiempo_incubacion=1) self.grafo.nodes[self.nodo]['riesgo'] = True self.grafo.graph['prob_infec_grave_riesgo'] = 1 self.grafo.graph['prob_infec_grave'] = 0 nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_INFECTADO_GRAVE) def test_si_no_es_de_riesgo_y_no_se_infecta_gravemente_el_nuevo_estado_es_infectado_mild( self): estado = EstadoIncubandoSISM(tiempo_incubacion=1) self.grafo.nodes[self.nodo]['riesgo'] = False self.grafo.graph['prob_infec_grave_riesgo'] = 1 self.grafo.graph['prob_infec_grave'] = 0 nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_INFECTADO_MILD) def test_si_es_de_riesgo_y_no_se_infecta_gravemente_el_nuevo_estado_es_infectado_mild( self): estado = EstadoIncubandoSISM(tiempo_incubacion=1) self.grafo.nodes[self.nodo]['riesgo'] = True self.grafo.graph['prob_infec_grave_riesgo'] = 0 self.grafo.graph['prob_infec_grave'] = 1 nuevo_estado = estado.transicionar(self.nodo, self.grafo) self.assertEqual(nuevo_estado.__class__.__name__, ESTADO_INFECTADO_MILD)
def main(): global grafo nombre_archivo_salida = input( "Ingrese el nombre del archivo en el que quiere los resultados \n") print("Cantidad de veces que corre: ") repeticiones = int(input("Numero: ")) print("Elegí el modelo:\n" "[1] SIS\n" "[2] SIR\n" "[3] SIRS\n") input_modelo = input("Numero: ") print("Elegí el grafo:\n" "[1] Scale\n" "[2] Grid\n" "[3] Small World\n" "[4] Random\n" "[5] Tree Balanceado\n") num_grafo = input("Numero: ") # TODO: Random graph # TODO: No balanced tree try: if num_grafo == '1': cantidad_de_nodos = int(input("Cantidad de nodos: ")) grafo = nx.scale_free_graph(cantidad_de_nodos) grafo.graph['tipo'] = "Scale Free" elif num_grafo == '2': cantidad_de_nodos_x = int(input("Cantidad nodos X: ")) cantidad_de_nodos_y = int(input("Cantidad nodos Y: ")) grafo = nx.grid_graph( dim=[cantidad_de_nodos_x, cantidad_de_nodos_y]) grafo.graph['tipo'] = "Grid " + str( cantidad_de_nodos_x) + "x" + str(cantidad_de_nodos_y) elif num_grafo == '3': cantidad_de_nodos = int(input("Cantidad de nodos: ")) vecinos_mas_cerca = int(input("Cantidad de vecinos: ")) prob_de_rewiring_cada_eje = float( input("Probabilidad de rewiring [0,1]: ")) if prob_de_rewiring_cada_eje > 1 or prob_de_rewiring_cada_eje < 0: print("Invalid probability") return grafo = nx.watts_strogatz_graph(cantidad_de_nodos, vecinos_mas_cerca, prob_de_rewiring_cada_eje) grafo.graph['tipo'] = "Small world" elif num_grafo == '4': grado_de_nodo = int(input("Grado de salida de los nodos: ")) cantidad_de_nodos = int(input("Cantidad de nodos: ")) seed = int(input("Seed: ")) grafo = nx.random_regular_graph(grado_de_nodo, cantidad_de_nodos, seed) grafo.graph['tipo'] = "Random graph" elif num_grafo == '5': d = int(input("Grado de salida de los nodos: ")) lamb = int(input("Distancia maxima entre nodos: ")) grafo = nx.balanced_tree(d, lamb) grafo.graph['tipo'] = "Balanced Tree" else: raise Exception("Tipo de grafo invalido") probabilidad_de_estar_incubando = float( input("Probabilidad de estar infectado: ")) cantidad_de_iteraciones = int(input("Numero de iteraciones: ")) if probabilidad_de_estar_incubando > 1 or probabilidad_de_estar_incubando < 0: raise Exception("Probabilidad inválida") if input_modelo == '1': modelo = crear_modelo_SISM( un_grafo=grafo, probabilidad_de_estar_incubando=probabilidad_de_estar_incubando ) correr_modelo_SISM(modelo, cantidad_de_iteraciones, repeticiones, nombre_archivo_salida) elif input_modelo == '2': modelo = crear_modelo_SIRM( un_grafo=grafo, probabilidad_de_estar_incubando=probabilidad_de_estar_incubando ) correr_modelo_SIRM(modelo, cantidad_de_iteraciones, repeticiones, nombre_archivo_salida) elif input_modelo == '3': modelo = crear_modelo_SIRMS( un_grafo=grafo, probabilidad_de_estar_incubando=probabilidad_de_estar_incubando ) correr_modelo_SIRMS(modelo, cantidad_de_iteraciones, repeticiones, nombre_archivo_salida) except ValueError: raise Exception("Input numerico invalido")
def main(): try: input_modelo = sys.argv[1] tipo_de_grafo = sys.argv[2] if tipo_de_grafo == "scale": check_parametros(7) cantidad_de_nodos = int(sys.argv[3]) next_arg = 4 grafo = nx.scale_free_graph(cantidad_de_nodos) grafo.graph['tipo'] = "Scale Free" elif tipo_de_grafo == "grid": check_parametros(9) cantidad_de_nodos_x = int(sys.argv[3]) cantidad_de_nodos_y = int(sys.argv[4]) next_arg = 5 grafo = nx.grid_graph( dim=[cantidad_de_nodos_x, cantidad_de_nodos_y]) grafo.graph['tipo'] = "Grid " + str( cantidad_de_nodos_x) + "x" + str(cantidad_de_nodos_y) elif tipo_de_grafo == "small_world": check_parametros(10) cantidad_de_nodos = int(sys.argv[3]) vecinos_mas_cerca = int(sys.argv[4]) prob_de_rewiring_cada_eje = float(sys.argv[5]) next_arg = 6 if prob_de_rewiring_cada_eje < 0 or prob_de_rewiring_cada_eje > 1: raise Exception("Probabilidad invalida") grafo = nx.watts_strogatz_graph(cantidad_de_nodos, vecinos_mas_cerca, prob_de_rewiring_cada_eje) grafo.graph['tipo'] = "Small world" elif tipo_de_grafo == "random": check_parametros(10) cantidad_de_nodos = int(sys.argv[3]) grado_salida = int(sys.argv[4]) seed = int(sys.argv[5]) next_arg = 6 grafo = nx.random_regular_graph(grado_salida, cantidad_de_nodos, seed) grafo.graph['tipo'] = "Random graph" elif tipo_de_grafo == "balanced_tree": check_parametros(9) d = int(sys.argv[3]) # Grado de salida de los nodos lamb = int(sys.argv[4]) # Distancia maxima entre par de nodos next_arg = 5 grafo = nx.balanced_tree(d, lamb) grafo.graph['tipo'] = "Balanced Tree" else: raise Exception("Tipo de grafo invalido") probabilidad_de_estar_incubando = float(sys.argv[next_arg]) next_arg += 1 cantidad_de_iteraciones = int(sys.argv[next_arg]) next_arg += 1 except ValueError: raise Exception("Input numerico invalido") repeticiones = int(sys.argv[next_arg]) next_arg += 1 nombre_archivo_salida = sys.argv[next_arg] if input_modelo == 'SIS': modelo = crear_modelo_SISM( un_grafo=grafo, probabilidad_de_estar_incubando=probabilidad_de_estar_incubando) correr_modelo_SISM(modelo, cantidad_de_iteraciones, repeticiones, nombre_archivo_salida) elif input_modelo == 'SIR': modelo = crear_modelo_SIRM( un_grafo=grafo, probabilidad_de_estar_incubando=probabilidad_de_estar_incubando) correr_modelo_SIRM(modelo, cantidad_de_iteraciones, repeticiones, nombre_archivo_salida) elif input_modelo == 'SIRS': modelo = crear_modelo_SIRMS( un_grafo=grafo, probabilidad_de_estar_incubando=probabilidad_de_estar_incubando) correr_modelo_SIRMS(modelo, cantidad_de_iteraciones, repeticiones, nombre_archivo_salida)