遗传算法解决单变量函数值得优化问题

最近稍微学习一下智能算法的设计,就满Internet搜索,最终发现遗传算法是大家学习最多的,也是在各个领域内进行函数优化,解析解求解过程中很重要的一种方法!

学习遗传算法,首先为了上手较快,我推荐大家先使用Matlab,这个工具进行矩阵分析有应用,真的很管用,而且上手特别快!

http://bbs.pinggu.org/biaoqian/matlabbb/ 这个是Matlab相关下载的地方!

http://www.ilovematlab.cn/forum.php 这个网址链接是很多初学者和专业人士都在这里进行讨论交流的地方!我就在这上面学习到好多知识!

http://baike.soso.com/v100038.htm 这个网页上面有很详细的关于遗传只能算法的讲解,内容很详细,是我们学习的好帮手!希望对这个算法不是很熟悉的同学,要好好了解一下这个背景!

个人理解:其实简单的来说,就是使用一个种有效的编码方式,将有效空间中的解集,按照编码方式排布,在代价函数的作用下,不断的有目的的迭代,去寻找最后解,当然这是把这个问题给简化好多!这几其中自然包括如何去选择,如何去进化,如何避免局部最优解,对于种群进化来说应该如何避免种群的进化速度,如何去交叉!如何寻找到一个比较好的代价函数!

现在我们使用英国的谢菲尔德工具箱进行简单遗传算法的设计:下载地址:http://ishare.iask.sina.com.cn/f/7561185.html?sudaref=www.sogou.com&retcode=0

简单的一元函数的优化:

y = sin(10*pi*x)/x 1<=x<=2

参数的设置:

种群大小:40

最大遗传代数:20

个体长度:20

代沟:0.95

交叉遗传:0.7

变异概率:0.01

lb=1;ub=2;
ezplot('sin(10*pi*X)/X',[lb,ub]);
xlabel('自变量/X')
ylabel('函数值/y')



创建一个初始的种群,并用十进制数进行标示,便于计算

trace = zeros(2,MAXGEN);
FieldD = [PRECI;lb;ub;1;0;1;1];
Chrom = crtbp(NIND,PRECI);
gen = 0;
X = bs2rv(Chrom,FieldD);

代价函数:

ObjV = sin(10*pi*X)./X;


下面是主要的迭代过程:

while gen < MAXGEN
    FitnV = ranking(ObjV);
    Selch = select('sus',Chrom,FitnV,GGAP);
    Selch = recombin('xovsp',Selch,px);
    Selch = mut(Selch,pm);
    X = bs2rv(Selch,FieldD);
    ObjvSel = sin(10*pi*X)./X;
    [Chrom,ObjV] = reins(Chrom,Selch,1,1,ObjV,ObjvSel);
    X = bs2rv(Chrom,FieldD);
    gen = gen + 1;
    
    [Y,I] = min(ObjV);
    trace(1,gen) = X(I);
    trace(2,gen) = Y;
end

还有就是一些图片的显示工作!这个对于有matlab基础的同学来说是很easy的事情!在这个方向有什么要的建议我们一起讨论!



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值