获取遗传算法测试文件

关于您的这篇 遗传算法求解TSP问题(python版),测试文件怎么从您这获得


import random  
  
# 定义TSP问题的邻域结构  
graph = {  
    'A': {'B': 2, 'C': 1},  
    'B': {'A': 2, 'C': 1},  
    'C': {'A': 1, 'B': 2, 'C': 1},  
    'D': {'A': 1, 'B': 2, 'C': 1},  
    'E': {'A': 1, 'B': 2, 'C': 1}  
}  
  
# 定义种群大小和进化代数  
POP_SIZE = 50  
GENE_SIZE = 10  
  
# 定义适应度函数  
def fitness_function(solution):  
    # 计算路径长度  
    length = sum([graph[node]['weight'] for node in solution])  
    return length  
  
# 定义交叉函数  
def crossover(parent1, parent2):  
    # 选择交叉点  
    crossover_point = random.randint(0, len(parent1) - 1)  
  
    # 生成子代  
    child1 = parent1[:crossover_point] + parent2[crossover_point:]  
    child2 = parent2[:crossover_point] + parent1[crossover_point:]  
  
    return child1, child2  
  
# 定义变异函数  
def mutation(solution):  
    # 选择变异点  
    mutation_point = random.randint(0, len(solution) - 1)  
  
    # 在变异点处随机选择一个位置  
    mutation_value = random.randint(0, 100)  
  
    # 将变异值设置为随机值  
    solution[mutation_point] = mutation_value  
  
    return solution  
  
# 定义遗传算法函数  
def genetic_algorithm(graph, POP_SIZE, GENE_SIZE):  
    # 初始化种群  
    population = []  
    for i in range(POP_SIZE):  
        population.append([graph[node]['weight'] for node in graph[solution[i]]])  
  
    # 选择交叉点和变异点  
    crossover_point = 0  
    mutation_point = 0  
  
    for i in range(GENE_SIZE):  
        # 生成下一代种群  
        offspring = []  
        for j in range(POP_SIZE):  
            offspring.append(population[j][random.randint(0, len(population[j]) - 1):])  
  
        # 选择交叉点  
        if random.random() < 0.5:  
            crossover_point = random.randint(0, len(offspring[0]) - 1)  
            offspring[0], offspring[1] = offspring[1], offspring[0]  
  
        # 选择变异点  
        if random.random() < 0.1:  
            mutation_point = random.randint(0, len(offspring[0]) - 1)  
            offspring[0][mutation_point] = random.randint(0, 100)  
  
        # 更新种群  
        population = offspring  
  
    # 评估适应度  
    fitness_scores = [fitness_function(solution) for solution in population]  
  
    # 选择最优解  
    best_solution = max(fitness_scores)

这篇写的还挺好的,可以看一下。https://blog.csdn.net/qq_27163583/article/details/125207836


%% 计算适应度,即路径的长度
function fit=fitness(Chro,C)
    for i=1:size(Chro,1)
        possible_sol=Chro(i,:);                       % 拿到1个染色体
        possible_sol=[possible_sol possible_sol(1)];  % 将第一个城市坐标补充到末尾
        dist=0;                                       % 用于计算总距离
        for j=1:length(possible_sol)-1                    
            city1=possible_sol(j);                    % 第j个城市的编号
            city2=possible_sol(j+1);                  % 第j+1个城市的编号
            city1_C=C(city1,:);                       % 第j个城市的坐标
            city2_C=C(city2,:);                       % 第j+1个城市的坐标
            dist=dist+norm(city1_C-city2_C);          % 第j个城市和第j+1个城市的距离
        end
        fit(i)=dist;
    end
 end