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. ...
随机推荐
- 2015南阳CCPC C - The Battle of Chibi DP树状数组优化
C - The Battle of Chibi Description Cao Cao made up a big army and was going to invade the whole Sou ...
- 删除svn
去掉文件下所有的.svn - CSDN博客 https://blog.csdn.net/arui_email/article/details/9055645 FOR /r D:\testsvn\p ...
- string转date
/*util-->sql*/ java.util.Date utdt; java.sql.Date sqldt =null; SimpleDateFormat simFormat = new S ...
- 【POJ 3349】 Snowflake Snow Snowflakes
[题目链接] http://poj.org/problem?id=3349 [算法] 哈希 若两片雪花相同,则它们六个角上的和一定相同,不妨令 H(A) = sigma(Ai) % P ,每次只要到哈 ...
- MySQL max_connections 总是 214 。不能设大了? max_connections = 214
MySQL max_connections 总是 214 .不能设大了? centos7 mariadb 修改 max_connections 总是214 It was indeed limits s ...
- 02、监听key是否正确
SDKInitializer其实是有两个action,第三个SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE虽然是一个常量但是它不是action.第二个a ...
- PCB Windows Petya(永恒之蓝)勒索病毒补丁检测代码
公司内部电脑招受到新的勒索病毒Petya(永恒之蓝)攻击,直接导致受攻击的电脑系统崩贵无法启动,这次勒索病毒攻击影响范围之广,IT,人事,工程,生产,物控等部门都无一幸免,对整个公司运转产生了非常严重 ...
- [Swift通天遁地]七、数据与安全-(4)CoreData数据的增、删、改、查
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- MyBatis Generator实现MySQL分页插件
MyBatis Generator是一个非常方便的代码生成工具,它能够根据表结构生成CRUD代码,可以满足大部分需求.但是唯一让人不爽的是,生成的代码中的数据库查询没有分页功能.本文介绍如何让MyBa ...
- .ignore配置问题1:配置后所忽略的文件不起作用
gitignore可以指定git忽略指定文件. 问题: 想忽略一些文件在.gitignore文件中会配置对应的文件,但是有时候配置后还是没有起作用: 我在element-ui封装个性化组件时,需要更换 ...