⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 『 高性能计算 』 - 神经网络遗传算法---绝对好东西.htm

📁 遗传算法matlab实现 用遗传算法优化神经网络算法的实现
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  MUT1-NEWPOP = Number of mutations in the first muta <BR>tion 
                  group */ <BR>#define MIXGEN &nbsp;10 &nbsp; &nbsp;/* Number of 
                  generations between population mixing */ <BR>typedef struct 
                  <BR>{ <BR>&nbsp;float p[NUM]; <BR>} vector; <BR>/* NN related 
                  */ <BR>vector test[LIMIT], w1, w2, w3, w4, w5, w6; <BR>int 
                  hits[LIMIT], total; <BR>float w7[6]; <BR>int b1, b2, b3, b4, 
                  b5, b6, b7; <BR>/* GA related */ <BR>float 
                  pop[POPS][MAXPOP][SIZE]; <BR>int score[POPS][MAXPOP]; 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;Randomize &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp;| <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>randomize() <BR>{ <BR>&nbsp;struct timeval tp; 
                  <BR>&nbsp;struct timezone tzp; <BR>&nbsp;/* Use time of day to 
                  feed the random number generator seed */ 
                  <BR>&nbsp;gettimeofday( &amp;tp, &amp;tzp); <BR>&nbsp;srandom( 
                  tp.tv_sec ); <BR>} 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;irand( range ) &nbsp;- return a random 
                  integer in the range 0..(range-1) &nbsp; &nbsp;| <BR>| &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>int irand( range ) <BR>&nbsp; &nbsp; int range; <BR>{ 
                  <BR>&nbsp;return( random() % range ); <BR>} 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;scalar_mult - multiply two vectors &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>float scalar_mult( x, y ) vector x, y; <BR>{ <BR>&nbsp;int 
                  i; <BR>&nbsp;float s = 0.0; <BR>&nbsp;for ( i = 0 ; i &lt; NUM 
                  ; i++ ) &nbsp;s += ( x.p * y.p ); <BR>&nbsp;return s; <BR>} 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;This function computes the NN's output 
                  for a certain input vector. &nbsp; &nbsp; | <BR>| &nbsp;The NN 
                  is constructed from 2 layers, first layer has 6 neurons, 
                  &nbsp; &nbsp; &nbsp; &nbsp;| <BR>| &nbsp;second layer has 1 
                  neuron. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | <BR>| &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>int net( x ) vector x; <BR>{ <BR>&nbsp;/* First layer */ 
                  <BR>&nbsp;float a1 = atanpi( scalar_mult( w1, x ) + b1 ) / 
                  1.6; &nbsp;/* atan transfer fu <BR>nction */ <BR>&nbsp;float 
                  a2 = atanpi( scalar_mult( w2, x ) + b2 ) / 1.6; &nbsp;/* atan 
                  transfer fu <BR>nction */ <BR>&nbsp;int &nbsp; a3 = ( 
                  scalar_mult( w3, x ) + b3 ) &gt; 0; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp;/* hardlim transfer <BR>function */ <BR>&nbsp;int 
                  &nbsp; a4 = ( scalar_mult( w4, x ) + b4 ) &gt; 0; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp;/* hardlim transfer <BR>function */ 
                  <BR>&nbsp;float a5 = scalar_mult( w5, x ) + b5 ; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* linear transfer 
                  <BR>function */ <BR>&nbsp;float a6 = scalar_mult( w6, x ) + b6 
                  ; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* 
                  linear transfer <BR>function */ <BR>&nbsp;/* Second layer */ 
                  <BR>&nbsp;float a7 = ( a1*w7[0] + a2*w7[1] + a3*w7[2] + 
                  a4*w7[3] + <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; a5*w7[4] + a6*w7[5] + b7 ) &gt; 0.0; &nbsp; &nbsp; 
                  &nbsp; &nbsp; /* hardlim transfer <BR>function */ 
                  <BR>&nbsp;return(a7); <BR>} 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;pop_swap( p, a, b ) &nbsp;- &nbsp;swap 
                  two vectors and scores in the population p| <BR>| &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>pop_swap( p, a, b ) <BR>&nbsp; &nbsp; int p, a, b; <BR>{ 
                  <BR>&nbsp;int t, i; <BR>&nbsp;/* Swap vector */ <BR>&nbsp;for 
                  ( i = 0 ; i &lt; SIZE ; i++ ) <BR>&nbsp; &nbsp;{ <BR>&nbsp; 
                  &nbsp; &nbsp;t = pop[p][a]; <BR>&nbsp; &nbsp; &nbsp;pop[p][a] 
                  = pop[p]; <BR>&nbsp; &nbsp; &nbsp;pop[p] = t; <BR>&nbsp; 
                  &nbsp;} <BR>&nbsp;/* Swap score */ <BR>&nbsp;t = score[p][a]; 
                  <BR>&nbsp;score[p][a] = score[p]; <BR>&nbsp;score[p] = t; 
                  <BR>} 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;apply( p, i ) - &nbsp;apply the i vector 
                  of the population p on the NN &nbsp; &nbsp; &nbsp;| <BR>| 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>apply( p, i ) <BR>&nbsp; &nbsp; int p, i; <BR>{ 
                  <BR>&nbsp;/* Get the weights and biases of the neurons from 
                  the GA vector */ <BR>&nbsp;w1.p[0] = pop[p][0]; &nbsp;w1.p[1] 
                  = pop[p][1]; &nbsp;b1 = pop[p][2]; <BR>&nbsp;w2.p[0] = 
                  pop[p][3]; &nbsp;w2.p[1] = pop[p][4]; &nbsp;b2 = pop[p][5]; 
                  <BR>&nbsp;w3.p[0] = pop[p][6]; &nbsp;w3.p[1] = pop[p][7]; 
                  &nbsp;b3 = pop[p][8]; <BR>&nbsp;w4.p[0] = pop[p][9]; 
                  &nbsp;w4.p[1] = pop[p][10]; &nbsp;b4 = pop[p][11]; 
                  <BR>&nbsp;w5.p[0] = pop[p][12]; &nbsp;w5.p[1] = pop[p][13]; 
                  &nbsp;b5 = pop[p][14]; <BR>&nbsp;w6.p[0] = pop[p][15]; 
                  &nbsp;w6.p[1] = pop[p][16]; &nbsp;b6 = pop[p][17]; 
                  <BR>&nbsp;w7[0] = pop[p][18]; <BR>&nbsp;w7[1] = pop[p][19]; 
                  <BR>&nbsp;w7[2] = pop[p][20]; <BR>&nbsp;w7[3] = pop[p][21]; 
                  <BR>&nbsp;w7[4] = pop[p][22]; <BR>&nbsp;w7[5] = pop[p][23]; 
                  <BR>&nbsp;b7 &nbsp; &nbsp;= pop[p][24]; <BR>} 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;pop_copy( p1, a, p2, b ) - copy the 
                  vector b in the population p2 into | <BR>| &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; the vector a in the population p1. &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp;| <BR>| &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>pop_copy( p1, a, p2, b) <BR>&nbsp; &nbsp; int p1, a, p2, 
                  b; <BR>{ <BR>&nbsp;int i; <BR>&nbsp;for ( i = 0 ; i &lt; SIZE 
                  ; i++ ) <BR>&nbsp; &nbsp;pop[p1][a] = pop[p2]; <BR>} 
                  <BR>/*-----------------------------------------------------------------------*\ 
                  <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; | <BR>| &nbsp;Initialize the populations &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; | <BR>| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; | 
                  <BR>\*-----------------------------------------------------------------------*/ 
                  <BR>make_initial_population() <BR>{ <BR>&nbsp;int p, i, j; 
                  <BR>&nbsp;for ( p = 0 ; p &lt; POPS ; p++ ) <BR>&nbsp; &nbsp;{ 
                  <BR>&nbsp; &nbsp; &nbsp;/* Half population gets values from -1 
                  to 1 */ <BR>&nbsp; &nbsp; &nbsp;for ( i = 0 ; i &lt; 
                  (MAXPOP/2) ; i++ ) <BR>&nbsp; &nbsp; &nbsp; &nbsp;for ( j = 0 
                  ; j &lt; SIZE ; j++ ) <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp;pop[p][j] = ((random()&amp;1048575) / 1000000.0 - 0.5) * 
                  2; <BR>&nbsp; &nbsp; &nbsp;/* Half population gets values from 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -