matlab 遗传算法参数优化,Matlab基于BP神经网络模型的遗传算法多参数优化程序

问题的提出:

假设现在有n个变量(n>=2),X1,X2,X3…Xn,一个目标参数Y

Y=f(X1,X2,X3…Xn),X(:)与Y之间的函数关系用神经网络模型来表示

现在我想用遗传算法对上述模型进行优化,使得X1,X2,X3,…Xn这n个变量适当组合使得Y为最大值。x1∈[a,b],x2∈[c,d],x3∈[e,f],…, Xn∈[z,p]

1.   自编程序怎么做,用二进制编码还是实数编码该怎么做

2.   采用遗传算法工具箱又该怎么做????????

现在假设n=3,x1∈[8.5,8.7],x2∈[0.1,0.2], x3∈[3,4],以下是自己试编的部分程序,调试出错,请高手指点!!!先谢谢啦!

P=[8.5   0.1     3.5

8.5   0.2     3.5

8.7   0.1     3.5

8.7   0.2     3.5

8.6   0.1     3

8.6   0.1     4

8.6   0.2     3

8.6   0.2     4

8.5   0.15 3

8.7   0.15 3

8.5   0.15 4

8.7   0.15 4

8.6   0.15 3.5

8.6   0.15 3.5

8.6   0.15 3.5];

T=[36.99

32.86

31.85

27.58

44.17

36.89

42.14

32.15

38.16

42.20

35.42

29.39

47.40

46.87

47.92];

P=P'

T=T'

1. BP神经网络的建立

% mybpnet.m

%BP神经网络的建立 ,命名为mybpnet.m

P %训练数据的输入

T %训练数据的输出

P=P';

T=T';

nntwarn off

[Pn,minP,maxP,Tn,minT,maxT]=premnmx(P,T);%归一化处理

%创建网络

net=newff(minmax(Pn),[12,1],{'tansig','purelin'},'trainlm'); %隐层数为12,网络结构为3-12-1

%设置训练参数

net.trainParam.show=50; %每50次显示一次

net.trainParam.lr=0.05; %学习速率

net.trainParam.epochs=1000; %最大训练次数

net.trainParam.goal=0.001;   %精度

%训练网络

net=train(net,Pn,Tn); %网络训练

yn=sim(net,Pn) %仿真输出

y=postmnmx(yn,minT,maxT) %反归一化

save BPnet net %保存网络

2. 以BP神经网络模型为基础的适应度函数

% wxffun.m

%以BP神经网络模型为基础的适应度函数,保存为wxffun.m

function eval= wxffun (x)

P %训练数据的输入

T %训练数据的输出

P=P';

T=T';

nntwarn off

[Pn,minP,maxP,Tn,minT,maxT]=premnmx(P,T);%归一化处理

load BPnet %调用保存的网络

w1=net.iw{1,1} ; %显示输入层到隐层权值

w2=net.LW{2,1}; %隐层到输出层权值

b1=net.b{1,1};   %输出隐层的阈值

b2=net.b{2,1};   %输出层的阈值

x=x(:); %输入变量个数赋值

xn=tramnmx(x, minP,maxP)   %输入变量的归一化

nntwarn off %解除警告

a1=tansig(netsum(w1*xn(:),b1));   %输入层到隐层的输出

nntwarn off %解除警告

evaln=purelin(netsum(w2*a1,b2));   %隐层到输出层的输出

eval =postmnmx(evaln,minT,maxT) % 反归一化

eval=-eval;               %把最大化转化成最小化3. 遗传算法主程序

%mygabp.m

%遗传算法工具箱 gaotv5

%注意 matlab工具箱函数必须放在工作目录下

% x1∈[8.5,8.7],x2∈[0.1,0.2], x3∈[3,4]

LB=[8.5 0.1 3];

UB=[8.7 0.2 4];

bounds=[LB ;UB]'

initPop=initializega(popu, bounds,' wxffun '); %生成初始种群,大小为20

gen=100; %最大遗传代数

[x,endPop,bPop,trace]=ga(bounds,'wxffun',[],initPop,[1e-6 1 1],'maxGenTerm',100, ...

'normGeomSelect',[0.08],['arithXover'],[2],'nonUnifMutation',[2 gen 3])   %100次遗传迭代

figure(1)

plot(endPop(:, 1), endPop(:, 2),'y*')

figure(2)

plot(trace(:, 1), trace(:, 2), 'r-', trace(:, 1), trace(:, 3), 'b-')

xlabel('Generation');

ylabel('Fittness');

legend(‘解的变化’,’种群平均值的变化’)

运行出错:

??? Error using ==> wxffun

Too many input arguments.

Error in ==> initializega at 41

eval(estr);

你可能感兴趣的:(matlab,遗传算法参数优化)