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

📄 m.cpp

📁 用遗传算法实现的影片递送问题
💻 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 + -