📄 m.cpp
字号:
#include "Gene.h"
#include <stdlib.h>
#include <time.h>
#include <iostream.h>
#include <math.h>
#include <fstream>
//#define FILEPATH "E:\\MYGA.txt"
using namespace std;
void main()
{
srand( (unsigned)time( NULL ) ); //根据时间产生随机数
Gene Old[POPULATION];
Gene OffSpring[POPULATION];
Gene temp,best;//父代,子代
int i,j;//循环用变量
int record;
bool IsTwo;
int pop=100;//循环代数
for(i=0;i<POPULATION;i++)
{
OffSpring[i]=Old[i];//操作都在子代上进行
//OffSpring[i].ShowChrom();
}
//开始
// ofstream outfile(FILENAME)
do
{
//select..........................
for(i=0;i<POPULATION;i++)
{
OffSpring[i].select();
OffSpring[i].ShowChrom();
}
//交叉..........................................
IsTwo=false;
for(i=0;i<POPULATION;i++)
{
if(OffSpring[i].chromosome==0)
break;
if( ((double)rand()/RAND_MAX)<1 )//以?概率交叉
if(IsTwo==false)//没有配偶
{
record=i;//第i号成为配偶
IsTwo=true;
}
else//有配偶
{
OffSpring[i]*OffSpring[record];//交叉
OffSpring[record]*OffSpring[i];//交叉
IsTwo=false;
}
}
//变异........................................
for(i=0;i<POPULATION;i++)
{
if( ((double)rand()/RAND_MAX)<0.3 )//以?概率变异
!OffSpring[i];
}
//选择.......................................
//先排序,留下最好的。从左到右,距离由小到大
for(i=0;i<POPULATION-1;i++)//冒泡法排序--子代
for(j=0;j<POPULATION-1-i;j++)
if( OffSpring[j].distance()>OffSpring[j+1].distance() )
OffSpring[j] == OffSpring[j+1];
for(i=0;i<POPULATION-1;i++)//冒泡法排序--父代
for(j=0;j<POPULATION-1-i;j++)
if( Old[j].distance() > Old[j+1].distance() )
Old[j] == Old[j+1];
//交换的算法
int Survival=0;
for(j=0,i=POPULATION-1;i>j;i--,j++)
Old[i] == OffSpring[j];
//结束
//输出最好结果
for(i=0;i<POPULATION-1;i++)//冒泡法排序
{
for(j=0;j<POPULATION-1-i;j++)
if( Old[j].distance()>Old[j+1].distance() )
Old[j]==Old[j+1];
}
if(!( best & Old[0] ))//看有没有更好的解
{
best=Old[0];
cout<<pop<<":最好="<<Old[0].distance()<<" ";
Old[0].ShowChrom();
}
pop--;
}
while(pop>0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -