C语言多元函数的遗传算法 遗传算法多元函数最优解原理( 二 )


}
}
printf("\n");
}
int init_pop() {
int i;
One* one = group.pop[0];
for (i = 0; iNUM; i++) {
uint d = Rand_pop();
set_one(one, d);
one++;
}
return 0;
}
int sort_pop()
{
int i,j;
One* one = group.pop[0];
for (i = 0; iNUM - 1; i++) {
for (j = i + 1; jNUM; j++) {
if (one[i].vone[j].v) {
One tmp;
tmp = one[i];
one[i] = one[j];
one[j] = tmp;
}
}
}
}
void best_pop(int loop)
{
One* one = group.pop[0];
printf("loop %d: x[%lf %lf] y[%lf %lf]\n", loop, range[0][0], range[0][1], range[1][0], range[1][1]);
printf("x:%lf y:%lf value:%lf\n\n", one-x, one-y, one-v);
}
uint Rand_bits(uint* pos) {
uint l, p;
uint r = rand();
p = r % BITS;
l = (r5) % 3;
if (l + p = BITS) l = 1;
if (pos) *pos = p;
return ((1l) - 1)p;
}
uint Rand_sel() {
uint r = rand();
uint c = r % 100;
uint l = NUM / 4;
uint v = (r7) % l;
if (c65) {
return v;
}
if (c35) {
return l + v;
}
if (c10) {
return (l * 2) + v;
}
return l * 3 + v;
}
#define SWAP(m, n, type) {type _tmp; _tmp = m; m = n; n = _tmp;}
void sel_pop2(One* a, One* b, One* ga, One* gb)
{
if (a-vb-v)SWAP(a, b, One*);
if (ga-vgb-v) SWAP(ga, gb, One*);
if (ga-va-v) *a = *ga;
if (gb-vb-v) *b = *gb;
}
void cross_pop(One* a, One* b) {
uint bit;
One ga, gb, *g1 = ga, *g2 = gb;
bit = Rand_bits(NULL);
set_one(ga, (a-dbit) | (b-d~bit));
set_one(gb, (b-dbit) | (a-d~bit));
sel_pop2(a, b, ga, gb);
}
void chg_pop() {
uint bit, d, pos;
One* one, ga;
uint s = Rand_sel();
uint raw;
one = group.pop[s];
bit = Rand_bits(pos);
raw = (~one-d)bit;
d = raw | ((~bit)one-d);
set_one(ga, d);
if (ga.vone-v) {
*one = ga;
}
}
void iter_pop()
{
int i;
One* one = group.pop[0];
sort_pop();
for (i = 0; iNUM; i++) {
uint a, b;
chg_pop();
a = Rand_sel();
do {
b = Rand_sel();
}while (a == b);
cross_pop(one[a], one[b]);
}
}
#define MAX_LOOP (100)
int main() {
int i;
srand(time(NULL));
init_pop();
for (i = 0; iMAX_LOOP; i++) {
iter_pop();
best_pop(i);
if (ii % 5 == 0)scale_range();
}
return 0;
}
谁能给一个C语言的遗传算法例题这是一个非常简单C语言多元函数的遗传算法的遗传算法源代码C语言多元函数的遗传算法,是由Denis Cormier (North Carolina State University)开发的 , Sita S.Raghavan (University of North Carolina at Charlotte)修正 。代码保证尽可能少,实际上也不必查错 。对一特定的应用修正此代码,用户只需改变常数的定义并且定义“评价函数”即可 。注意代码的设计是求最大值,其中的目标函数只能取正值C语言多元函数的遗传算法;且函数值和个体的适应值之间没有区别 。该系统使用比率选择、精华模型、单点杂交和均匀变异 。如果用Gaussian变异替换均匀变异,可能得到更好的效果 。代码没有任何图形,甚至也没有屏幕输出,主要是保证在平台之间的高可移植性 。读者可以从,目录 coe/evol中的文件prog.c中获得 。要求输入的文件应该命名为‘gadata.txt’C语言多元函数的遗传算法;系统产生的输出文件为‘galog.txt’ 。输入的文件由几行组成C语言多元函数的遗传算法:数目对应于变量数 。且每一行提供次序——对应于变量的上下界 。如第一行为第一个变量提供上下界,第二行为第二个变量提供上下界,等等 。
/**************************************************************************/

推荐阅读