⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 speed.cpp

📁 基因算法(GA) GA 是一种启发式的优化法 (heuristic optimization method)
💻 CPP
字号:
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define popsize 100                    //种群大小
#define totalgen 100                   //遗传总代数
#define pm 0.2                         //变异概率
#define pc 0.4                         //交换概率
#define w 0.001157                     //旋转角速度
#define n 3
//#define maxJ 500               //求适应度函数的常参数
 struct individual                     //个体
  {
        double chromosome;              //染色体
        double J;                //个体对应的变量值
        double fitness;                //个体适应度
        double totalfitness;             //累计适应度
  };

 struct individual nowpop[100];        //当前代种群
 struct individual nextpop[100];        //新一代种群
 double min;                             //目标变量T所允许的最小值
 double max;                             //目标变量T所允许的最大值
 double maxJ=500;                            //为变量J找到最大的值
 float  k;                             //燃料与时间的比例权值
 double p0[n][1];                       //初始相对位置
 double v0[n][1];                      //初始相对速度
 double av1[n][1];                                  //起始速度增量
 double av2[n][1];                                  //终端速度增量

 double randf()
 {
        return   (double)(rand()/(double)32767);
 }



void calSpeed(double chromosome)                       //计算v1v2
{
     int i,j;
	 double q=w*chromosome;
     double temp[n][n];                                //临时存放计算数据
     double temp1[n][n];
	 double temp2[n][1];                               //临时存放计算数据
	 double temp3[n][1];                               //临时存放计算数据
	 for(i=0;i<3;i++)
		 for(j=0;j<3;j++)
		 {
              temp[i][j]=0;
			  temp1[i][j]=0;
		 }
     for(i=0;i<3;i++)
	 {
		 temp2[i][0]=0;
		 temp3[i][1]=0;
	 }
  double a11;
	  a11=sin(q);
  double a12;
	  a12=14*(1-cos(q))-6*q*sin(q);
  double a21;
	  a21=-2*(1-cos(q));
  double a22;
	  a22=4*sin(q)-3*q*cos(q);
  double a33;
	  a33=-cos(q);
  double b;
	  b=3*q*sin(q)-8*(1-cos(q));
  double t11[3][3]={a11/b,a12/b,0,
                    a21/b,a22/b,0,
	                0,  0,      a33};
  double t12[3][3]={(4*cos(q)-3),-2*sin(q),0,
                     2*sin(q),cos(q),0,
					 0,0,cos(q)};
  double t21[3][3]={0,-6*w*(1-cos(q)),0,
                    0,3*w*sin(q),0,
					0,0,-w*sin(q)};
  for(i=0;i<3;i++)
	 {
       av1[i][0]=0;
       av2[i][0]=0;
	 }
   for(i=0;i<3;i++)
		 for(j=0;j<3;j++)
		 {
              temp[i][j]=w*t11[i][j];
		 }
   for(i=0;i<3;i++) 
   {  
       temp2[i][0]=temp[i][0]*p0[0][0]+temp[i][1]*p0[1][0]+temp[i][2]*p0[2][0];
   }
   for(i=0;i<3;i++)
   {
       av1[i][0]=temp2[i][0]-v0[i][0];
   }
    for(i=0;i<3;i++)
		 for(j=0;j<3;j++)
		 {
              temp[i][j]=w*t12[i][j];
		 }
    for(i=0;i<3;i++)
		 for(j=0;j<3;j++)
		 {
              temp1[i][j]=temp[i][0]*t11[0][j]+temp[i][1]*t11[1][j]+temp[i][2]*t11[2][j];
		 }
    for(i=0;i<3;i++)
		 for(j=0;j<3;j++)
		 {
              temp1[i][j]=temp1[i][j]+t21[i][j];
		 }
    for(i=0;i<3;i++) 
		{  
           av2[i][0]=-(temp1[i][0]*p0[0][0]+temp1[i][1]*p0[1][0]+temp1[i][2]*p0[2][0]);
		}
   
}
void main()
{
        double temp;
		double temp2;
		p0[0][0]=150000;
        p0[1][0]=-800;
		p0[2][0]=0;
		v0[0][0]=-100;
		v0[1][0]=10;
		v0[2][0]=0;
		calSpeed(2023.23);
		temp=sqrt(av1[0][0]*av1[0][0]+av1[1][0]*av1[1][0]+av1[2][0]*av1[2][0]);
		temp2=sqrt(av2[0][0]*av2[0][0]+av2[1][0]*av2[1][0]+av2[2][0]*av2[2][0]);
		cout<<temp<<endl<<temp2<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -