Algorithm 遗传算法中表示域的难点

Algorithm 遗传算法中表示域的难点,algorithm,genetic-algorithm,genetic-programming,genetic,Algorithm,Genetic Algorithm,Genetic Programming,Genetic,我有一个问题-我有一个规则引擎(drools)来评估交易的风险分数。如果风险太高(>200),那么它被标记为不安全。每个规则都有其权重(1-100),如果规则得到执行,则分配给风险分数 我想要一个优化权重的工具。所以我想到了遗传算法 1。我将向引擎发送一批测试事务(带有额外的参数,告诉它们应该如何标记->是否不安全),让引擎对它们进行评估 2.我会检查触发了多少条规则(这将确定 基因型中的染色体)如果5个被激发,那么 3.…我将创建第一个由500个基因型组成的群体,每个基因型有5条染色体(染色体

我有一个问题-我有一个规则引擎(drools)来评估交易的风险分数。如果风险太高(>200),那么它被标记为不安全。每个规则都有其权重(1-100),如果规则得到执行,则分配给风险分数

我想要一个优化权重的工具。所以我想到了遗传算法

1。我将向引擎发送一批测试事务(带有额外的参数,告诉它们应该如何标记->是否不安全),让引擎对它们进行评估

2.我会检查触发了多少条规则(这将确定 基因型中的染色体)如果5个被激发,那么

3.…我将创建第一个由500个基因型组成的群体,每个基因型有5条染色体(染色体上的基因值在1-100之间)

4.我会对人群中的所有基因型重复第一步

5。我会使用前面提到的附加参数检查正确标记的交易百分比

6.我会根据正确评估的交易数量的百分比分配给每个基因型适应度函数

7.重复循环几代,直到解决方案(100%事务被正确标记)出现交叉、突变等

这是我第一次尝试用遗传算法做任何事情,所以我想澄清的第一件事是

  • 我对基因型/染色体/基因如何工作的理解。在不同的网站上,他们有时会使用这些术语作为彼此的替代,这可能是虚构的。我在学习基于jenetics库的术语,因为我想用它来实现

  • 后来我意识到我没有考虑一件事——我可能会演化规则权重的值,但权重不是唯一重要的事情——它也很重要,权重将分配给哪个规则!但是我不知道我应该把额外的信息放在哪里,关于重量指的是哪条规则。。染色体上有什么异常?这对我来说是最大的问题,我只是不知道该把它放在什么地方


    • 优化是一个快速发展的领域。你会发现,对于相同的特征,有许多术语在四处飞来飞去,这可能会变得非常混乱。在我看来,你似乎对遗传算法的工作原理及其相关术语(基于你在问题中的提纲)有着相当好的理解。如需详细参考,请参阅。作为一个建议,你可以检查一下,而不是杰尼提。我认为这是一个更适合许多优化技术的库

      关于问题的第二部分。如果我的理解是正确的,你就不确定如何跟踪哪个染色体适用于哪个规则。如果是这样的话,你可以简单地将你的规则保存在一个列表中,并将它们与染色体相匹配。换句话说,个体的第一条染色体(或参考文献中的基因型)对应于问题中的第一条规则。通过这样做,您可以确保知道哪个权重(染色体值)适用于哪个规则


      如果我误解了,请纠正我

      这是一个关于编程的网站。你的问题似乎是关于生物学的。因此,我们不能在这里帮助你。从什么时候开始遗传算法不是编程的一部分?从什么时候开始“染色体是如何工作的?”是编程的一部分?从什么时候开始这有问题?@JoeC:
      染色体
      在这里被用于遗传算法的意义上:一个变异的对象,与另一个对象交叉,等等。,创建下一代模型。您很了解,所以我可以列出规则,并假设列表中的第一个元素对应的值将是基因型中的第一条染色体?我在想,但我想这意味着我可以随机匹配它们,效果也是一样的。这就是为什么我对所有这些不太确定的原因,例如,我可以得到解决方案56和89,并说规则“金额非常高”是89,而规则“高风险国家”是59。但事实是,如果我以相反的方式分配,它仍然可以?你不必假设它。评估每个个体时,使用第一条染色体确定规则列表中第一条规则的值(第二条、第三条等等)。这将确保染色体和规则保持一致,只要规则列表保持不变。通过这样做,你知道哪个规则适用于哪个染色体。你可以按照你喜欢的任何顺序匹配它们,只要你知道哪一个去哪。在您的示例中,遗传算法的任务是得到一个分配为“ok”的解决方案,而“坏”的解决方案将在迭代过程中过滤掉。