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


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

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

    例:用遗传算法思想对函数 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小程序,虽然简单,但整个算法的基本步骤基本都包含了,适合复习时浏览一下。

  • 相关阅读:
    Leetcode刷题有感
    [博客迁移] 准备将博客从CSDN迁移至博客园
    加快Linux上yum下载安装包的速度(以CentOS 7,安装gcc为例)
    Linux能ping主机,但ping不了网关以及外网,显示包全丢失解决方案
    如何设置centos7的ip地址配置信息,让我的主机和它互Ping,以及远程登陆
    线程池 ThreadPoolTaskExecutor
    java Http请求
    java排序
    java的代理
    java的反射机制
  • 原文地址:https://www.cnblogs.com/runsdeep/p/i_am_learning_1.html
Copyright © 2020-2023  润新知