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

📄 13.htm

📁 遗传算法的详细描述文档,文档中附带一定的代码解释
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://202.112.20.132"><font face="黑体"><big><big>白云黄鹤★</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">                     遗传算法                                                   </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="index.htm">上一层</a>][<a href="14.htm">下一篇</a>]
<hr><p align="left"><small>发信人: coy (我爱美好哦), 信区: Algorithm <br>

标  题: 遗传算法(13) <br>

发信站: 武汉白云黄鹤站 (Wed May 31 21:49:55 2000), 站内信件 <br>

  <br>

//operators.c <br>

  <br>

#include "f:\coy\mywork\lunwen\gaopc\thesis.h" <br>

void oper1(parent,fin_mat,rc) <br>

VECTOR parent; <br>

MATRIX fin_mat; <br>

INDEX rc; <br>

{ <br>

  int comp,i; <br>

  float llim,ulim; <br>

  comp = irange_ran(1,rc.c-2); <br>

  find_range(&llim,&ulim,comp,fin_mat,rc,parent); <br>

  parent[comp] = frange_ran(llim,ulim); <br>

} <br>

void oper2(parent,fin_mat,rc) <br>

VECTOR parent; <br>

MATRIX fin_mat; <br>

INDEX rc; <br>

{ <br>

{ <br>

  int comp,i; <br>

  float llim,ulim; <br>

  comp = irange_ran(1,rc.c-2); <br>

  find_range(&llim,&ulim,comp,fin_mat,rc,parent); <br>

  parent[comp] = (flip() == TAIL) ? llim : ulim; <br>

} <br>

void oper3(parent,fin_mat,rc,T,t,B) <br>

VECTOR parent; <br>

MATRIX fin_mat; <br>

INDEX rc; <br>

int B, <br>

    T, <br>

    t; <br>

{ <br>

  int comp,i; <br>

  float llim,ulim; <br>

  comp = irange_ran(1,rc.c-2); <br>

  find_range(&llim,&ulim,comp,fin_mat,rc,parent); <br>

  parent[comp] = (flip() == TAIL) ? parent[comp]-get_F(T,t,parent[comp]-llim <br>

,B) : <br>

                                     parent[comp]+get_F(T,t,ulim-parent[comp <br>

],B); <br>

],B); <br>

} <br>

void oper4(p1,p2,A,x2_vari) <br>

VECTOR p1,p2; <br>

int x2_vari; <br>

float A; <br>

{ <br>

  MATRIX child; <br>

  int i; <br>

  child = matrix(1,2,1,x2_vari); <br>

  for(i=1; i<=x2_vari; i++) <br>

    { <br>

      child[1][i] = p1[i] * A + p2[i] * (1.0-A); <br>

      child[2][i] = p2[i] * A + p1[i] * (1.0-A); <br>

    } <br>

  for(i=1; i<=x2_vari; i++) <br>

    { <br>

      p1[i] = child[1][i]; <br>

      p2[i] = child[2][i]; <br>

    } <br>

  free_matrix(child,1,2,1,x2_vari); <br>

} <br>

void oper5(p1,p2,STEP,rc,fin_mat) <br>



VECTOR p1,p2; <br>

INDEX rc; <br>

MATRIX fin_mat; <br>

int    STEP; <br>

{ <br>

  MATRIX child; <br>

  FLAG _CHECK1 = FALSE, <br>

       _CHECK2 = FALSE; <br>

  int i,n=1,cut; <br>

  child = matrix(1,2,1,rc.c-2); <br>

  cut = irange_ran(1,rc.c-2); <br>

  for(i=1; i<=cut; i++) <br>

    { <br>

      child[1][i] = p1[i]; <br>

      child[2][i] = p2[i]; <br>

    } <br>

  do <br>

    { <br>

      for(i=cut + 1; i<=rc.c-2; i++) <br>

 { <br>

   child[1][i] = p1[i] * (float)n/(float)STEP + p2[i] * (1.0-(float)n/(float <br>

)STEP); <br>

)STEP); <br>

   child[2][i] = p2[i] * (float)n/(float)STEP + p1[i] * (1.0-(float)n/(float <br>

)STEP); <br>

 } <br>

      _CHECK1 = satis_con(child[1],fin_mat,rc); <br>

      _CHECK2 = satis_con(child[2],fin_mat,rc); <br>

      n++; <br>

   }while((n<=STEP) && ((_CHECK1 == FALSE) || (_CHECK2 == FALSE))); <br>

  for(i=1; i<=rc.c-2; i++) <br>

    { <br>

      p1[i] = child[1][i]; <br>

      p2[i] = child[2][i]; <br>

    } <br>

  free_matrix(child,1,2,1,rc.c-2); <br>

} <br>

