資源簡介
煙花優化算法(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? {
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? {
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? {
for?(j?=?0;j? {
fireworks[i][j]?=?lea(LBOUNDUBOUND);
}
fitnesses[i]?=?evaluate(fireworks[i]DIMENSION);
}
double?minmaxsum;
int?counteridx;
int?nncountindex;
int?iter;
for?(iter?=?0;iter? {
min?=?max?=?fitnesses[0];
for(i?=?1;i? {
if(min?>?fitnesses[i])
{
min?=?fitnesses[i];
}
if?(max? {
max?=?fitnesses[i];
}
}
sum?=?0;
for?(i?=?0;i? {
sum?+=?(max?-?fitnesses[i]);
}
counter?=?N+MM;
for(i?=?0;i? {
nums[i]?=?(int)(M*((max?-?fitnesses[i]?+?EPS)/(sum+EPS)));
if?(nums[i]? {
nums[i]?=?AM;
}else?if(nums[i]?>?BM)
{
nums[i]?=?BM;
}
counter?+=?nums[i];
}
sum?=?0;
for?(i?=?0;i? {
sum?+=?(fitnesses[i]?-?min);
}
for(i?=?0;i? {
As[i]?=?A*((fitnesses[i]-min+EPS)/(sum+EPS));
}
for?(idx?=?0;idx? {
memcpy(positions[idx]fireworks[idx]sizeof(double)*DIMENSION);
vals[idx]?=?fitnesses[idx];
}
for?(i?=?0;i? {
memset(flags0sizeof(int)*DIMENSION);
nn?=?rand()%DIMENSION+1;
count?=?0;
while?(count? {
index?=?rand()%DIMENSION;
if?(flags[index]?!=?1)
{
flags[index]?=?1;
count++;
}
}
int?id?=?rand()%N;
double?g?=?randn(11);
for?(j?=?0;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
- 上一篇:電力系統潮流計算-牛頓拉夫遜法
- 下一篇:8位競賽搶答器的課程設計報告.docx
評論
共有 條評論