V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
BBrother
V2EX  ›  问与答

请教个关于遗传算法的问题,具体细节跟遗传算法没太大关系就是了。

  •  
  •   BBrother · 2017-10-22 20:39:03 +08:00 · 1378 次点击
    这是一个创建于 2581 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了个用于解决背包问题的遗传算法,其中有个保留最佳个体的方法如下:

    def reproduct_elitist(self):
        # 与当前种群进行适应度比较,更新最佳个体
        for i in range(self.size):
            if self.elitist['fitness'] < self.fitness[i][1] and self.fitness[i][0] <= self.max_weight:
                assert self.fitness_func(self.elitist['chromosome'])[1] == self.elitist['fitness']
                self.elitist['fitness'] = self.fitness[i][1]
                self.elitist['chromosome'] = tuple(self.individuals[i])
                self.elitist['age'] = self.age
                assert self.fitness_func(self.elitist['chromosome'])[1] == self.elitist['fitness']
    
    

    其中,self.elitist 是保留最佳个体的字典,self.fitness 是一个储存适应度的列表类似 [[weight, value],....] 这样,self.fitness_func 是一个计算适应度的方法,对于相同的基因输出是相同的。
    问题是这个样子的,每次运行的时候,会有一定概率的通不过后一个 assert,两个 assert 之间只是单纯的赋值而已,为什么会有概率通不过?

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2870 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:46 · PVG 15:46 · LAX 23:46 · JFK 02:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.