专栏首页python3一个关于遗传算法优化的简单例子

一个关于遗传算法优化的简单例子

在课程上学了一些关于遗传算法的思想的,想用这个思想来写一个简单的小例子。

先来说遗传算法的思想:遗传算法是模拟生物的遗传、变异、选择、进化来对问题的解进行优化,可以理解为将一组初始解看成是“基因”,在求解的开始设置一个过滤器,对“基因”进行筛选,通过如果目前生成的“基因”暂不满足上述条件,那么“基因”就要开始“变异”,在迭代过程中通过产生的随机数,对“基因”进行更改,达到“变异”的目的,也就是”遗传“给了下一代。而因为变异的随机性,计算机能够相当大的范围内对问题的解进行搜索,直至随着迭代的代数继续增加而解几乎不再变化为止。这时,我们可以说,我们的得到了进化后的最优解。

例:用遗传算法思想对函数 f(x)=x^2+sin(x) 进行优化,找出该函数的极值。

(使用的Anaconda3的spyder编写的)

 1 import random as R
 2 import math
 3 import matplotlib.pyplot as plt #通常遗传算法会优图像演示需求
 4 f=lambda x:x*x+math.sin(x) #定义lambda函数,即我们要求最优解得函数
 5 x1=x0=float(input('enter a value of x:'))
 6 y1=y0=f(x0)
 7 count=0 #记录迭代代数
 8 delta=0.001 #每次变异,对x的修改量,可以使之尽量小,从而避免在遗传变异中错过最优值
 9 xi=[] #通过下x,y来记录迭代的点坐标,方便画图
10 yi=[]
11 while(count<100000): #迭代代数,可以自己设置
12     sign=R.random()
13     if sign<=0.5:
14         x0+=delta
15         if abs(y0-f(x0))<1e-6: #进化完成条件,极值处的导数为0,此时,我们将精度定位1e-6
16             break
17         count+=1
18         if y0>f(x0):
19             y0=f(x0)
20     else:
21         x1-=delta
22         if abs(y0-f(x1)<1e-6):
23             break
24         count+=1
25         if y0>f(x1):
26             y0=f(x1)  
27     if count%25==0:
28         xi.append(count)
29         yi.append(y0)
30 plt.plot(xi,yi,'r-')
31 print('极值结果为:{:.6f},迭代代数为{}代'.format(y0,count))

以上便是关于遗传算法的介绍以及一个Python小程序,虽然简单,但整个算法的基本步骤基本都包含了,适合复习时浏览一下。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • day01 python基础

    py3study
  • python简单语法2

    py3study
  • python入门基础教程10 pytho

    分支语句的作用是在某些条件控制下有选择的执行实现一定功能语句块。if 分支语句则是当if后的条件满足时,if 下的语句块被执行,语法格式如下所示:

    py3study
  • SceneKit-绘制直线

    // private func lineBetweenNodeA(beginPosition: SCNVector3, endPosition: ...

    酷走天涯
  • Java 线程池架构原理和源码解析(ThreadPoolExecutor)

    使用Executors最常用的莫过于是使用:Executors.newFixedThreadPool(int)这个方法,因为它既可以限制数量,而且线程用完后不会...

    用户4143945
  • 【swift学习笔记】六.访facebook登录页面

    代码最下边有下载地址。 做这个demo的主要心得就是自适应所有的屏幕,要先布局大的框架,再一步一步设置小的细节。 看一下效果 ? 再看一下自动适应所有屏幕的效果...

    lpxxn
  • 超级玛丽游戏

    10:超级玛丽游戏 总时间限制:1000ms 内存限制:65536kB 描述 超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。 ...

    Angel_Kitty
  • Kubectl 的替代品:kubeman

    周末闲逛 Twitter 时,发现一个很有意思的小工具叫 kubeman,野心倒是不小,励志成为 kubectl 的替代品,用于实时监控和管理 kubernet...

    米开朗基杨
  • SpringJDBC源码解析

    至此Deno工程搭建完毕,有需要源码的同学可以从下方地址获取 https://github.com/shiyujun/spring-framework

    Java学习录
  • iOS下JS与OC互相调用(八)--Cordova详解+实战

    由于项目中Cordova相关功能一直是同事在负责,所以也没有仔细的去探究Cordova到底是怎么使用的,又是如何实现JS 与 OC 的交互。所以我基本上是从零开...

    Haley_Wong

扫码关注云+社区

领取腾讯云代金券