人工智能“遗传算法求解f(x)=xcosx+2的最大值”
最佳回答
结果:极值点(-3。141593,5。141593)
我又算了一下-100到100之间的极大值
结果:极值点(-97。399473,99。394504)
-1000到1000之间的极大值
结果:(999,1001)
-2000到2000之间的极大值
结果:(1998。053550,2000。053163)
以上结果我用matlab画图验证了,没问题。
//中国电子科技集团公司
//第一研究室
//呼文韬
//随机初始种群
//编码方式为格雷码
//选择方法为随机遍历
//采用了精英保存策略
//采用了自适应的交叉率和变异率
//采用了与模拟退火算法相结合的尺度变换
//采用了均匀交叉法
#include
#include
#include
#include
#include
#include
#include
#define IM1 2147483563
#define IM2 2147483399
#define AM (1。0/IM1)
#define IMM1 (IM1-1)
#define IA1 40014
#define IA2 40692
#define IQ1 53668
#define IQ2 52774
#define IR1 12211
#define IR2 3791
#define NTAB 32
#define NDIV (1+IMM1/NTAB)
#define EPS 1。2e-7
#define RNMX (1。0-EPS)
#define zhizhenjuli 0。005
#define PI 3。14159265358
#define T0 100000//温度要取得很高才行。
#define zhongqunshu1 200
#define zuobianjie -2000
#define youbianjie 2000
unsigned int seed=0; //seed 为种子,要设为全局变量
void mysrand(long int i) //初始化种子
{
seed = -i;
}
long a[1];
//double hundun;
//double c=4;
//设置全局变量
struct individual
{
unsigned *chrom; //染色体;
double geti;//变量值
double shiyingdu; //目标函数的值;
double fitness; //变换后的适应度值;
};
individual *zuiyougeti;//精英保存策略
int zhongqunshu; //种群大小
individual *nowpop;//当前代
individual *newpop;//新一代
double sumfitness;//当代的总适应度fitness
double sumshiyingdu;//当代的总适应度shiyingdu
double maxfitness;//最大适应度
double avefitness;//平均适应度
double maxshiyingdu;//最大适应度
double avgshiyingdu;//平均适应度
float pc;//交叉概率
float pm;//变异概率
int lchrom;//染色体长度
int maxgen;//最大遗传代数
int gen;//遗传代数
//函数
int flipc(double ,double );//判断是否交叉
int flipm(double );//判断是否变异
int rnd(int low,int high);//产生low与high之间的任意数
void initialize();//遗传算法初始化
void preselectfitness(); //计算sumfiness,avefitness,maxfitness
void generation();
double suijibianli();//产生随机遍历指针
int fuzhi(float );//选择要复制的个体
void crossover(individual ,individual ,individual &,individual &);//交叉
void bianyi(individual &);//变异
void mubiaohanshu(individual &);//计算适应度
void chidubianhuan(individual &);//对shiyingdu进行尺度变换赋给fitness
double ran1(long *);//随机数初始
void bianma(double bianliang,unsigned *p);//编码
double yima(unsigned *p);
void guanjiancanshujisuan();//计算shiyingdu,根据shiyingdu计算sumshiyingdu,对shiyingdu进行尺度变换变成fitness,根据fitness计算sumfitness,avefitness,maxfitness
void jingyingbaoliu();
void glp(int n,int s,int *,int (*)[1],float (*)[1]);//glp生成函数
BOOL Exist(int Val,int Num,int *Array);//判断一个数在前面是否出现过
int cmpfitness(const void *p1,const void *p2)
{
float i=((individual *)p1)->shiyingdu;//现在是按照"适应度"排序,改成"个体"的话就是按照"个体"排序
float j=((individual *)p2)->shiyingdu;
return i
最新回答共有2条回答
-
2026-04-06 20:01:46舒服的高跟鞋
回复为了方便我只求了-3。14到3。14之间的最大值,你可以自己改一下,不过范围大了之后,种群也因该扩大,我的种群只有66个结果:极值点(-3。141593,5。141593)我又算了一下-100到100之间的极大值结果:极值点(-97。399473,99。394504)-1000到1000之间的极大值结果:(999,1001)-2000到2000之间的极大值结果:(1998。053550,2000。053163)以上结果我用matlab画图验证了,没问题。//中国电子科技集团公司//第一研究室//呼文韬//随机初始种群//编码方式为格雷码//选择方法为随机遍历//采用了精英保存策略//采用了自适应的交叉率和变异率//采用了与模拟退火算法相结合的尺度变换//采用了均匀交叉法#include #include #include #include #include #include #include #define IM1 2147483563#define IM2 2147483399#define AM (1。0/IM1)#define IMM1 (IM1-1)#define IA1 40014#define IA2 40692#define IQ1 53668#define IQ2 52774#define IR1 12211#define IR2 3791#define NTAB 32#define NDIV (1+IMM1/NTAB)#define EPS 1。2e-7#define RNMX (1。0-EPS)#define zhizhenjuli 0。005#define PI 3。14159265358 #define T0 100000//温度要取得很高才行。#define zhongqunshu1 200#define zuobianjie -2000#define youbianjie 2000unsigned int seed=0; //seed 为种子,要设为全局变量 void mysrand(long int i) //初始化种子 { seed = -i; } long a[1];//double hundun;//double c=4;//设置全局变量struct individual{unsigned *chrom; //染色体;double geti;//变量值double shiyingdu; //目标函数的值;double fitness; //变换后的适应度值;};individual *zuiyougeti;//精英保存策略int zhongqunshu; //种群大小individual *nowpop;//当前代individual *newpop;//新一代double sumfitness;//当代的总适应度fitnessdouble sumshiyingdu;//当代的总适应度shiyingdudouble maxfitness;//最大适应度double avefitness;//平均适应度double maxshiyingdu;//最大适应度double avgshiyingdu;//平均适应度float pc;//交叉概率float pm;//变异概率int lchrom;//染色体长度int maxgen;//最大遗传代数 int gen;//遗传代数//函数int flipc(double ,double );//判断是否交叉int flipm(double );//判断是否变异int rnd(int low,int high);//产生low与high之间的任意数void initialize();//遗传算法初始化void preselectfitness(); //计算sumfiness,avefitness,maxfitnessvoid generation();double suijibianli();//产生随机遍历指针int fuzhi(float );//选择要复制的个体void crossover(individual ,individual ,individual &,individual &);//交叉void bianyi(individual &);//变异void mubiaohanshu(individual &);//计算适应度void chidubianhuan(individual &);//对shiyingdu进行尺度变换赋给fitnessdouble ran1(long *);//随机数初始void bianma(double bianliang,unsigned *p);//编码double yima(unsigned *p);void guanjiancanshujisuan();//计算shiyingdu,根据shiyingdu计算sumshiyingdu,对shiyingdu进行尺度变换变成fitness,根据fitness计算sumfitness,avefitness,maxfitnessvoid jingyingbaoliu();void glp(int n,int s,int *,int (*)[1],float (*)[1]);//glp生成函数BOOL Exist(int Val,int Num,int *Array);//判断一个数在前面是否出现过int cmpfitness(const void *p1,const void *p2){float i=((individual *)p1)->shiyingdu;//现在是按照"适应度"排序,改成"个体"的话就是按照"个体"排序float j=((individual *)p2)->shiyingdu;return i
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
