遗传算法优化函数
A. matlab上的遗传算法函数优化
用ga函数,ga函数就是遗传算法的函数,它的调用格式为:
x
=
ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon,options)
fitnessfcn就是待优化函数,nvars为变量个数,然后后面的lb是下界,ub是上界,你这个问题就需要这4个位置的参数,其他位置的参数用[]代替就行,由于ga函数默认是求待优化函数的最小值,所以要想求最大值需要把待优化函数取负,即编写为
function
y=myfun(x)
y=-x.*sin(10*pi.*x)-2;
把这个函数存为myfun.m,然后在命令行里敲
x=ga(@myfun,1,[],[],[],[],[1],[2])
会返回
optimization
terminated:
average
change
in
the
fitness
value
less
than
options.tolfun.
x
=
1.8506
由于遗传算法的原理其实是在取值范围内随机选择初值然后进行遗传,所以可能每次运行给出的值都不一样,比如再运行一次会返回
optimization
terminated:
average
change
in
the
fitness
value
less
than
options.tolfun.
x
=
1.6507
这个具体原因需要参考遗传算法的有关资料
B. 基于Matlab的函数优化遗传算法程序
新建一个函数
_f.m
function
f=_f(x)
f=0.5-((sin(sqrt(x(1)^2+x(2)^2)))^2-0.5)/(1+0.001*(x(1)^2+x(2)^2)^2)
然后用fmins函数寻找极值。
x
=
fmins('_f',
[0
0],
[2
2]);
另外你的语句中有错,少写了一个括号,你再自己检查一下。
C. 如何用遗传算法优化模糊控制器中的控制规则和隶属度函数
你说的应该是模糊控制的隶属度函数吧
(1)模糊统计法: 模糊统计法的基本思想是对论域U上的一个确定元素vo是否属于论域上的一个可变动的清晰集合A3作出清晰的判断.对于不同的试验者,清晰集合 A3可以有不同的边界,但它们都对应于同一个模糊集A.模糊统计法的计算步骤是:在每次统计中, vo是固定的,A3的值是可变的,作 n次试验,其模糊统计可按下式进行计算 v0对 A 的隶属频率 = v0∈A 的次数 / 试验总次数 n 随着 n的增大,隶属频率也会趋向稳定,这个稳定值就是 vo对A 的隶属度值.这种方法较直观地反映了模糊概念中的隶属程度,但其计算量相当大. (2)例证法: 例证法的主要思想是从已知有限个μA的值,来估计论域 U 上的模糊子集 A 的隶属函数.如论域 U代表全体人类,A 是“高个子的人”.显然 A 是一个模糊子集.为了确定μA,先确定一个高度值 h,然后选定几个语言真值(即一句话的真实程度)中的一个来回答某人是否算“高个子”.如语言真值可分为“真的”、“大致真的”、“似真似假”、“大致假的”和“假的”五种情况,并且分别用数字1、0.75、0.5、0.25、0来表示这些语言真值.对 n个不同高度h1、h2、…、hn都作同样的询问,即可以得到 A 的隶属度函数的离散表示. (3)专家经验法: 专家经验法是根据专家的实际经验给出模糊信息的处理算式或相应权系数值来确定隶属函数的一种方法.在许多情况下,经常是初步确定粗略的隶属函数,然后再通过“学习”和实践检验逐步修改和完善,而实际效果正是检验和调整隶属函数的依据. (4)二元对比排序法: 二元对比排序法是一种较实用的确定隶属度函数的方法.它通过对多个事物之间的两两对比来确定某种特征下的顺序,由此来决定这些事物对该特征的隶属函数的大体形状.二元对比排序法根据对比测度不同,可分为相对比较法、对比平均法、优先关系定序法和相似优先对比法等.
编辑本段举例
D. 如何用遗传算法实现多变量的最优化问题
将多个变量的数值编码编排进去,进行组合,只需要增长基因个体的长度,但是要明确每个变量具体的位置,然后让每个变量转化成二进制的等长编码,组合在一起,就可以来运算了。
具体操作步骤如下:
1、首先要利用一个矩阵去跟踪每组迭代的结果的大小:
2、然后,要构造一个译码矩阵FieldD,由bs2rv函数将种群Chrom根据译码矩阵换成时值向量,返回十进制的矩阵:
且FieldD矩阵的结构如下:
3、要先将目标函数显示出来,看看基本的函数的形式:
4、设计遗传算法的参数估计:
5、经遗传算法之后,这个最优解的位置是:(图中标记蓝点的位置)
E. 神经网络遗传算法函数极值寻优
对于未知的非线性函数,仅通过函数的输入输出数据难以准确寻找函数极值。这类问题可以通过神经网络结合遗传算法求解,利用神经网络的非线性拟合能力和遗传算法的非线性寻优能力寻找函数极值。本文用神经网络遗传算法寻优如下非线性函数极值,函数表达式为
函数图形如下图1所示。
从函数方程和图形可以看出,该函数的全局最小值为0,对应的坐标为(0,0)。虽然从函数方程和图形中很容易找出函数极值及极值对应坐标,但是在函数方程未知的情况下函数极值及极值对应坐标就很难找到。
神经网络遗传算法函数极值寻优主要分为BP神经网络训练拟合和遗传算法极值寻优两步,算法流程如下图2所示。
神经网络训练拟合根据寻优函数的特点构建合适的BP神经网络,用非线性函数的输出数据训练BP网络,训练后的BP神经网络就可以预测函数输出。遗传算法极值寻优把训练后的BP神经网络预测结果作为个体适应度值,通过选择、交叉和变异操作寻找函数的全局最优值及对应输入值。
本文根据非线性函数有2个输入参数、1个输出参数,确定BP神经网络结构为2-5-1.取函数的4 000组输入输出数据,从中随机选取3 900组数据训练网络,100组数据测试网络性能,网络训练好后用于预测非线性函数输出。
遗传算法中个体采用实数编码,由于寻优函数只有2个输入参数,所以个体长度为2。个体适应度值为BP神经网络预测值,适应度值越小。交叉概率为0.4,变异概率为0.2。
用函数输入输出数据训练BP神经网络,使训练后的网络能够拟合非线性函数输出,保存训练好的网络用语计算个体适应度值。根据非线性函数方程随机得到该函数的4 000组输入输出数据,存储于data.mat中,其中input为函数输入数据,output为函数对应输出数据,从中随机抽取3 900组训练数据训练网络,100组测试数据测试网络拟合性能。最后保存训练好的网络。
把训练好的BP神经网络预测输出作为个体适应度值。
BP神经网络拟合结果分析
本文中个体的适应度值为BP神经网络预测值,因此BP神经网络预测精度对于最优位置的寻找具有非常重要的意义。由于寻优非线性函数有2个输入参数、1个输出参数,所以构建的BP神经网络的结构为2-5-1。共取非线性函数4 000组输入输出数据,从中随机选择3 900组数据训练BP神经网络,100组数据作为测试数据测试BP神经网络拟合性能,BP神经网络预测输出和期望输出对比如下图3所示。
从BP神经网络预测结果可以看出,BP神经网络可以准确预测非线性函数输出,可以把网络预测近似看成函数实际输出。
遗传算法寻优结果分析 BP神经网络训练结束后,可以利用遗传算法寻找该非线性函数的最小值。遗传算法的迭代次数是100次,种群规模是20,交叉概率为0.4,变异概率为0.2,采用浮点数编码,个体长度为21,优化过程中最优个体适应度值变化曲线如下图4所示。
本文所使用的方法有比较重要的工程应用价值,比如对于某项试验来说,试验目的是获取到最大试验结果对应的实验条件,但是由于时间和经费限制,该试验只能进行有限次,可能单靠试验结果找不到最优的试验条件。这时可以在已知试验数据的基础上,通过本文介绍的神经网络遗传算法寻找最优试验条件。
思路就是先根据试验条件数和试验结果数确定BP神经网络结构;然后把试验条件作为输入数据,试验结果作为输出数据训练BP网络,使得训练后的网络可以预测一定试验条件下的试验结果;最后把试验条件作为遗传算法中的种群个体,把网络预测的试验结果作为个体适应度值,通过遗传算法推导最优试验结果及其对应试验条件。