这是使用 C++ 实现的 GEP 算法,也就是 “ 基因表达式编程 ” 。编译并执行程序需要有可以支持 C++ 11 或以上版本的编译器,我本地编译采用的是 GCC 10 和 CMake 3.20 。
以我本地编译的方法为例:
$ cd build
$ cmake ../src
$ cmake --build .
顺利的话,build
目录里面会生成可执行程序GEP.out
。如果采用其它的编译器或者编译套件,也可以简单地把src
以及src
下的子目录都设为搜索目录,然后执行编译即可。
程序运行效果(内有随机初始化的步骤,每次执行结果会有差别):
$ ./GEP.out
代数=0, 最大适应度=0.152698, 个体信息:(((((1.74247*1.12861)+(1.26272*2.77195))*((2.95397*2.24401)+(2.4401-1.67824)))*(((3.22668-0.488646)/(1.66096/2.2321))*(0.430719*1.66942)))-(((0.891015+2.66047)/(1.09807*1.45251))-((1.22155-3.18734)-(1.4885*3.39914))))=97.6444
代数=1, 最大适应度=0.152698, 个体信息:(((((1.74247*1.12861)+(1.26272*2.77195))*((2.95397*2.24401)+(2.4401-1.67824)))*(((3.22668-0.488646)/(1.66096/2.2321))*(0.430719*1.66942)))-(((0.891015+2.66047)/(1.09807*1.45251))-((1.22155-3.18734)-(1.4885*3.39914))))=97.6444
代数=2, 最大适应度=0.734705, 个体信息:((1.00861/0.0101795)+0.316817)=99.3991
代数=3, 最大适应度=0.734705, 个体信息:((1.00861/0.0101795)+0.316817)=99.3991
代数=4, 最大适应度=0.734705, 个体信息:((1.00861/0.0101795)+0.316817)=99.3991
代数=5, 最大适应度=0.981451, 个体信息:((((3.06426/1.08348)-(2.36369/0.969878))-((1.20654+1.73589)*(1.88141*3.4216)))*(((1.46114/0.864299)-3.31744)-(0.402928+3.36824)))=100.137
代数=6, 最大适应度=0.999971, 个体信息:(((2.06717*1.8507)*(3.22136/0.13488))+((2.59679/0.824276)*2.73746))=99.9946
结束。
此外,仓库的源码来自下面几个仓库的综合,并经过一定程度的改造:
- 遗传算法: https://gitee.com/az13js/cpp-genetic-algorithm
- 节点、图、树: https://gitee.com/az13js/GNode
- 数学表达式生成和求值: https://gitee.com/az13js/Op