📄 13.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 + -