陈国良版SGA

该程序摘自陈国良等编《遗传算法及其应用》

由于原程序有错误,本人在turbo c2.0下修改并调试通过

[@more@]/*----------------*/
/*-------Simple Genetic Algorithm------*/
/*---该程序摘自陈国良等编《遗传算法及其应用》--*/
/*-------------*/
#include
#include
#include
#include
#include
/*-------------*/
#include
#include
#include
#include
/*------------*/
#define maxpop 100
#define maxstring 64
/*----------*/
struct pp
{
unsigned char chrom[maxstring];
float x,fitness;
unsigned int parent1,parent2,xsite;
};
/*------------*/
struct pp *oldpop,*newpop,*p1;
unsigned int popsize,lchrom,gen,maxgen;
unsigned int nmutation,ncross,jcross,maxpp,minpp,jrand;
float pcross,pmutation,sumfitness,avg,max,min;
float seed,rj[maxpop],oldrand[maxpop];
double coef;
float objfun(float);
void statistics();
int select();
int flip(float);
int crossover();
int mutation();
void generation();
void initialize();
void report();
void initpop();
void initdata();
void report();
float decode();
float fandom1();
void randomize1();
/*-----------*/
/*SGA program*/
main()
{
long int gen,k,j;
float oldmax;
int oldmaxpp;
if(!(oldpop=(struct pp*)malloc(maxpop*sizeof(struct pp))))
{
printf("memory request failed!n");
exit(0);
}
if(!(newpop=(struct pp *)malloc(maxpop*sizeof(struct pp))))
{
printf("memory request failed!n");
exit(0);
}
if(!(p1=(struct pp *)malloc(maxpop*sizeof(struct pp))))
{
printf("memory request failed!n");
exit(0);
}
for(k=0;k oldpop[k].chrom[0]=';
for(k=0;k newpop[k].chrom[0]=';
gen=0;
initialize();
clrscr();
p1=newpop;
newpop=oldpop;
statistics(newpop);
report(gen);
newpop=p1;
getchar();
do{
gen=gen+1;
randomize();
oldmax=max;
oldmaxpp=maxpp;
generation();
statistics(newpop);
if(max {
for(j=0;j newpop[minpp].chrom[j]=oldpop[oldmaxpp].chrom[j];
newpop[minpp].x=oldpop[oldmaxpp].x;
newpop[minpp].fitness=oldpop[oldmaxpp].fitness;
statistics(newpop);
}
report(gen);
p1=oldpop;
oldpop=newpop;
newpop=p1;
getchar();
}while(gen free(p1);
free(oldpop);
free(oldpop);
exit(0);
}
/*//*/
/*个体适应度计算*/
float objfun(float x1)
{
float y;
y=3.1415926*x1;
y=sin(2.0*y);
return y*y;
}
/*//*/
/*群体适应度计算*/
void statistics(pop)
struct pp *pop;
{
int j;
sumfitness=pop[0].fitness;
min=pop[0].fitness;
max=pop[0].fitness;
maxpp=0;
minpp=0;
for(j=1;j {
sumfitness=sumfitness+pop[j].fitness;
if(pop[j].fitness>max)
{
max=pop[j].fitness;
maxpp=j;
}
if(pop[j].fitness {
min=pop[j].fitness;
minpp=j;
}
}
avg=sumfitness/(float)popsize;
}
/*///*/
/*群体更新*/
void generation()
{
unsigned int j,mate1,mate2;
j=0;
do{
mate1=select();
mate2=select();
crossover(oldpop[mate1].chrom,oldpop[mate2].chrom,j);
newpop[j].x=(float)decode(newpop[j].chrom);
newpop[j].fitness=objfun(newpop[j].x);
newpop[j].parent1=mate1;
newpop[j].parent2=mate2;
newpop[j].xsite=jcross;
newpop[j+1].x=(float)decode(newpop[j+1].chrom);
newpop[j+1].fitness=objfun(newpop[j+1].x);
newpop[j+1].parent1=mate1;
newpop[j+1].parent2=mate2;
newpop[j+1].xsite=jcross;
j=j+2;
}while(j}
/*//*/
/*控制参数输入*/
void initdata()
{
unsigned int ch,j;
clrscr();
printf("----------------n");
printf("A Simple Genetic Algorithms---SGA");
printf("----------------n");
pause();clrscr();
printf("********SGA DATA ENTRY AND INITIALIZATION********n");
printf("n");
printf("Enter population size------&gt");scanf("%d",&popsize);
printf("Enter chromosome length----&gt");scanf("%d",&lchrom);
printf("Enter max. generation------&gt");scanf("%d",&maxgen);
printf("Enter crossover probability----&gt");scanf("%f",&pcross);
printf("Enter mutatoion probability----&gt");scanf("%f",&pmutation);
clrscr();
randomize();
randomize1();
nmutation=0;
ncross=0;
}
/*//*/
/*初始化信息输出*/
void initreport()
{
int j,k;
printf("------------------n");
printf("A Simple Genetic Algorithm--SGAn");
printf("SGA Parametersn");
printf("------------------n");
printf("n");
printf("Population size (popsize) = %dn",popsize);
printf("Chromosome length (lchrom) = %dn",lchrom);
printf("Maximum # of generation(maxgen) = %dn",maxgen);
printf("Crossover probability (pcross) = %fn",pcross);
printf("------------------n");
printf("n");
printf("Initial Population Maximum Fitness = %fn",max);
printf("Initial Population Average Fitness = %fn",avg);
printf("Initial Population Minimum Fitness = %fn",min);
printf("Initial Population Sum of Fitness = %fn",sumfitness);
pause();
}
/**/
/*生成初始种群*/
void initpop()
{
int j,j1;
randomize();
for(j=0;j {
for(j1=0;j1 oldpop[j].chrom[j1]=random(2);
oldpop[j].x=(float)decode(oldpop[j].chrom);
oldpop[j].fitness=objfun(oldpop[j].x);
oldpop[j].parent1=0;
oldpop[j].parent2=0;
oldpop[j].xsite=0;
}
}
/*//*/
/*初始化*/
void initialize()
{
initdata();
coef=pow(2.00,lchrom)-1.0;
initpop();
statistics(oldpop);
initreport();
}
/*///*/
/*数据输出*/
void report(int gen)
{
int k,j;
for(j=0;j<79;j++)
printf("*");
printf("n");
printf("Population Reportn");
printf("Generation %3dn",gen);
printf(" # parents xsite string x fitnessn");
for(j=0;j<79;j++)
printf("+");
printf("n");
for(j=0;j {
printf("%2d ) ( %2d,",j,newpop[j].parent1);
printf("%2d ) %2d",newpop[j].parent2,newpop[j].xsite);
for(k=0;k printf(" %d ",newpop[j].chrom[k]);
printf(" %12.1f ",newpop[j].x);
printf(" %6.4f --New.n",newpop[j].fitness);
}
for(k=0;k<79;k++)
printf("*");
printf("n");
printf("RESULT: GEN: %3d",gen);
printf("AVG = %8.4f MIN = %8.4f MAX = %8.4fn",avg,min,max);
printf("ncross = %4d nmutation = %4d n",ncross,nmutation);
}
/**/
/*译码*/
float decode(unsigned char *pp)
{
int j;float tt,tt1;
tt1=1.0;
tt=0.0;
for(j=lchrom-1;j>-1;j--)
{
if(pp[j])tt=tt+tt1;
tt1=2.0*tt1;
}
tt=tt/coef;
return tt;
}
/*//*/
/*延时*/
int pause()
{
int j,j1;
int x1;
x1=0;
for(j=1;j<=25;j++)
{
for(j1=1;j1<2;j1++)
x1=x1+1;
}
return x1;
}
/**/
/*选择操作*/
int select()
{
double rand1,partsum;
int j;
partsum=0.0;
j=0;
rand1=random1()*sumfitness;
do{
partsum=partsum+oldpop[j].fitness;
j=j+1;
}while((partsum return j-1;
}
/*/*/
/*变异操作*/
int mutation(ch)
unsigned char ch;
{
int mutate,j;
mutate=flip(pmutation);
if(mutate)
{
nmutation=nmutation+1;
if(ch)
ch=0;
else
ch=1;
}
if(ch)
return 1;
else
return 0;
}
/*/*/
/*交叉操作*/
int crossover(unsigned char *parent1,unsigned char *parent2,int k5)
{
int i,j,j1;
if(flip(pcross))
{
jcross=random(lchrom-1);
ncross=ncross+1;
}
else
jcross=lchrom;
if(jcross!=lchrom)
{
for(j=0;j {
newpop[k5].chrom[j]=mutation(parent1[j]);
newpop[k5+1].chrom[j]=mutation(parent2[j]);
}
for(j=jcross;j {
newpop[k5].chrom[j]=mutation(parent2[j]);
newpop[k5+1].chrom[j]=mutation(parent1[j]);
}
}
else
{
for(j=0;j {
newpop[k5].chrom[j]=mutation(parent1[j]);
newpop[k5+1].chrom[j]=mutation(parent2[j]);
}
}
return 1;
}
/*///*/
/*重启动随机数发生器*/
void randomize1()
{
int i;
randomize();
for(i=0;i oldrand[i]=random(30001)/30000.0;
jrand=0;
}
/*//*/
int random1()
{
jrand=jrand+1;
if(jrand>=lchrom)
{
jrand=0;
randomize1();
}
return oldrand[jrand];
}
/*///*/
/*Bernulli test */
int flip(float probability)
{
float ppp;
ppp=random(20001)/20000.0;
if(ppp<=probability)
return 1;
return 0;
}
/*///
/end of the program
///*/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11355887/viewspace-974941/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11355887/viewspace-974941/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
基于hal库的OLED显示屏驱动C语言实现源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值