线性遗传编程内含子检测算法

时间:2012-07-06 15:05:46

标签: genetic-programming

有人能指出我用于从lgp个体中删除内含子的特定算法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

就删除内含子而言,我会看一下这篇论文:A Comparison of Linear Genetic Programming and Neural Networks in Medical Data Mining

虽然本文的重点可能不感兴趣,但在第II-B节(我认为第20-21页)中。作者讨论了我认为是一种非常好的简单内含子检测算法。

这是一篇相当古老的论文,所以搜索引用本文的论文以寻找可以帮助你的其他方法可能是值得的。

我特别建议使用本文所述算法的更高级方法:

“线性GP中的冗余,规范转换及其利用:图像特征合成的演示”(Evolvable Machines 2011)

要获得第二篇论文,只需在Google中输入标题,第一个链接应该是Springer付费墙链接,但是如果您点击快速查看,您应该可以从Google缓存中获得该文件没问题。 (如果你不能达到目的,请告诉我,我会帮忙)

答案 1 :(得分:1)

我已经实施了一个关于遗传编程的开源项目,该项目具有此功能。请看一下我的线性遗传编程的java实现:

https://github.com/chen0040/java-genetic-programming

为了提高评估过程中线性程序的性能,该库包含了“线性遗传编程”一书第3章中描述的内含子去除程序的实现。该实现可以在Program.markStructuralIntrons()中找到。

https://github.com/chen0040/java-genetic-programming/blob/master/src/main/java/com/github/chen0040/gp/lgp/program/Program.java

markStructuralIntrons()的原理很简单,下面引用了本书:

  

资料来源:Brameier,M 2004线性遗传规划(论文)

算法3.1(结构内含子的检测)

  1. 设置R_eff始终包含在当前程序中有效的所有寄存器  位置。 R_eff:= {r | r是输出寄存器}。  从最后一个程序指令开始,然后向后移动。
  2. 在程序中标记下一个上一个操作:   目标寄存器r_dest元素 - R_eff。  如果找不到这样的指令,请转到5.
  3. 如果操作直接跟随分支或分支序列,则标记这些  说明也是。否则从R_eff中删除r_dest。
  4. 在R_eff中插入新标记指令的每个源(操作数)寄存器r_op  如果尚未包含。转到2.
  5. 停止。所有未标记的指令都是内含子。    
  6. 以下是用Java实现的Program.markStructuralIntrons()的过程:

    df %>% 
        mutate_at(vars(-gene), funs(na_if(., . < 2))) %>% 
        filter(rowSums(is.na(.)) < (ncol(.) - 1))