首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在遗传算法中寻找目标号码的好选择函数是什么?

在遗传算法中寻找目标号码的好选择函数是什么?
EN

Stack Overflow用户
提问于 2015-01-16 11:19:55
回答 1查看 1.2K关注 0票数 0

我正在编写一个遗传算法来找到一个表达目标数的表达式,也就是说,如果目标数是10,那么解决方案可以是2*5。我遇到的情况是,我的整个种群成为一个相同的染色体,我认为健身功能是负责这一点的。

以下是可能的染色体,遵循数字和运算符交替出现在字符串中的规则,即没有两位数或两个运算符相邻。合法字符串将以数字或+/-运算符开头。表达式将从左到右按原样计算(忽略算术运算的顺序):

  • 1/2+3+5
  • -2+4+1+8
  • -7+6*2+8
  • +2/5-1+8 2+1*2-2
  • +2*7*7+3
  • +1/2/2/6 5/5*9*1
  • +3-1+1*8 3-8+7*1

甄选():

代码语言:javascript
复制
    def selection(population):
        total_finesses = Decimal(0.0)

        # Roulette selection:
        for chromosome in population:
            total_finesses += chromosome .fitness
        # Generate random number (spin the roulette).
        pick = Decimal(random.uniform(0, float(total_finesses)))
        current = Decimal(0.0)

        for i, chrom in enumerate(population):
            current += chrom.fitness
            if current > pick:
                return population[i]

健身():

代码语言:javascript
复制
    def fitness_calculator(chromosome):
        current_value = get_value(chromosome) # Returns the decimal value of the chromosome.

        return Decimal(-1 * (abs(target - current_value), 5))

正如您所看到的,当它接近0时,适应度被认为是更好的,因为我正在寻找一个表达式,它用最小的增量来表示它本身和目标数之间的值。

我认为我有一个选择算法的问题,选择最适合的染色体在轮盘赌的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-17 20:27:18

我在计算机科学stackexchange 这里上回答了一个类似的问题,它以最好的方式解释了如何找出哪种方法是解决问题的好方法。

然而,它看上去不像你已经实现了突变,这是负责保持多样性的群体;所以你可能会考虑以某种方式实施。有几种方法可以找到这里

@TomDalton在对你的问题的评论中也提出了一些合理的观点。如果您的池中有几个相同的解决方案会导致问题,请不要允许它。此外,随机选择很少是一个好主意,往往会使评估功能失效。您的评估函数对池中的解决方案进行排序。用它!有些方法说采取最好的解决方案,并将它们配对,以使最好的解决方案更好;而另一些方法则说,采取最坏的解决方案,以保持所有解决方案都相当体面。除此之外,还有许多其他可能的选择方法可供您选择。

我的最后一点是(虽然它可能不直接适用于您,但它可能会帮助那些在这个线程中结束的人),当查看GAs时,微调的初始种群大小常常被低估。确保你也尝试了几种不同的方法。

阅读材料:

Miller,B.L.,& Goldberg,D.E.(1995年)。遗传算法,比赛选择,以及噪声的影响。复杂系统,9(3),193-212。

Goldberg,D.E.& Deb,K. (1991)。遗传算法中选择方案的比较分析。乌尔巴纳,51,61801-2996。

Poon,P.W.,& Carter,J.N. (1995)。用于排序应用的遗传算法交叉算子。“计算机与运筹学”,22(1),135-147。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27982858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档