• 大小: 5.72KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2024-04-14
  • 语言: C/C++
  • 标签: 优化  烟花  算法  

资源简介

烟花优化算法(c语言版)

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

#include “FWA.h“
#include “utilities.h“

double FWA(double* x)
{
double **fireworks*fitnesses
**positions*vals;
double *Rs;
double *As;
int *nums;

int *flags;

//allocate memory
fireworks = (double **)calloc(Nsizeof(double*));
int ijk;
for (i = 0;i < N;i++)
{
fireworks[i] = (double *)calloc(DIMENSIONsizeof(double));
}
fitnesses = (double *)calloc(Nsizeof(double));

int buffer = (N+MM+N*BM);
positions = (double **)calloc(buffersizeof(double*));
for (i = 0;i < buffer;i++)
{
positions[i] = (double*)calloc(DIMENSIONsizeof(double));
}
vals = (double *)calloc(buffersizeof(double));
As = (double *)calloc(Nsizeof(double));
nums = (int *)calloc(Nsizeof(int));
flags = (int*)calloc(DIMENSIONsizeof(int));
Rs = (double *)calloc(buffersizeof(double));

initilize_rng();
for (i = 0;i < N;i++)
{
for (j = 0;j < DIMENSION;j++)
{
fireworks[i][j] = lea(LBOUNDUBOUND);
}
fitnesses[i] = evaluate(fireworks[i]DIMENSION);
}

double minmaxsum;
int counteridx;
int nncountindex;
int iter;
for (iter = 0;iter < MAX_ITERATION;iter++)
{

min = max = fitnesses[0];
for(i = 1;i < N;i++)
{
if(min > fitnesses[i])
{
min = fitnesses[i];
}
if (max < fitnesses[i])
{
max = fitnesses[i];
}
}

sum = 0;
for (i = 0;i < N;i++)
{
sum += (max - fitnesses[i]);
}

counter = N+MM;
for(i = 0;i < N;i++)
{
nums[i] = (int)(M*((max - fitnesses[i] + EPS)/(sum+EPS)));
if (nums[i] < AM)
{
nums[i] = AM;
}else if(nums[i] > BM)
{
nums[i] = BM;
}
counter += nums[i];
}

sum = 0;
for (i = 0;i < N;i++)
{
sum += (fitnesses[i] - min);
}

for(i = 0;i < N;i++)
{
As[i] = A*((fitnesses[i]-min+EPS)/(sum+EPS));
}

for (idx = 0;idx < N;idx++)
{
memcpy(positions[idx]fireworks[idx]sizeof(double)*DIMENSION);
vals[idx] = fitnesses[idx];
}

for (i = 0;i < MM;i++)
{
memset(flags0sizeof(int)*DIMENSION);
nn = rand()%DIMENSION+1;
count = 0;
while (count < nn)
{
index = rand()%DIMENSION;
if (flags[index] != 1)
{
flags[index] = 1;
count++;
}
}

int id = rand()%N;
double g = randn(11);
for (j = 0;j < DIMENSION;j++)
{
if (flags[j] == 1)
{
positions[idx][j] = fireworks[id][j]*g;
if (positions[idx][j] {
double tt = abs(positions[idx][j]);
while(tt > 0)
{
tt -= (UBOUND-LBOUND);
}
tt += (UBOUND-LBOUND);
positions[idx][j] = LBOUND + tt;
}else if (positions[idx][j]>UBOUND)
{
double tt = abs(positions[idx][j]);
while(tt > 0)
{
tt -= (UBOUND-LBOUND);
}
tt += (UBOUND-LBOUND);
positions[idx][j] = LBOUND + tt;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-10-22 22:22  FWA-C-Codes\
     文件        5657  2011-12-07 09:42  FWA-C-Codes\FWA.c
     文件        1381  2011-12-06 20:45  FWA-C-Codes\FWA.dev
     文件        1376  2011-12-07 09:44  FWA-C-Codes\FWA.h
     文件        1396  2011-12-07 09:31  FWA-C-Codes\main.c
     文件         923  2011-12-07 09:45  FWA-C-Codes\Makefile.win
     文件         203  2011-12-06 21:21  FWA-C-Codes\readme.txt
     文件        2006  2011-12-06 20:37  FWA-C-Codes\utilities.c
     文件         497  2011-12-06 21:02  FWA-C-Codes\utilities.h

评论

共有 条评论