避免GA健身功能,让目标陷入困境

时间:2014-05-25 10:48:04

标签: genetic-algorithm

我正在研究一种遗传算法,作为一种有趣的编程练习。

问题在于用句子将不同语言的两个文本相互映射。由于不同的翻译可以在不同的地方开始和结束句子,因此文本之间存在大量但不完美的对应关系。

所以,举两个字符串:

a X. a a Y. a aaa a. X a a. a aa. aaa a Y aa.

X b bb. b Y bb bbb b X bb. bb. b. bb Y. bbb b.

其中X和Y是锚点和As和Bs语言特定的单词。我正在研究的基因将所有现有的句子中断(完全停止,不包括完成的句子)作为二进制值;上面的例子在两个文本中都有六个句子,所以需要十个比特。手动工作,不理解文本本身,我认为最好的答案是:

10011 11010

(1 - 没有变化,0 - 点被删除,句子合并),这将导致:

a X. a a Y a aaa a X a a. a aa. aaa a Y aa.

X b bb. b Y bb bbb b X bb. bb b. bb Y bbb b.

我的健身功能评估四个条件,如下:

  1. 句子数量应尽可能高。
  2. 两个文本中必须有相同数量的句子。
  3. 句子的长度应尽可能接近。
  4. 因为在两个文本的同一个句子中都应该找到尽可能多的锚点(例如,锚点是样本小说中的字符名称,我会使用)。
  5. 但是,我没有得到我希望的结果,因为条件2非常重要,无论我做什么和进化停止都会接管。如果我没有大量调整发生的事情,我最终要么把整个事情合并成一个巨大的句子(基因00000 00000以上),要么找到第一个匹配的句子数并且卡住了。

    一般来说,如何克服这个问题?当需要相互作用的条件列表时,如何才能使我的健身功能不被卡住?该过程应分为两个阶段吗?我怎样才能在一些进化后重新引入条件2?我应该每N代评估一次吗?

1 个答案:

答案 0 :(得分:0)

不是将问题分成两个阶段,我认为你最好还是努力改善你的健身功能。拥有相互作用的条件不一定是个问题。关键是你的健康分数是如何计算的。如果给每个条件一个权重,可以调整每个条件以获得更好的结果。

如果你能提供更多关于健康分数的细节,那么可能更容易弄清楚正在发生的事情,但似乎某些条件具有比其他条件固有的更大的重量。特别是因为如果结果是一个巨大的句子,条件1应该给出低分,反之亦然。通过调整每个条件的相对权重,您应该能够针对两个条件都很好的基因,而不是一个或另一个。