Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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