BFOA
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h> #define PI (3.1415926f)
#define RND ((float)rand() / (RAND_MAX + 1))
#define X_DIM 30 //float domx[X_DIM][2] =
//{
// { -1.0f, 2.0f}, { -1.0f, 2.0f}
//}; float domx[] = { -100.0f, 100.0f}; const int S = ; // 细菌个数
float bacterium[S][X_DIM]; // 细菌
const int Nc = ; // 趋化的次数
float bacterafitness[S][Nc]; // 适应度
const int Ns = ; // 趋化操作中单向运动的最大步数4
const int Nre = ; // 复制次数
const int Ned = ; // 驱散次数
const float Ped = 0.25f; // 驱散概率
const float Ci = 1.0f; // 步长 float gbest;
float gx[X_DIM]; const float d_at = 0.05f; // 吸引剂的数量
const float w_at = 0.05f; // 吸引剂的释放速度
const float h_re = 0.05f; // 排斥剂的数量
const float w_re = 0.05f; // 排斥剂的释放速度 float get_y1( float x[X_DIM] )
{
return - ( x[] * sin( * PI * x[] ) - x[] * sin( * PI * x[] + PI + ) );
} float get_y( float x[X_DIM] )
{
register int i;
register float sum; sum = 0.0f;
for ( i = ; i < X_DIM; i ++ )
{
sum -= x[i] * x[i];
}
return sum;
} float fitness( float y )
{
return y;
} float get_jcc( int idx )
{
register int i, j;
register float a, allsum, sum, sum1, sum2; allsum = 0.0f;
for ( i = ; i < S; i ++ )
{
sum = 0.0f;
for ( j = ; j < X_DIM; j ++ )
{
a = bacterium[i][j] - bacterium[idx][j];
sum += a * a;
} sum1 = -w_at * sum;
sum1 = -d_at * exp( sum1 ); sum2 = -w_re * sum;
sum2 = h_re * exp( sum2 ); allsum += sum1 + sum2;
} return allsum;
} void init_single_bacterium( float x[X_DIM] )
{
register int i; for ( i = ; i < X_DIM; i ++ )
{
x[i] = domx[] + RND * ( domx[] - domx[] );
}
} void init_bacterium()
{
register int i, j; for ( i = ; i < S; i ++ )
{
for ( j = ; j < X_DIM; j ++ )
{
bacterium[i][j] = domx[] + RND * ( domx[] - domx[] );
}
}
} void get_delta( float delta[X_DIM] )
{
register int i;
register float tmp; tmp = 0.0f;
for ( i = ; i < X_DIM; i ++ )
{
delta[i] = ( RND - 0.5f ) * ; tmp += delta[i] * delta[i];
} tmp = sqrt( tmp ); for ( i = ; i < X_DIM; i ++ )
{
delta[i] /= tmp;
}
} int main()
{
register int i, j, k, l, m, n;
float f, f1, y, flast, tmpfit;
float delta[X_DIM];
float tmpbactera[X_DIM];
float bfsum[S];
int Sr; srand( ( unsigned int )time( NULL ) ); gbest = -10000000000.0f;
Sr = S / ;
init_bacterium(); for ( l = ; l < Ned; l ++ )
{
for ( k = ; k < Nre; k ++ )
{
for ( j = ; j < Nc; j ++ )
{
for ( i = ; i < S; i ++ )
{
y = get_y( bacterium[i] ); if ( y > gbest )
{
gbest = y;
memcpy( gx, bacterium[i], sizeof( gx ) );
} f = fitness( y );
f += get_jcc( i ); flast = f; get_delta( delta ); for ( n = ; n < X_DIM; n ++ )
{
tmpbactera[n] = Ci * delta[n] + bacterium[i][n];
} for ( m = ; m < Ns; m ++ )
{
f1 = fitness( get_y( tmpbactera ) );
if ( f1 > flast )
{
flast = f1;
for ( n = ; n < X_DIM; n ++ )
{
tmpbactera[n] += Ci * delta[n];
}
}
else
{
break;
}
} memcpy( bacterium[i], tmpbactera, sizeof( bacterium[] ) );
bacterafitness[i][j] = flast;
} printf( "[%02d,%02d,%02d]\tgbest=%f\t(%f,%f)\n", l, k, j, gbest, gx[], gx[] );
} for ( i = ; i < S; i ++ )
{
bfsum[i] = 0.0f;
for ( j = ; j < Nc; j ++ )
{
bfsum[i] += bacterafitness[i][j];
}
} for ( n = ; n < Sr; n ++ )
{
i = n;
tmpfit = bfsum[n];
for ( j = n + ; j < S; j ++ )
{
if ( bfsum[j] > tmpfit )
{
tmpfit = bfsum[j];
i = j;
}
} if ( i != n )
{
memcpy( tmpbactera, bacterium[n], sizeof( tmpbactera ) );
memcpy( bacterium[n], bacterium[i], sizeof( bacterium[] ) );
memcpy( bacterium[i], tmpbactera, sizeof( bacterium[] ) );
}
} for ( i = ; i < Sr; i ++ )
{
memcpy( bacterium[Sr + i], bacterium[i], sizeof( bacterium[] ) );
}
} for ( i = ; i < S; i ++ )
{
if ( RND < Ped )
{
init_single_bacterium( bacterium[i] );
}
}
} return ;
}
BFOA的更多相关文章
- 从Random Walk谈到Bacterial foraging optimization algorithm(BFOA),再谈到Ramdom Walk Graph Segmentation图分割算法
1. 从细菌的趋化性谈起 0x1:物质化学浓度梯度 类似于概率分布中概率密度的概念.在溶液中存在不同的浓度区域. 如放一颗糖在水盆里,糖慢慢溶于水,糖附近的水含糖量比远离糖的水含糖量要高,也就是糖附近 ...
- 图学习【参考资料2】-知识补充与node2vec代码注解
本项目参考: https://aistudio.baidu.com/aistudio/projectdetail/5012408?contributionType=1 *一.正题篇:DeepWalk. ...
随机推荐
- samba访问其他服务器文件权限设置
chown lynn.feng:lynn.feng nelson/ 我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改一个档案的属性与权限呢? 我们这里介 ...
- Android 触摸提示音【转】
本文转载自:http://blog.csdn.net/Jin_HeZai/article/details/46791567 近期任务,涉及Android触摸提示音. 首先,定位源码目标.很显然的,在原 ...
- Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图
Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图 Bing Maps Silverlight Control虽然为我们提供了简洁.方便的开发模 ...
- python pass 的用法
python pass用法 1.空语句 do nothing 2.保证格式完整 3.保证语义完整 4.以if语句为例: C/C++中写法: if(true) ; // do nothing else ...
- LCA__st算法&&树上倍增
st表 #include<cstdio> #include<algorithm> #include<cmath> using namespace std; ]; ] ...
- 洛谷[USACO06JAN]把牛Corral the Cows
题目描述 约翰打算建一个围栏来圈养他的奶牛.作为最挑剔的兽类,奶牛们要求这个围栏必须是正方 形的,而且围栏里至少要有C< 500)个草场,来供应她们的午餐. 约翰的土地上共有C<=N< ...
- nova service-list for juno kilo,liberty openstack
- mkisofs
createrepo -g /enp/comps.xml . yum -y --downloadonly --downloaddir=/enp/Packages upgrade mkisofs -o ...
- E20170626-hm
authenticate vt. 认证,证明是真实的.可靠的或有效的; 鉴定,使生效; author n. 作者; 著作家; 创造者; 发起人;
- Eclipse设置空格代替tab
1.点击 window->preference-,依次选择 General->Editors->Text Editors,选中右侧的 insert space for tabs;如下 ...