def resolverRandom(tamaño): max_estados = 10000 estado = 0 reinas = ranrein(tamaño) start = time() while (True): next_step(reinas, estado) if (max_estados < estado or h(reinas) == 0): #print("Tomó",estado,"pasos para llegar a una solucion con",h(reinas),"reinas amenazadas") demora = time() - start return (estado, h(reinas), demora) estado += 1
def next_step(reinas, estado): actual = h(reinas) reina = randint(0, len(reinas) - 1) pos = randint(0, len(reinas) - 1) temp = copy(reinas) temp[reina] = pos nuevo = h(temp) delta = nuevo - actual if (delta <= 0): reinas[reina] = pos return if (prob(delta, estado) >= random()): #print(prob(delta,estado),delta,estado,delta/(estado+1)) reinas[reina] = pos
def hill_climb(reinas): actual=h(reinas) reina=0 pos=reinas[0] temp=copy(reinas) temp[reina]=pos mejor=h(temp) for i in range(len(reinas)): for j in range(len(reinas)): temp=copy(reinas) temp[i]=j if(h(temp)< mejor): mejor=h(temp) reina=i pos=j reinas[reina]=pos return h(reinas)<actual
def resolverRandom(tamaño): max_estados=10000 estado=0 reinas=ranrein(tamaño) start=time() while(True): mejoro=hill_climb(reinas) sleep(1) if(not mejoro or max_estados<estado): #print("Tomó",estado,"pasos para llegar a una solucion con",h(reinas),"reinas amenazadas") demora=time()-start return (estado,h(reinas),demora) estado+=1
def resolverRandom(tamaño): max_gen = 1000 gen = 0 start = time() pob = poblacion_inicial(POB_SIZE, tamaño) while (True): #print(pob) #print("-",pob.qPerPr()) if (max_gen < gen or pob.contains(0)): demora = time() - start reinas = pob.pop() #print("Tomó",gen,"generaciones para llegar a una solucion con",h(reinas),"reinas amenazadas") return (gen, h(reinas), demora) pob = next_gen(pob) gen += 1