• 大小: 184KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Matlab
  • 标签: 蛙跳  

资源简介

用matlab实现的混合蛙跳算法,程序可以运行,有仿真结果图

资源截图

代码片段和文件信息

//#include “stdafx.h“
#include 
#include 
#include 
#include 


#define L 1/*试验次数*/
#define G 100/*迭代次数*/
#define P 200/*个体总数*/
#define M 20/*族群数*/
#define I 10/*一个族群中的个体数*/
#define V 20 /*个体维数*/
#define N 10/*族群内更新次数*/
#define MAX 5.12
#define MIN -5.12
#define D 2.0/*最大步长*/
#define R rand()%100/100.0



typedef struct{
         double d[V];
         double fitness;
}Individual;
Individual pw[M];/*族群中个体最差位置*/
Individual pb[M];/*族群中个体最好位置*/
Individual px;/*全体中最好位置*/
Individual individual[P];/*全部个体*/
Individual pop[M][I];/*排序后的群组*/
Individual temp[M];
Individual tem;

double PI=3.1415926;
double Tolertance=0.0001;//收敛精度
double  PBESTFITNESS[L];

static int kk;


/*选择测试函数为Sphere*/
double fitness(int a)
{
  int i;
  double sum=0;
  for(i=0;i  {
      sum+=individual[a].d[i]*individual[a].d[i];
  }
return sum;
}


/*对每一个个体初始化*/
void init()
{
    int ij;
for(i=0;i {
for(j=0;j {
          individual[i].d[j]=R*(MAX-MIN)+MIN;
        }
individual[i].fitness=fitness(i);
    }
}


/*按照适应度降序对全部个体进行排列和分组*/
void sort()
{
int ijk;
for(i=1;i {
for(j=0;j {
   if(individual[j].fitness    {
tem=individual[j];
individual[j]=individual[j+1];
            individual[j+1]=tem;
   }
}
}
k=0;
for(j=0;j {
for(i=0;i {
pop[i][j]=individual[k];
    k++;
}
}
px=individual[P-1];
for(i=0;i {
pb[i]=pop[i][I-1];
pw[i]=pop[i][0];
}
}


/*对某个群组内的个体重新排序*/

void sortpop(int b)
{
   int ij;
   for(i=0;i   {
     for(j=0;j  {
        if(pop[b][j].fitness {
            tem=pop[b][j];
pop[b][j]=pop[b][j+1];
pop[b][j+1]=tem;
}
 }
   }
}



/*群组内更新*/
void update()
{
int ijkln;
double a;
double b;
for(n=0;n {
   for(i=0;i    { 
   a=0.0;
   b=0.0;
   for(j=0;j    {
       temp[i].d[j]=R*(pb[i].d[j]-pw[i].d[j]);
  
       if(abs(temp[i].d[j])>D)
   {
      if(temp[i].d[j]>0)
  {
     temp[i].d[j]=D;
  }
      else
  {
     temp[i].d[j]=-D;
  }
   }
       temp[i].d[j]=pw[i].d[j]+temp[i].d[j];
               a=a+temp[i].d[j]*temp[i].d[j];
   }
           temp[i].fitness=a;
       if(a    {
      pop[i][0]=temp[i];
      sortpop(i);
              pw[i]=pop[i][0];
      pb[i]=pop[i][I-1];
   }
       else
   {
      for(k=0;k   {
      temp[i].d[k]=R*(px.d[k]-pw[i].d[k]);
          if(abs(temp[i].d[k]>D))
  {
          if(temp[i].d[k]>0)
  {
          temp[i].d[k]=D;
  }
          else
  {
          temp[i].d[k]=-D;
  }
  }
          temp[i].d[k]=pw[i].d[k]+temp[i].d[k];
              a=a+temp[i].d[k]*temp[i].

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4419  2010-09-25 09:25  SFLA.cpp

     文件     196694  2014-11-05 16:45  Debug\SFLA.exe

     文件     189232  2014-11-05 16:45  Debug\SFLA.ilk

     文件      12592  2014-11-05 16:45  Debug\SFLA.obj

     文件     233752  2014-11-05 16:45  Debug\SFLA.pch

     文件     361472  2014-11-05 16:45  Debug\SFLA.pdb

     文件      41984  2014-11-05 16:45  Debug\vc60.idb

     文件      45056  2014-11-05 16:45  Debug\vc60.pdb

     文件       3377  2014-11-05 16:45  SFLA.dsp

     文件        516  2014-11-05 16:46  SFLA.dsw

     文件      33792  2014-11-05 16:46  SFLA.ncb

     文件      48640  2014-11-05 16:46  SFLA.opt

     文件       1434  2014-11-05 16:45  SFLA.plg

     目录          0  2014-11-05 16:45  Debug

----------- ---------  ---------- -----  ----

              1172960                    14


评论

共有 条评论