# 基于C++ 实现的遗传算法
这是使用 C++ 实现的遗传算法,遗传算法针对不同问题实现起来细节可能不一样,这里罗列一下当前的实现方式具有的特性:
- 通过锦标赛算法选择个体
- 通过从上一代中剔除低适应度个体的方式去除劣质解
- 个体由一条染色体组成,所以程序不区分个体和染色体两个概念
- 通过实数编码组成染色体,求解 De jong 函数 f2 在 -2.048 到 2.048 范围内的最小值
- 通过两条染色体相同位置基因求和再平均进行染色体交叉
- 通过高斯分布的随机数对基因进行变异操作
- 适应度取 1 / (0.01 + f2)
- 算法的参数可以通过修改`main.cpp`中`run`方法的输入参数来改变
另外,程序通过面向对象方式实现且类名称和文件名存在严格的对应关系,命名都采用驼峰命名法,以及虽然不多但是每个方法和成员属性都有中文注释。
## 1.环境需求
- `Cmake` 推荐使用版本3.10以上的,否则参考`CMakeLists.txt`中的注释修改版本。
- `GCC` 推荐使用支持 C++ 17 的 GCC 编译器,否则参考`CMakeLists.txt`中的注释修改 C++ 的版本需求。程序的源码没有使用更高级的语言特性,但是至少需要 C++ 11 才能运行起来。
*注:仓库代码在 GNU Linux 环境下能使用, C++ 源码编写时没有用到标准库以外的 API ,因此源码是支持跨平台使用的。理论上 Cmake 配置可以在 Windows 和苹果电脑上使用,但是我没有试过。*
## 2.使用
我只在`GNU Linux`操作系统上使用,如果需要在别的系统上使用需要自己想办法……
这是使用`Cmake`工具管理的 C++ 项目,所以按照正常使用`CMake`的方法构建就行,下面是构建示例:
$ mkdir -p build
$ cd build
$ cmake ../src
$ cmake --build .
然后在`build`目录下会产生一堆文件,包括可执行程序`GeneticAlgorithm.out`。执行程序:
$ ./GeneticAlgorithm.out
代数=0, 最大适应度=21.2265, 个体信息=Fitness=21.2265,v1=1.16928,v2=1.35803
代数=1, 最大适应度=21.2265, 个体信息=Fitness=21.2265,v1=1.16928,v2=1.35803
代数=2, 最大适应度=34.1127, 个体信息=Fitness=34.1127,v1=0.881568,v2=0.784435
代数=3, 最大适应度=75.6878, 个体信息=Fitness=75.6878,v1=0.943324,v2=0.88987
代数=4, 最大适应度=98.7995, 个体信息=Fitness=98.7995,v1=1.01102,v2=1.02211
结束。
## 3.修改源码
如果需要针对别的问题调整算法,那么需要修改源码。这里假设你知道遗传算法的原理且能使用 C++ ,那么根据需要你可能会修改下面列举的文件:
- `main.cpp` 程序入口在这里,算法参数也在这里
- `MainProcess.cpp`和`MainProcess.h` 算法整体的执行流程在这里控制
- `PopulationFactory.cpp`和`PopulationFactory.h` 需要创建种群对象时优先采用这里定义和实现的工厂类,调整种群创建方式或添加不同创建方式的话也优先考虑将逻辑放在这里面
- `Population.cpp`和`Population.h` 种群类,与种群实例互动、通信的方法在这里面
- `ChromosomeFactory.cpp`和`ChromosomeFactory.h` 染色体创建的工厂类,包含创建染色体的不同方式
- `Chromosome.cpp`和`Chromosome.h` 染色体类(一个染色体就是种群里的一个个体),实现方式不区分染色体和个体,如果需要区分染色体和个体那么得单独拆分出个体类,如果不需要区分的话,染色体和个体的对外互动、通信的方法都在这里面
另外,`GlobalCppRandomEngine.cpp`和`GlobalCppRandomEngine.h`目前只是在全局提供随机数引擎。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这是使用 C++ 实现的遗传算法,遗传算法针对不同问题实现起来细节可能不一样,这里罗列一下当前的实现方式具有的特性: 通过锦标赛算法选择个体 通过从上一代中剔除低适应度个体的方式去除劣质解 个体由一条染色体组成,所以程序不区分个体和染色体两个概念 通过实数编码组成染色体,求解 De jong 函数 f2 在 -2.048 到 2.048 范围内的最小值 通过两条染色体相同位置基因求和再平均进行染色体交叉 通过高斯分布的随机数对基因进行变异操作 适应度取 1 / (0.01 + f2) 算法的参数可以通过修改main.cpp中run方法的输入参数来改变 另外,程序通过面向对象方式实现且类名称和文件名存在严格的对应关系,命名都采用驼峰命名法,以及虽然不多但是每个方法和成员属性都有中文注释。
资源推荐
资源详情
资源评论
收起资源包目录
100013008-基于C++ 实现的遗传算法.zip (21个子文件)
cppmaster
src
CMakeLists.txt 1KB
GeneticAlgorithm.h.in 144B
main.cpp 1KB
GeneticAlgorithm
PopulationFactory.h 737B
Population.h 1KB
Utils
GlobalCppRandomEngine.h 541B
GlobalCppRandomEngine.cpp 176B
ChromosomeFactory.cpp 2KB
PopulationFactory.cpp 638B
Chromosome.cpp 3KB
MainProcess.cpp 8KB
ChromosomeFactory.h 2KB
Multithreading.cpp 5KB
Chromosome.h 3KB
Population.cpp 4KB
MainProcess.h 3KB
Multithreading.h 2KB
LICENSE 1KB
build
.gitkeep 0B
.gitignore 36B
README.md 4KB
共 21 条
- 1
资源评论
- ASTLAB_0012023-12-18非常有用的资源,有一定的参考价值,受益匪浅,值得下载。
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 原生微信小程序源码 - -滴滴公交-查公交
- 人工智能实验四 感知器算法的设计实现
- java小项目多线程多线程 复制文件 冒泡排序 群聊
- 四数之和(java代码).docx
- 701837906919458TapScanner v3.0.10 (Pro).apk
- 青岛大学人工智能实验二 利用α-β搜索的博弈树算法编写一字棋游戏
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 289ssm-mysql-jsp 计算机课程实验管理系统.zip(可运行源码+数据库文件+文档)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功