C# 遗传算法求函数最大值

简介

最近做一个项目要用到人工智能,于是了解了一下神经网络和相关的常用算法,其中遗传算法(Genetic Algorithm,简称 GA)最为有趣,因为我喜欢自然和生物:)
遗传算法基本思想来自于达尔文的进化论和孟德尔的遗传学说,模拟自然选择的过程,生物群落在繁殖的过程中产生基因交叉和突变,优胜劣汰。总体来说是一种带有随机性的启发式算法,可以在整个问题空间搜索,逐步逼近最优解。更详细介绍有很多书籍、论文和网上的文章,这里不再赘述。

关键流程
1.产生初始种群
  上帝创造一批良莠不齐的生物
2.计算适应度
  生物展开生存竞争
3.根据适应度选择交叉
  嘿咻繁殖,越适应环境的产生下一代的概率越大
4.变异
  被雷劈变成超级生物,或者被蜘蛛咬变成蜘蛛侠,极小概率事件 
5.循环 2~4 的过程,直到满足退出条件

经典测试函数


本例计算其在区间 [-1, 2] 上的最大值,采用实数编码、单点交叉、赌轮选择。

 

代码

三个主要类: Defs 包含常量定义, FunctionProblem 求解的问题, Program 启动算法主程序,为简单起见,就不考虑其通用性了。

 

 

 

多次运行发现当 x = 1.85 左右时约有最大值 3.85

 

运行参数

种群规模大则计算量大,但多样性高,不易陷入局部最优解

交叉概率小则容易早熟

变异概率大则容易变成随机算法,难以收敛

 

结论

遗传算法实现起来还是相当容易,但是参数选择方面比较困难,需要多实践。

  • 1
    点赞
  • 11
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

coldljy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值