void oper6(parent,fin_mat,rc,T,t,B) <br>

VECTOR parent; <br>

MATRIX fin_mat; <br>

INDEX rc; <br>

int B, <br>

    T, <br>

    t; <br>

{ <br>

{ <br>

  int comp,i; <br>

  float llim,ulim; <br>

  for (comp=1; comp<=rc.c-2; comp++) <br>

    { <br>

  find_range(&llim,&ulim,comp,fin_mat,rc,parent); <br>

  parent[comp] = (flip() == TAIL) ? parent[comp]-get_F(T,t,parent[comp]-llim <br>

,B) : <br>

                                     parent[comp]+get_F(T,t,ulim-parent[comp <br>

],B); <br>

    } <br>

} <br>

FLAG satis_con(child,fin_mat,rc) <br>

VECTOR child; <br>

MATRIX fin_mat; <br>

INDEX rc; <br>

{ <br>

  int i,j; <br>

  float tot; <br>

  for(j=1; j<=rc.c-2; j++) <br>

    if((child[j] > fin_mat[j][rc.c]) || (child[j] < fin_mat[j][1])) <br>

      return(FALSE); <br>

  for(j=1; j<=rc.r; j++) <br>



    { <br>

      tot = 0.0; <br>

      for(i=2; i<=rc.c-1; i++) <br>

 tot = tot + fin_mat[j][i] * child[i-1]; <br>

      if((tot < fin_mat[j][1]) || (tot > fin_mat[j][rc.c])) <br>

 return(FALSE); <br>

    } <br>

  return(TRUE); <br>

} <br>

float get_F(T,t,y,B) <br>

int t,B,T; <br>

float y; <br>

{ <br>

  return(y * ( 1.0 - pow((float)t/(float)T,(float)B))*frange_ran(0.0,1.0)); <br>

} <br>

void find_range(llim,ulim,comp,fin_mat,rc,parent) <br>

float *llim,*ulim; <br>

int comp; <br>

INDEX rc; <br>

MATRIX fin_mat; <br>

VECTOR parent; <br>

{ <br>

{ <br>

  int i,j; <br>

  float tot,templ,tempu,temp; <br>

  FLAG _CHANGE=FALSE; <br>

  for(j=1; j<=rc.r; j++) <br>

    if(fin_mat[j][comp+1] != 0.0) <br>

      { <br>

 tot = 0.0; <br>

 for(i=2; i<=rc.c-1; i++) <br>

   if(i!=comp+1) <br>

     tot = tot + fin_mat[j][i] * parent[i-1]; <br>

 templ = (fin_mat[j][1] - tot) / fin_mat[j][comp+1]; <br>

 tempu = (fin_mat[j][rc.c] - tot) / fin_mat[j][comp+1]; <br>

 if(fin_mat[j][comp+1]<0) <br>

   swap(&templ,&tempu); <br>

 if(!_CHANGE) <br>

   { <br>

     *llim = templ; <br>

     *ulim = tempu; <br>

     _CHANGE = TRUE; <br>

   } <br>

 else <br>

   { <br>

   { <br>

     if(*llim < templ) <br>

       *llim = templ; <br>

     if(*ulim > tempu) <br>

       *ulim = tempu; <br>

   } <br>

      } <br>

} <br>

int irange_ran(llim,ulim) <br>

int ulim,llim; <br>

{ <br>

  int num; <br>

  if(ulim == 0) <br>

    { <br>

      printf("Divide by zero in irange_ran()\n"); <br>

      exit(1); <br>

    } <br>

  if(llim == ulim) <br>

    return(llim); <br>

  do <br>

    { <br>

      num = llim + rand() % ulim; <br>

    }while((num < llim)||(num > ulim)); <br>



  return(num); <br>

} <br>

  <br>

-- <br>

                            \○/ <br>

                              ┃ <br>

                             /\ <br>

                    脖子扭扭,屁股扭扭,大家一起来跳舞 <br>

  <br>

※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 211.69.196.11] <br>

[阅读精华区资料]  结束Q, ← │ 上一项资料 U,↑│ 下一项资料 <Enter>,<Space>,↓ <br>

  <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="index.htm">上一层</a>][<a href="14.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

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