使用遗传算法创建子节点

问题描述

我正在编写用于实现遗传算法的 Python 代码

我一直在创造孩子。我的研究需要这个。我已尽我所能实现代码

def initialise_city(num_dim,limit = 100):
    X = np.random.randint(0,limit,size=num_dim)
    return X

def initialise_cities(num_cities):
    cities = []
    for i in range(num_cities):
        cities.append(initialise_city(2))
    return cities
num_cities = 5
cities = initialise_cities(num_cities)
print("City Positions: ",cities)

def distance_function(cities,visit_order):
    distance = 0.0
    visit_pos = 0
    next_pos = 0
    for i,txt in enumerate(visit_order):
        if (i < len(visit_order)-1):
            visit_pos = visit_order[i]
            next_pos = visit_order[i+1]
            distance = distance + np.sqrt((cities[visit_pos][0]-cities[next_pos][0])**2 +(cities[visit_pos][1]-cities[next_pos][1])**2)

    #raise NotImplementedError()
    return -1.0*distance


def initialise_chromosome(chromosome_size):
    # YOUR CODE HERE
    chromosome = np.random.permutation(chromosome_size)
    #raise NotImplementedError()
    return chromosome
def initialise_population(population_size,chromosome_size):
    population = []
    # YOUR CODE HERE
    for i in range(population_size):
        population.append(initialise_chromosome(chromosome_size))
    #raise NotImplementedError()
    return population


def calculate_fitness(population,cities,fitness_function):
    fitness_list = []
    # YOUR CODE HERE
    d = 0.0
    for i,ix in enumerate(population):
        d = fitness_function(cities,ix)
        fitness_list.append(fitness_function(cities,ix))
    #raise NotImplementedError()
    return fitness_list


def selection(population,fitness_list):
    ## Select the top half of the best of the population
    population = np.array(population)
    sorted_indices = np.argsort(fitness_list)
    selection_point = int(1+ len(fitness_list)/2)
    
    # Randomply permute this top half of the poulation
    indices = np.random.choice(sorted_indices[:selection_point],len(population))
    best_population = population[indices]
    return best_population

def pairing(selected_population):
    ## pair up parents that will be used to reproduce
    count = 0
    pairs = []
    while count < len(selected_population)-1:
        index = count
        pairs.append([selected_population[index],selected_population[index+1]])
        count +=2
    return pairs

我被困在应该创建孩子的部分。

def create_child(a,b):
    child = []
    # YOUR CODE HERE
    point = random.randint(1,len(pairs))
    #raise NotImplementedError()
    return child

def cross_over(pairs):    
    final_population = []
    for a,b in pairs:
        child = create_child(a,b)
        final_population.append(child)
        child = create_child(b,a)
        final_population.append(child)
    return final_population

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)