def steepest_ascent_hill_climbing_with_replacement(tasks, graph, skill_set, iteration=1000, extra_arg=100): individual = create_individual(tasks, skill_set) #individual = seeded_create_individual(tasks, graph, skill_set) best_individual = individual for i in range(iteration): new_individual = mutate(graph, skill_set, individual) for j in range(1, extra_arg): w_individual = mutate(graph, skill_set, individual) if fitness(graph, w_individual) < fitness(graph, new_individual): new_individual = w_individual # print("Iteration:", (i+1), fitness(graph, new_individual)) if fitness(graph, new_individual) < fitness(graph, best_individual): best_individual = new_individual individual = new_individual ''' print("Best Individual:") print("Tasks: ", best_individual["tasks"]) print("Team: ", best_individual["team"]) print("Fitness: ", fitness(graph, best_individual)) ''' return best_individual
def plain_ga(tasks, graph, skill_set, iteration=1000, pop_size=100): P = initialize(tasks, skill_set, pop_size) #P = seeded_initialize(tasks,graph,skill_set,pop_size) best_individual = None for i in range(iteration): for p in P: if best_individual is None or fitness(graph, p) < fitness( graph, best_individual): best_individual = p Q = [] for j in range(pop_size // 2): individual1 = tournament_selection(graph, P, tournament_size=7) individual2 = tournament_selection(graph, P, tournament_size=7) child1, child2 = crossover(skill_set, individual1, individual2) child1 = mutate(graph, skill_set, child1) child2 = mutate(graph, skill_set, child2) Q.append(child1) Q.append(child2) P = Q ''' print("Best Individual:") print("Tasks: ", best_individual["tasks"]) print("Team: ", best_individual["team"]) print("Fitness: ", fitness(graph, best_individual)) ''' return best_individual
def execute_single_state(graph, skill_set, algorithm, sample=100, iteration=1000, task_size=6): all_tasks = [] for i in range(sample): tasks = generate_random_tasks(skill_set, task_size) all_tasks.append(tasks) results = [] for i in range(sample): result = algorithm(all_tasks[i], graph, skill_set, iteration) results.append(result) total_fitness = 0.0 total_team_size = 0.0 for i in range(sample): total_fitness += fitness(graph, results[i]) total_team_size += len(set(results[i]["team"])) avg_fitness = total_fitness / sample avg_team_size = total_team_size / sample print("Avg. Team Size: ", avg_team_size) print("Avg. Fitness: ", avg_fitness) return avg_team_size, avg_fitness
def hill_climbing(tasks, graph, skill_set, iteration=1000): best_individual = create_individual(tasks, skill_set) #best_individual = seeded_create_individual(tasks, graph, skill_set) for i in range(iteration): new_individual = mutate(graph, skill_set, best_individual) #print("Iteration:", (i+1), fitness(graph, new_individual)) if fitness(graph, new_individual) < fitness(graph, best_individual): best_individual = new_individual ''' print("Best Individual:") print("Tasks: ", best_individual["tasks"]) print("Team: ", best_individual["team"]) print("Fitness: ", fitness(graph, best_individual)) ''' return best_individual
def random_search(tasks, graph, skill_set, iteration=1000): individual = create_individual(tasks, skill_set) #individual = seeded_create_individual(tasks, graph, skill_set) best_individual = individual for i in range(iteration): individual = create_individual(tasks, skill_set) #individual = seeded_create_individual(tasks, graph, skill_set) #print("Iteration:", (i+1), fitness(graph, individual)) if fitness(graph, individual) < fitness(graph, best_individual): best_individual = individual print("Best Individual:") print("Tasks: ", best_individual["tasks"]) print("Team: ", best_individual["team"]) print("Fitness: ", fitness(graph, best_individual)) return best_individual
def elitist_ga(tasks, graph, skill_set, iteration=1000, pop_size=100, elites_size=20): P = initialize(tasks, skill_set, pop_size) #P = seeded_initialize(tasks,graph,skill_set,pop_size) best_individual = None for i in range(iteration): all_fitness = [] for p in P: fp = fitness(graph, p) all_fitness.append(fp) if best_individual is None or fp < fitness(graph, best_individual): best_individual = p elites = numpy.array(all_fitness) elites_index = numpy.argsort(elites) elites_index = elites_index[:elites_size] Q = [] for j in range(elites_size): Q.append(P[elites_index[j]]) for j in range((pop_size - elites_size) // 2): individual1 = tournament_selection(graph, P, tournament_size=7) individual2 = tournament_selection(graph, P, tournament_size=7) child1, child2 = crossover(skill_set, individual1, individual2) child1 = mutate(graph, skill_set, child1) child2 = mutate(graph, skill_set, child2) Q.append(child1) Q.append(child2) P = Q ''' print("Best Individual:") print("Tasks: ", best_individual["tasks"]) print("Team: ", best_individual["team"]) print("Fitness: ", fitness(graph, best_individual)) ''' return best_individual