作业帮 > 综合 > 作业

matlab遗传算法错误求指正

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 08:36:21
matlab遗传算法错误求指正
>> %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在[-2,2]区间上的最大值
>> clear all;
>> close all;
>> global BitLength
>> global boundsbegin
>> global boundsend
>> bounds=[-2,2];%一维自变量的取值范围
>> precision=0.0001;%运算精度
>> boundsbegin=bounds(:,1);
>> boundsend=bounds(:,2);
>> %计算如果满足求解精度至少需要多长的染色体
>> BitLength=ceil(log2((boundsend-boundsbegin)'./precision));
>> popsize=50;%初始种群大小
>> Generationnmax=12;%最大代数
>> pcrossover=0.90;%交配概率
>> pmutation=0.09;%变异概率
>> %产生初始种群
>> population=round(rand(popsize,BitLength));
>> %计算适应度,返回适应度Fitvalue和累积概率cumsump
>> [Fitvalue,cumsump]=fitnessfun(population);
到这一步就错误了,原因如下:
In an assignment A(I) = B,the number of elements in B and I must be the same.
Error in fitnessfun (line 11) Fitvalue(i)=targetfun(xx);%计算函数值,即适应度
下面是各子程序:
%子程序:计算适应度函数
function [Fitvalue,cumsump]=fitnessfun(population);
global BitLength
global boundsbegin
global boundsend
popsize=size(population,1);%有popsize个个体
for i=1:popsize
x=transform2to10(population(i,:));%将二进制转换为十进制
%转化为[-2,2]区间的实数
xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1);
Fitvalue(i)=targetfun(xx);%计算函数值,即适应度
end
%给适应度函数加上一个大小合理的数以便保证种群适应值为正数
Fitvalue=Fitvalue'+230;
%计算选择概率
fsum=sum(Fitvalue);
Pperpopulation=Fitvalue/fsum;
%计算累积概率
cumsump(1)=Pperpopulation(1);
for i=2:popsize
cumsump(i)=cumsump(i-1)+Pperpopulation(i);
end
cumsump=cumsump';
%子程序:对于优化最大值或极大值函数问题,目标函数可以作为适应度函数
function y=targetfun(x);%目标函数
y=200*exp(-0.05*x).*sin(x);
我是新手,实在看不太懂,怎样改才能对呀?
fitvalue的size和xx的size不匹配,你的xx是一列元素,得到的fitvalue(i)也是一列元素,x是一个数,targetfun(x)得到的值是一个数~