⑴ 这是用遗传算法求解matlab多峰函数最大值的程序 看了一天 还是很混乱 希望高手给详细讲解一下
首先第一步你要懂遗传算法的各个部分,然后对照各个部分的算法,看代码。
希望这个回答另你满意。
⑵ matlab遗传算法编程求最大值的问题
(1)关于fitness value,你要自己定义一个函数,如你所说从25个x变量经过一系列运算得到y值 可以其作为fitness value
(2)由于x的取值是离散的 染色体不一定要是二进制 最简单的做法是一个5进制的长为25的串
⑶ matlab,遗传算法,求大佬帮忙
用遗传算法求最大值问题,可以这样来解决。
1、将最大值问题转换为最小值问题,即 max Z =- min Z;
2、建立其自定义函数,即
z=-(f1*40^1.5/1+f2*30^1.5/2+f2*20^1.5/2+。。。+f12*127^1.5/2+f12*5^1.5/4)
其中:f1,f2,f3,。。。f11,f12为0,1变量,可以用sign()符号函数来处理。
3、用遗传算法ga()函数求解,使用方法
objectivef=@ga_func;
nvars=12;
[x, fval] =ga(objectivef,nvars)
4、编程运行后得到
f1=1,f2=1,f3=1,f4=0,f5=1,f6=0,f7=1,f8=1,f9=1,f10=1,f11=1,f12=1
Zmax=27329.5018
⑷ 请问用matlab怎样求一个函数的最大值
用matlab求函数最大值的步骤如下:
1.
打开matlab软件,清空桌面环境;
clear
clc
⑸ (遗传算法)已知一系列多元函数的点(如A、B、C到D的函数点),如何用matlab的遗传算法工具箱求其最大值
首先要有一个目标函数,如:y=x1^2-1+x2^3,变量个数,如 2
再有不等式、等式、边界约束 ,如无则为[]
用命令求最小值点:
[x,fva]=ga(@y,2,A,b,Aeq,beq,Lb,Ub)
⑹ 在matlab中如何用遗传算法求极值
matlab有遗传算法工具箱。
核心函数:
(1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数
【输出参数】
pop--生成的初始种群
【输入参数】
num--种群中的个体数目
bounds--代表变量的上下界的矩阵
eevalFN--适应度函数
eevalOps--传递给适应度函数的参数
options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如
precision--变量进行二进制编码时指定的精度
F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度)
(2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,...
termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数
【输出参数】
x--求得的最优解
endPop--最终得到的种群
bPop--最优种群的一个搜索轨迹
【输入参数】
bounds--代表变量上下界的矩阵
evalFN--适应度函数
evalOps--传递给适应度函数的参数
startPop-初始种群
opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。如[1e-6 1 0]
termFN--终止函数的名称,如['maxGenTerm']
termOps--传递个终止函数的参数,如[100]
selectFN--选择函数的名称,如['normGeomSelect']
selectOps--传递个选择函数的参数,如[0.08]
xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover']
xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0]
mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation']
mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]
注意】matlab工具箱函数必须放在工作目录下
【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9
【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08
【程序清单】
%编写目标函数
function[sol,eval]=fitness(sol,options)
x=sol(1);
eval=x+10*sin(5*x)+7*cos(4*x);
%把上述函数存储为fitness.m文件并放在工作目录下
initPop=initializega(10,[0 9],'fitness');%生成初始种群,大小为10
[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,'normGeomSelect',...
[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遗传迭代
运算借过为:x =
7.8562 24.8553(当x为7.8562时,f(x)取最大值24.8553)
注:遗传算法一般用来取得近似最优解,而不是最优解。
遗传算法实例2
【问题】在-5<=Xi<=5,i=1,2区间内,求解
f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3
【程序清单】
%源函数的matlab代码
function [eval]=f(sol)
numv=size(sol,2);
x=sol(1:numv);
eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;
%适应度函数的matlab代码
function [sol,eval]=fitness(sol,options)
numv=size(sol,2)-1;
x=sol(1:numv);
eval=f(x);
eval=-eval;
%遗传算法的matlab代码
bounds=ones(2,1)*[-5 5];
[p,endPop,bestSols,trace]=ga(bounds,'fitness')
注:前两个文件存储为m文件并放在工作目录下,运行结果为
p =
0.0000 -0.0000 0.0055
大家可以直接绘出f(x)的图形来大概看看f(x)的最值是多少,也可是使用优化函数来验证。matlab命令行执行命令:
fplot('x+10*sin(5*x)+7*cos(4*x)',[0,9])
evalops是传递给适应度函数的参数,opts是二进制编码的精度,termops是选择maxGenTerm结束函数时传递个maxGenTerm的参数,即遗传代数。xoverops是传递给交叉函数的参数。mutops是传递给变异函数的参数。
⑺ MATLAB用遗传算法ga求最大值中的最小值
MATLAB用遗传算法ga求含有最大值的最小值问题,可以这样处理:由于最大值问题的反问题就是最小值问题,所以 max=-min。因此,你的问题就可以改写为
min ( min -(3*x1+4*x2+...))
⑻ 遗传算法matlab编程求函数最大值
X1X2要先转成二进制编码,然后取随机数,从X1X2中,按这个随机数指定的位置开始交换数据,然后转回十进制.染色体还需要拆开吗?
求最大值:
len = length(fit);
max = fit(1);
position = 1;
for i=2:len
if max<fit(i)
max = fit(i);
position = i;
end
end
⑼ 通过MATLAB遗传算法的思想来解决f(x)=x*sin(10pi*x)+2.0,-1<=x<=2的最大值问题。结果精确到3位小数。
首先在matlab命令窗口输入f=@(x)-(x*sin(10*pi*x)+2) 输出结果为
>> f=@(x)-(x*sin(10*pi*x)+2)
f =
@(x)-(x*sin(10*pi*x)+2)
接着输入gatool会打开遗传算法工具箱
显示51代之后算法终止,最小结果为-3.85027334719567,对应的x为1.851,由于自定义函数加了负号,所以原式的最大值为3.85027334719567,对应的x为1.851。
不过这是遗传算法得到的结果,每次运行的结果可能会有所不同,而且不一定是确切的最大值。
遗传算法适合应用在一些求最优解比较复杂的问题(常规的算法运算时间过长,甚至无法解决)。
⑽ Matlab遗传算法求函数最大值
figure(1);
fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);
NIND=40;
MAXGEN=25;
PRECI=20;
GGAP=0.9;
trace=zeros(2,MAXGEN);
FieldD=[20;-1;2;1;0;1;1];
Chrom=CRTBP(NIND,PRECI);
gen=0;
variable=BS2RV(Chrom,FieldD);
ObjV=variable.*sin(10*pi*variable)+2.0;
while gen<MAXGEN,
FitnV=ranking(-ObjV);
SelCh=SELECT('SUS',Chrom,FitnV,GGAP);
SelCh=RECOMBIN('XOVSP',SelCh,0.7)
SelCh=MUT(SelCh);
variable=BS2RV(SelCh,FieldD);
ObjVSel=variable.*sin(10*pi*variable)+2.0;
[Chrom,ObjV]=REINS(Chrom,SelCh,1,1,ObjV,ObjVSel);
gen=gen+1;
[Y,I]=max(ObjV),hold on;
plot(variable(I),Y,'bo');
trace(1,gen)=max(ObjV);
trace(2,gen)=sum(ObjV)/length(ObjV);
end
variable=BS2RV(Chrom,FieldD);
hold on;
grid;
plot(variable',ObjV','b*');
figure(2);
plot(trace(1,:)');
hold on;
plot(trace(2,:)','-.');
grid;
看看这个能用得上么