数学建模社区-数学中国
标题: 在MATLAB中如何将神经网络和遗传算法联系起来 [打印本页]
作者: trok_2005 时间: 2005-1-22 22:42
标题: 在MATLAB中如何将神经网络和遗传算法联系起来
我因科研需要刚开始接触MATLAB,发现确实如各位大侠所说是个好东西,目前我在处理一组实验数据,希望用神经网络对其进行训练,可以实现仿真,另外我还希望采用遗传算法寻优,如何将神经网络的输出转化成遗传算法需要适应度函数呢?请各位大侠多多指点,先这里谢过了。
作者: retin 时间: 2005-1-23 11:03
不好意思,我所知道的还没有这些!
遗传算法只是略微懂点!
作者: ilikenba 时间: 2005-1-23 12:26
希望你能将如何用神经网络做的仿真说清楚,既然已经仿真成功了,那所说的寻优又是指的对什么寻优呀?神经网络又作了怎样的仿真?问题不清楚,这个很难回答!
作者: trok_2005 时间: 2005-1-23 22:22
以下是引用ilikenba在2005-1-23 12:26:35的发言:
$ y. @5 \4 U6 @* h3 z5 L2 X2 g+ D- H! J* p O
希望你能将如何用神经网络做的仿真说清楚,既然已经仿真成功了,那所说的寻优又是指的对什么寻优呀?神经网络又作了怎样的仿真?问题不清楚,这个很难回答!
4 y; V5 t9 `$ _4 z2 ?
谢谢您的关注,是这样,比如说我利用正交设计获得18组实验数据,我用BP神经网络建立了网络模型,我还希望能利用这个模型求解最优,即寻找合适的网络输入,以使网络输出值达到最大。但由于神经网络模型的建立是通过神经元间的连接权值和阈值来实现的,很难用简单的函数形式表达,因此我希望采用遗传算法来寻找最优的实验条件。但我不知道怎样将神经网络的输出转化为遗传算法所需要的适应度函数。
8 i% n7 G. J5 R; y
我是用NET=NEWFF(MINMAX(P),[20,1],{'TANSIG','PURELIN'},'TRAINLM');进行建立网络,用NET=TRAIN(NET,P,T)对网络进行训练,用ANEW=SIM(NET,P)对网络进行仿真。
4 t: F0 |! W, J: S! a/ C
不知我的问题说清楚了没有,希望您或其他大侠帮忙看一下,小妹这里谢过了!
作者: ilikenba 时间: 2005-1-23 23:14
按照你的说法,你可以完全利用遗传算法寻优,并不一定要和神经网络结合的,这里只要找到一种合适的编码规则就行。对于遗传算法你完全可以随意地利用一种选择、交叉、变异规则,因为它是按照概率1收敛的,所以这些规则的选择好坏只影响收敛速度,我想你所说的适应度函数就是表示每个种群的概率密度函数吧!你完全可以按照网络输出值的数值大小计算每个种群所占的概率!
作者: trok_2005 时间: 2005-1-24 00:09
谢谢 ilikenba 的回复,我是新手,不太明白,研究了半天,编了一点东西,可运行出了问题,帮忙看看是怎么回事,如何修改,谢谢!
p=[ 40 21 2.5 6. 5
3 G6 Q- L# S3 S- @, S/ ]- ` 40 25 3. 6.5 10 2 d4 d O# \1 e. {' q. z1 V
40 30 3.5 7. 20 ] f& s; H0 Q) x/ u6 t
45 21 2.5 6.5 10 6 y3 L/ e, z- Y* Z7 i1 n
45 25 3. 7. 20
' r6 J) Y& J5 c. m9 z1 ?, {( Z 45 30 3.5 6. 5
& N7 n' P: h5 a( @ 50 21 3. 6. 20 + p0 [0 f% i2 I% [* O
50 25 3.5 6.5 5 3 |) p& t5 Q3 w8 w- f
50 30 2.5 7. 10
; e( w O# E2 f 40 21 3.5 7. 10
2 c% Y& y" s& m2 L! B9 R- {9 K 40 25 2.5 6. 20
9 j+ j1 u( x3 D8 ?# y 40 30 3. 6.5 5
, F M# e7 I# ] 45 21 3. 7. 5 ! Q) w1 S X# Y" L9 j# d8 @" y
45 25 3.5 6. 10
: O+ C7 k+ C) J 45 30 2.5 6.5 20 , k% q& l. o0 l; |, b5 S5 B
50 21 3.5 6.5 20 + E( o- z, y; V5 V8 m2 l
50 25 2.5 7. 5 ; G' Q* F G4 x) `1 e: \
50 30 3. 6. 10];
t=[2.673;3.412;1.315;2.019;1.996;0.885;9.317;4.484;1.768;5.720;2.316;0.678;1.042;1.492;0.765;8.812;1.204;3.130];; W# O& r, C( Q0 p
T=t';& }) Y2 b0 O) U# @0 h, d: P
P=p';6 Q( i0 ~7 z& \& K# y% b1 s
net=newff(minmax(P),[12,1],{'tansig','purelin'},'trainlm');, y+ b, e5 b, u! J/ z/ U" @9 m
%训练网络
net.trainParam.show=10;* y- t% J0 `1 p2 I" |/ E6 A9 m; a$ M
%net.trainParam.lr=0.05;
/ u" p! Y5 H6 Y' i. G%net.trainParam.lr_inc=1.05;
& z9 K! B6 Q( }5 R$ ynet.trainParam.epochs=10000;# a) }2 e6 S! a: O, [9 n
net.trainParam.goal=1e-5;
# @. H, J% v, b- e% randn('seed',192736547);% b: ?7 R6 V; ^. d* ]% \- e
% net=init(net);6 o2 a9 q4 X8 f: `
[net,tr]=train(net,P,T);
. B/ o0 R. d9 g) S" Y' G9 Wminmax_var=minmax(P);+ L, H0 K, d. D
minmax_target=minmax(T);" a8 J# o+ i% W
save('result','net','minmax_var','minmax_target');
% 将网络输 转换成
+ x$ b* b2 Y' q6 p- l1 Y4 _+ ^4 J \
! x5 ^4 X2 K! \7 ^# A" f0 y" l$ x load('result');! M& ~! y9 n0 O2 M+ D) X. D
[Pnew,endPop,bestSols,trace]=ga(minmax(P),'fitness');
1 T1 q( _& C$ {2 e; d3 | & H1 {( B% k6 |8 D, j7 l9 n
%性能跟踪
" P3 V; w& U3 V/ T' v3 a plot(trace(:,1),trace(:,3),'y-');
4 [' [4 [( M7 H0 ~ hold on
* y* B5 S: }; r' f9 q4 [ plot(trace(:,1),trace(:,2),'r-');
, T2 P( e3 i9 F N: ?3 s4 F# N1 q xlabel('Generation');
4 D' o2 R3 R- R( a, f) S7 Z ylabel('Fitness');% E, h. m% V( t8 h# O
legend('change of solution','average change of population');
6 P$ ~7 f5 L7 o, j. x% J E0 OTRAINLM, Epoch 0/10000, MSE 12.2801/1e-005, Gradient 1739.63/1e-010 E) f9 P5 j5 `2 h0 R
TRAINLM, Epoch 10/10000, MSE 0.694955/1e-005, Gradient 93.6508/1e-0104 P! }9 v1 t3 z- w6 J
TRAINLM, Epoch 20/10000, MSE 0.0242391/1e-005, Gradient 2.89095/1e-0104 L0 p* A' Z8 H) S0 H
TRAINLM, Epoch 30/10000, MSE 0.0206875/1e-005, Gradient 4.2655/1e-010
( N+ N; g% A( M! @: D5 T4 JTRAINLM, Epoch 40/10000, MSE 0.0185878/1e-005, Gradient 18.249/1e-0101 t6 O, @* _' C9 n- p$ P0 G/ @* P8 P
TRAINLM, Epoch 50/10000, MSE 0.00947447/1e-005, Gradient 55.0854/1e-0106 ?/ s' @3 _/ D* e: j/ k( J
TRAINLM, Epoch 53/10000, MSE 1.24279e-006/1e-005, Gradient 0.504667/1e-010
7 G+ ?7 Y" J2 ]4 I. C! Z0 x% } b5 h: ^TRAINLM, Performance goal met.
??? Undefined function or variable 'minmax_target'.
Error in ==> D:\MATLAB6p5p1\work\fitness.m: W) G% o6 b/ i5 n1 e: y
On line 2 ==> min_target=minmax_target(1);
Error in ==> D:\MATLAB6p5p1\work\initializega.m4 a2 ~% w8 C4 O1 I, y# v
On line 41 ==> eval(estr);
Error in ==> D:\MATLAB6p5p1\work\ga.m% g" a, \1 ^+ t: [8 [: x" o8 C
On line 148 ==> startPop=initializega(80,bounds,evalFN,evalOps,opts(1:2));
, c% f f. [# d( `所使用的适应度函数是
function [sol,eval]=fitness(P,options)
% o* O& P D) Y5 R/ B4 K min_target=minmax_target(1);
; B2 }7 K7 a) ?9 C# I. F- N$ x max_target=minmax_target(2);- w! x0 K) ?3 z9 }0 p1 r. l
eval=sim(net,P)
: T! J8 ?* P' E. i9 t# y) P if isformax9 F# M# A9 t* ?
eval=eval-min_target+(max_target-min_target);. h6 s( H5 |2 G+ |5 i
else7 Z L. H9 s5 o$ ~
eval=-eval+max_target+(max_target-min_target);- D* S, D4 M4 w2 w, v$ W$ b; C
end
作者: cdqxc 时间: 2008-2-26 22:37
有没有一种数据处理方法可以改进BP神经网络的预测精度的?
作者: lzh0601 时间: 2008-4-19 23:15
找本专著看吧
作者: dsh1001 时间: 2008-10-28 16:27
我也是你这种问题,就是通过实验获得数据,然后建立模型进行训练、仿真和预测,这些都可以
5 S1 Y- s" G; P1 P9 w' r, N& ?' r. f就是最后如何实现参数的优化,就是给定了输出如何确定最优的输入
: G, \8 j# A( X+ C# N' R好像是用模拟退火算法之类的可以实现,目前还没有解决,期待你解决以后多交流
作者: chang_bo321 时间: 2009-2-22 16:25
是个比较麻烦的问题啊
作者: 王捷浩 时间: 2009-3-5 23:30
额。。。比较复杂啊~呵呵 找篇文章看看吧~
作者: daidai0124 时间: 2009-3-18 20:27
啊.... 这么巧和我的问题一样啊,有那位高手进来详细的解答解答啊
作者: raosu 时间: 2009-4-1 08:43
顶!!!!!!!!!!!!
作者: lyaya2004 时间: 2009-6-4 09:11
有人研究出来了吗?多交流。。。。
作者: jluzhking 时间: 2009-8-30 00:46
初学,路过
作者: 347196468 时间: 2010-8-14 21:19
%获得网络的输入样本P和目标样本T8 ~& w) C( K; Q/ g) e2 A' }
9 L; W l( I( I0 sP=[1 0.6 0.1 0 0 0 0 1 0.5 0 0 0 0 0;4 K3 v* b+ @: I" G2 C& ?2 S& z8 h0 _0 U7 w. G# e3 a
1 0.6 0.1 0 0 0 0 0 0.5 1 0.4 0 0 0;9 |( R: l2 i; {7 p. o2 J% m6 Q, m4 W# n- l+ k
1 0.6 0.1 0 0 0 0 0 0 0 0.4 1 0.6 0;% {& t2 P3 c5 l$ B$ B5 S! N2 e
) A, ^* Z% o j1 0.6 0.1 0 0 0 0 0 0 0 0 0 0 0.8;) W( b h! d6 V3 J9 O& b7 n6 E1 I2 b7 o' a
0 0.6 0.6 0 0 0 0 1 0.5 0 0 0 0 0;; G6 ?) Q# P: @. f4 i& c
L- y/ F% L5 ? C2 {- T, c0 0.6 0.6 0 0 0 0 0 0.5 1 0.4 0 0 0;$ N F( j A$ |- d1 k$ G/ K+ k" Y; Q6 K. E5 @* Z+ }9 U' v
0 0.6 0.6 0 0 0 0 0 0 0 0.4 1 0.6 0;
$ F8 a2 o+ U9 ^' e% ^/ d- J+ R. \6 Q* |! h# _4 H2 z2 U6 _0 0.6 0.6 0 0 0 0 0 0 0 0 0 0 0.8;% V, f5 |% e2 r3 ^& D
) L3 v3 n; R$ P5 i& c7 i$ D: _0 0 0.6 1 0 0 0 1 0.5 0 0 0 0 0;
2 f. x" K4 y5 k+ s/ }$ }2 u' J' O& Y0 0 0.6 1 0 0 0 0 0.5 1 0.4 0 0 0;
0 R D" G- g' |) Q! B9 H4 R5 Z, r x# V' y- F! J/ [, B* f0 0 0.6 1 0 0 0 0 0 0 0.4 1 0.6 0;" h( s# ?% u' g$ h* X
7 T9 c0 b* _* E8 {5 ~$ O" a0 0 0.6 1 0 0 0 0 0 0 0 0 0 0.8;4 a8 E1 o& H+ B9 M, r
- _7 x- i' b" f* G5 P- G0 0 0 0 1 0.6 0 1 0.5 0 0 0 0 0;! p$ q8 S1 V+ @9 t7 i. o+ c2 Y$ D+ d- j g5 v' @3 j: P+ y2 o5 N
0 0 0 0 1 0.6 0 0 0.5 1 0.4 0 0 0;5 e* _9 w. i: p' ]; U. H+ K# f$ G t X5 V- |' f' h- u
0 0 0 0 1 0.6 0 0 0 0 0.4 1 0.6 0; ^9 S7 i) L" N1 r+ {0 g& I& z. O$ o3 x# W
0 0 0 0 1 0.6 0 0 0 0 0 0 0 0.8]';/ Q' c' j* D1 Y9 w. a5 [
; ^+ J2 ]4 a+ Z0 xT=[1 0.5 0 0 0 0 0 0;+ F, _7 y% q B" Z3 G' P* `$ q7 ?7 l t) N
0 0 0 0.2 0.6 1 0.6 0.2;
: F$ J) K: A8 T5 g/ `, V3 o% j. o' M5 N0 I, R/ x! D0 |1 g0 0 0 0.2 0.6 1 0.6 0.2;2 F- g1 H, Q6 j1 { Y
" \. Q$ ] \, m0 0 0 0.2 0.6 1 0.6 0.2;
( A2 U6 X3 X8 z9 C% D6 e/ B1 ^( h6 V) |0.4 0.8 1 0.8 0.4 0.2 0 0;$ |- |! B. _- E& l1 K
h1 k7 Z/ Y! w( R I* }0 0 0 0.2 0.6 1 0.6 0.2;/ y8 U A! f( O( H( m5 V1 [5 M$ Z. c8 I0 f
0 0 0 0 0 0.2 0.5 0.8;
6 M [4 N2 d$ T* u5 I: t t) a8 J+ Z, ~8 {1 q3 Y! `( g0 0 0 0.2 0.6 1 0.6 0.2;
! g7 A/ g2 M3 o) O9 @1 i2 P- E1 M8 K8 Y) ?/ M- m0 0 0 0.2 0.6 1 0.6 0.2;( K1 W& p9 b7 r6 a7 [; a+ _1 W/ S p( y& j, l( w9 d
0 0 0 0.2 0.6 1 0.6 0.2;: y: H2 d) b) c4 ?& l
4 m6 e3 Y* J! u( n. u3 U0 0 0 0 0 0.2 0.5 0.8;
* c/ @2 d% F5 l/ p E. a. e2 {, q! g& u! D* o) @! t( l4 Z0 0 0 0 0 0.2 0.5 0.8;5 }/ y1 N S, m# m, Z r; y9 J7 F4 x" k, Z/ |6 O
0 0 0 0.2 0.6 1 0.6 0.2;, Q& Q; h+ \' @+ D9 W, _6 t
3 F: `' s7 N* b# k: Y0 {0 0 0 0.2 0.6 1 0.6 0.2;% a& I% x. Y* b! S3 Z% h! y i4 p( Y$ u
0 0 0 0 0 0.2 0.5 0.8;
5 p0 ^; T/ p0 ?) n- Q' A; M+ J5 J' ?6 ?* Z0 k: e# x0 0 0 0 0 0.2 0.5 0.8]';' C0 V% _, [4 \4 q1 w
( x0 l- }8 I4 t* e%根据Kolmogorov定理,输入层有14个节点,所以中间层有29个节点$ f5 v3 N( Z/ H3 {5 x, V( F/ m2 B b8 O
%中间层神经元的传递函数为'tansig'( ]2 N$ h- w4 m
4 F _$ S% C' Z& c% }) G# y/ ~%输出层有8个节点,其神经元传递函数为logsig. V) l! s1 M# B: Y
, \; `2 P* v% b( k0 h- u7 H6 H) `%训练函数采用traingdx
" t1 Y8 _, \6 G0 C& m3 c0 \* Nnet=newff(minmax(P),[29,8],{'tansig','logsig'},'traingdx');- ?/ b# _# j0 f* p8 n" w/ h" V
; o! a6 M4 w+ J%训练步数为1000次" ?8 _& L' `% A% T; |1 ?6 e( }; N* i5 h: v% a
%训练目标误差为0.001
5 B' l9 I* l0 x: ?& F ]! [) p+ D+ cnet.trainParam.epochs=1000;* | r9 y5 [5 H2 N5 i+ Q6 @
/ x8 d+ f: T% _/ b) w- g, O- K- unet.trainParam.goal=0.001;6 `( E7 F9 N5 R
; H% t7 b: r8 W, G9 O+ i5 {* Lnet=train(net,P,T);; \7 P2 W, `. E+ h, o/ B# I1 l) M
7 ~) |2 R6 p& eY=sim(net,P);
2 ~* d6 ~; P. h( S" k$ `7 J, m: ]' a& `$ b' K& z& a%求训练值在每一个点上的误差: \5 F' N/ k7 o
1 M0 o _6 f5 R/ P" D' pfor i=1:16- x+ V4 D# |5 Y; P+ k7 K9 u C4 t
8 B* m8 \- W: _! N/ j x(i)=norm(Y(:,i));
4 a7 P9 B6 c8 y; ^% r5 o( Z9 A; [ n* ^* P% e
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |