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

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

📁 遗传算法matlab实现 用遗传算法优化神经网络算法的实现
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  -100 to 100 */ <BR>&nbsp; &nbsp; &nbsp;for ( i = (MAXPOP/2) ; 
                  i &lt; MAXPOP ; 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) / 10000.0 - 50) * 2; 
                  <BR>&nbsp; &nbsp;} <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; Calculate the scores of all the vectors 
                  in all the populations &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>calc_score() <BR>{ <BR>&nbsp;int p, i; <BR>&nbsp;for ( p = 
                  0 ; p &lt; POPS ; p++ ) <BR>&nbsp; &nbsp;for ( i = 0 ; i &lt; 
                  MAXPOP ; i++ ) <BR>&nbsp; &nbsp; &nbsp;{ <BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp;apply( p, i ); <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp;score[p] = check_performance(); <BR>&nbsp; &nbsp; 
                  &nbsp;} <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; Sort the populations &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>sort_population() <BR>{ <BR>&nbsp;int p, i, j, k, best; 
                  <BR>&nbsp;/* Use insert sort */ <BR>&nbsp;for ( p = 0 ; p &lt; 
                  POPS ; p++ ) <BR>&nbsp; &nbsp;for ( i = 0 ; i &lt; (MAXPOP-1) 
                  ; i++ ) <BR>&nbsp; &nbsp; &nbsp;{ <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp;best = score[p]; <BR>&nbsp; &nbsp; &nbsp; &nbsp;for ( j 
                  = (i+1) ; j &lt; MAXPOP ; j++ ) <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp;if ( score[p][j] &gt; best ) <BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp;{ <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp;best = score[p][j]; <BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;k = j; <BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp;} <BR>&nbsp; &nbsp; &nbsp; &nbsp;if 
                  ( best &gt; score[p] ) <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp;pop_swap( p, i, k ); <BR>&nbsp; &nbsp; &nbsp;} <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; Show (on the standard output) the best 
                  scores of all populations &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>statistics( generation ) <BR>&nbsp; &nbsp; int generation; 
                  <BR>{ <BR>&nbsp;int p; <BR>&nbsp;if ( generation % MIXGEN == 0 
                  ) <BR>&nbsp; &nbsp;printf("-----------------------------\n"); 
                  <BR>&nbsp;printf(" %4d) First are: ", generation); 
                  <BR>&nbsp;for ( p = 0 ; p &lt; POPS ; p++ ) &nbsp;printf("%3d 
                  ", score[p][0] ); <BR>&nbsp;printf(" (from %d)\n",total); 
                  <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;Generate the next generation in all 
                  populations &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_next_generation( generation ) <BR>&nbsp; &nbsp; int 
                  generation; <BR>{ <BR>&nbsp;int p, i, j, k1, k2, m; 
                  <BR>&nbsp;float dev; <BR>&nbsp;for ( p = 0 ; p &lt; POPS ; p++ 
                  ) <BR>&nbsp; &nbsp;{ <BR>&nbsp; &nbsp; &nbsp;/* keep best - 
                  BESTPOP */ <BR>&nbsp; &nbsp; &nbsp;/* add another group, 
                  randomly &nbsp;- (SELPOP-BESTPOP) */ <BR>&nbsp; &nbsp; 
                  &nbsp;for ( i = BESTPOP ; i &lt; SELPOP ; i++ ) <BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp;pop_swap( p, i, (irand( MAXPOP - i ) + i) 
                  ); <BR>&nbsp; &nbsp; &nbsp;/* create new individuals */ 
                  <BR>&nbsp; &nbsp; &nbsp;for ( i = SELPOP ; i &lt; NEWPOP ; 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) / 100000.0 - 5) * 2; <BR>&nbsp; &nbsp; 
                  &nbsp;/* &nbsp;SELPOP to MUT1 will be severe mutations */ 
                  <BR>&nbsp; &nbsp; &nbsp;for ( i = NEWPOP ; i &lt; MUT1 ; i++ ) 
                  <BR>&nbsp; &nbsp; &nbsp; &nbsp;{ <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp;pop_copy( p, i, p, irand(NEWPOP) ); <BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp; &nbsp;dev = 1 + ((irand(2000) - 1000 )/ 
                  5000); <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
                  &nbsp;pop[p][irand(SIZE)] *= dev; <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp;dev = 1 + ((irand(2000) - 1000 )/ 5000); 
                  <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pop[p][irand(SIZE)] *= 
                  dev; <BR>&nbsp; &nbsp; &nbsp; &nbsp;} <BR>&nbsp; &nbsp; 
                  &nbsp;/* MUT2 to MAXPOP will be crossovers */ <BR>&nbsp; 
                  &nbsp; &nbsp;for ( i = MUT1 ; i &lt; MAXPOP ; i++ ) <BR>&nbsp; 
                  &nbsp; &nbsp; &nbsp;{ <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* 
                  Every several generations (set by MIXGEN) there is a 
                  cross-over <BR><BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
                  between different populations. */ <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp;pop_copy( p, i, (((generation%MIXGEN)==0) ? 
                  irand(POPS) : p), iran <BR>d(NEWPOP) ); <BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp;j = irand(NEWPOP); <BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp;k1 = irand( SIZE - 1); <BR>&nbsp; &nbsp; 
                  &nbsp; &nbsp; &nbsp;k2 = irand( SIZE - 1 - k1 ) + k1 + 1; 
                  <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for ( m = k1 ; m &lt;= 
                  k2 ; m++ ) pop[p][m] = pop[p][j][m]; <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp;/* Mutate slightly */ <BR>&nbsp; &nbsp; &nbsp; 
                  &nbsp; &nbsp;dev = 1 + ((irand(2000) - 1000 )/ 50000); 
                  <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pop[p][irand(SIZE)] *= 
                  dev; <BR>&nbsp; &nbsp; &nbsp; &nbsp;} <BR>&nbsp; &nbsp;} 
                  <BR>&nbsp;calc_score(); <BR>&nbsp;sort_population(); 
                  <BR>&nbsp;statistics( generation ); <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;Return the number of cases for which the 
                  NN returns the correct value &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>check_performance() <BR>{ <BR>&nbsp;vector x; 
                  <BR>&nbsp;int j, count=0; <BR>&nbsp;for ( j = 0 ; j &lt; total 
                  ; j++ ) <BR>&nbsp; &nbsp;{ <BR>&nbsp; &nbsp; &nbsp;x = 
                  test[j]; <BR>&nbsp; &nbsp; &nbsp;if ( net(x) == hits[j] ) 
                  <BR>&nbsp; &nbsp; &nbsp; &nbsp;count++; <BR>&nbsp; &nbsp;} 
                  <BR>&nbsp;return count; <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;Get data (read input file) &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 get_data() <BR>{ <BR>&nbsp;char* FileName = 
                  "/tmp/nn-input"; <BR>&nbsp;FILE *fd; <BR>&nbsp;int i, posnum, 
                  negnum; <BR>&nbsp;float x,y; <BR>&nbsp;/* opens the file 
                  &nbsp;*/ <BR>&nbsp;if ( (fd = fopen(FileName,"r")) == NULL ) 
                  <BR>&nbsp; &nbsp;{ <BR>&nbsp; &nbsp; &nbsp;printf 
                  ("no-input-file"); <BR>&nbsp; &nbsp; &nbsp;exit(10); 
                  <BR>&nbsp; &nbsp;} <BR>&nbsp;/* Total number of input values 
                  */ <BR>&nbsp;total = 0; <BR>&nbsp;/* read the positive 
                  examples */ <BR>&nbsp;fscanf( fd, "%d", &amp;posnum); 
                  <BR>&nbsp;if (posnum &gt; LIMIT) <BR>&nbsp; &nbsp;{ <BR>&nbsp; 
                  &nbsp; &nbsp;printf("Error"); <BR>&nbsp; &nbsp; 
                  &nbsp;exit(20); <BR>&nbsp; &nbsp;} <BR>&nbsp;for ( i = 0 ; i 
                  &lt; posnum ; i++ ) <BR>&nbsp; &nbsp;{ <BR>&nbsp; &nbsp; 
                  &nbsp;fscanf( fd, "%f %f", &amp;x, &amp;y); <BR>&nbsp; &nbsp; 
                  &nbsp;test[ total ].p[0] = x / 1000; <BR>&nbsp; &nbsp; 
                  &nbsp;test[ total ].p[1] = y / 1000; <BR>&nbsp; &nbsp; 
                  &nbsp;hits[ total++ ] = 1; &nbsp;/* 1 for positive examples */ 
                  <BR>&nbsp; &nbsp;} <BR>&nbsp;/* read the negative examples */ 
                  <BR>&nbsp;fscanf( fd, "%d", &amp;negnum); <BR>&nbsp;if 
                  ((negnum+total) &gt; LIMIT) <BR>&nbsp; &nbsp;{ <BR>&nbsp; 
                  &nbsp; &nbsp;printf("Error"); <BR>&nbsp; &nbsp; 
                  &nbsp;exit(21); <BR>&nbsp; &nbsp;} <BR>&nbsp;for ( i = 0 ; i 
                  &lt; negnum ; i++ ) <BR>&nbsp; &nbsp;{ <BR>&nbsp; &nbsp; 
                  &nbsp;fscanf( fd, "%f %f", &amp;x, &amp;y); <BR>&nbsp; &nbsp; 
                  &nbsp;test[ total ].p[0] = x / 1000; <BR>&nbsp; &nbsp; 
                  &nbsp;test[ total ].p[1] = y / 1000; <BR>&nbsp; &nbsp; 

⌨️ 快捷键说明

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