【问题标题】:Difficulties in representing domain in genetic algorithm [closed]在遗传算法中表示域的困难[关闭]
【发布时间】:2018-07-20 18:51:07
【问题描述】:

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

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

1.我会发送一批测试交易(带有额外的参数,告诉它们应该如何被标记 -> 是否不安全)给引擎让它评估它们

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

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

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

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

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

7. 重复循环数代,直到通过交叉、突变等达到解决方案(100% 事务被正确标记)。

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

  • 我对基因型/染色体/基因如何工作的理解。在不同的站点中,他们有时会使用这些术语作为彼此的替代品,这可能会令人困惑。我正在学习基于 jenetics 库的术语,因为我正在考虑将其用于实施。

  • 后来我意识到我没有考虑一件事 - 我可能会演变规则权重的值,但权重并不是唯一重要的 - 将权重分配给哪个规则也很重要!但我不知道我应该把关于权重所指的规则的附加信息放在哪里……在染色体中的某个地方?这对我来说是最大的问题,我只是看不出它在哪里适合。

【问题讨论】:

  • 这是一个关于编程的网站。你的问题似乎是关于生物学的。因此,我们无法在这里为您提供帮助。
  • 什么时候遗传算法不是编程的一部分?
  • 从什么时候开始“染色体是如何工作的?”编程的一部分?
  • 这是从什么时候开始有问题的?
  • @JoeC: chromosome 在这里用于遗传算法的意义:一个对象发生变异、与另一个对象交叉等,以创建下一代模型。

标签: algorithm genetic-algorithm genetic-programming genetic


【解决方案1】:

优化是一个快速且迅速扩展的领域。您会发现对于相同的特征有许多术语飞来飞去,这可能会变得非常混乱。对我来说,您似乎对遗传算法的工作原理及其相关术语(基于您在问题中的大纲)有一个不错的了解。如需很好的参考,请参阅this website。作为建议,您可以查看MOEA Framework 而不是 jenetics。我认为它是一个更适合许多优化技术的库。

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

如果我误解了,请纠正我。

【讨论】:

  • 您理解得很好,所以我可以列出规则并假设列表中的第一个元素对应的值将是基因型中的第一个染色体?我正在考虑它,但我想知道这意味着我也可以随机匹配它们并且效果是一样的。这就是为什么我对这一切不太确定的原因,例如我可以得到解决方案 56 和 89,并说规则“金额非常高”是 89,而规则“高风险国家”是 59。但事实是,如果我愿意以相反的方式分配它仍然可以吗?
  • 好吧,你不必假设它。当您评估每个个体时,您使用第一个染色体来确定规则列表中第一个规则的值(对于第 2 条、第 3 条等)。只要规则列表保持不变,这将确保染色体和规则对应。通过这样做,您知道哪个规则适用于哪个染色体。你可以按照你喜欢的任何顺序匹配它们,只要你知道哪个去哪里。在您的示例中,GA 的工作是得出一个被分配为“ok”的解决方案,而“bad”解决方案将在迭代过程中被过滤掉。
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 2012-07-04
  • 2013-05-29
  • 2016-02-03
  • 2011-04-16
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多