• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: C/C++
  • 标签: WOA  C++  

资源简介

WOA算法是2016年提出的一个比较新的优化算法,主要是用来优化各种算法中的参数,在实际问题中也有很大用处,其主要是通过优化参数的方法实现算法的最优解,在实际应用中有比较不错的效果,这里上传的是C++实现的WOA代码,方便大家的运用。

资源截图

代码片段和文件信息

// WOA.cpp : 此文件包含 “main“ 函数。程序执行将在此处开始并结束。
//

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define dim 30 //变量数量
#define Max_iteration  500 //最大代数
#define SearchAgents_no 30 //个体的数量

#define maxmum 0xffff
#define PI 3.141592653
double position[dim];
double leader_pos[dim] = { 0 };
double leader_score;
double Convergence_curve[Max_iteration] = { 0 };//Convergence_curve收敛曲线
double lb = -100;
double ub = 100;
struct individual
{
double position[dim];
double fitness;
}ptcle[SearchAgents_no];

double function_fitness(double* position){
int i;
double sum = 0;
for (i = 0; i < dim; i++) {
sum += position[i] * position[i];
}
return sum;

}

//初始化
void initialization() {
for (int i = 0; i < SearchAgents_no; i++)
{
for (int j = 0; j < dim; j++)
{
double randx = (double)rand() / RAND_MAX;
ptcle[i].position[j] = lb + (ub - lb) * randx;

}

}
}

double GetRand()
{
return 2.0 * rand() / RAND_MAX - 1.0;
}

void function_WOA() {
int i j;
leader_score = maxmum;
int t = 0;
while (t < Max_iteration) {
for (i = 0; i < SearchAgents_no; i++) {
for (j = 0; j < dim; j++)
{
if (ptcle[i].position[j] > ub) {
ptcle[i].position[j] = ub;
}
if (ptcle[i].position[j] < lb) {
ptcle[i].position[j] = lb;
}

评论

共有 条评论