def guess_password(password_hash: int, num_chars: int, hash_func: Callable[[str], int]) -> str: """Attempt to find the string whose hash matches the given hash via a genetic algorithm. :param password_hash: The hash for the original password :param num_chars: How many characters to put in the generated passwords :param hash_func: The function to be used for hashing; it should take in a string and output its hash :return: The optimal result produced by the genetic algorithm """ def gen_passwords(): """Generate a list of random passwords.""" population = [] for i in range(500): char_list = [] for j in range(num_chars): char_list.append(get_pass_char()) population.append(Password(char_list, password_hash, hash_func)) return population # Uncomment the lines in main.py if you want to uncomment these #def time_out(): #print("TIMEOUT ERROR: too much time has passed since beginning the reconstruction. This may have occurred " #"because you entered an improper password length.") #input("Press any key to exit.") #_thread.interrupt_main() #tmr = Timer(30.0, time_out) #tmr.start() best_pass = genetic_algorithm.run(gen_passwords, lambda best: best.get_fitness() < 1, 0.7, 0.04, 0.6) #tmr.cancel() return str(best_pass)
def run(parameters): global idx idx += 1 try: res = ga.run(parameters) except: print('An error occuered with ', parameters) errored_params_pool.append(parameters) return {} print('run', idx, parameters, ' - ', res['run_time']) return res
mutation_probability = 0.1 mutation_rate = 0.1 # algorithm settings max_iter = 300 k = 10 stop_thrs = 10 mutation_level = 0.2 run_num = 3 run = 1 individual_size = 120 # In[3]: parameters = [ run, population_size, k,\ fitness_function, crossover_type, crossover_probability, \ elitism_ratio, max_parent_allowance, \ mutation_probability, mutation_rate, max_iter, individual_size,\ stop_thrs, mutation_level \ ] # In[4]: ga.run(parameters) # In[ ]:
from genetic_algorithm import run if __name__ == "__main__": run()
# Problem Definition problem = structure() problem.costfunc = sphere problem.nvar = 5 problem.varmin = -10 problem.varmax = 10 # GA Parameters params = structure() params.maxit = 100 params.npop = 20 params.pc = 1 params.gamma = 0.1 params.mu = 0.2 # como temos 5 genes (nvar), sempre vamos alterar 1 na mutacao params.sigma = 0.1 # Run GA out = genetic_algorithm.run(problem, params) # Results # plt.plot(out.bestcost) plt.semilogy(out.bestcost) plt.xlim(0, params.maxit) plt.xlabel('Iterations') plt.ylabel('Best Cost') plt.title('Genetic Algorithm (GA)') plt.grid(True) plt.show()