亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tsp.cpp

?? 遺傳算法解決TSP問題C++源碼
?? CPP
字號:
// TSP.cpp : Defines the entry point for the console application.
/************************************************************************
                   旅行商(TSP)問題的遺傳算法求解
染色體編碼方法采用Grefenstette在《Genetic Algorithms for the Traveling Salesman Problem》
提出的編碼方法。訪問完一個城市,就從城市列表中去掉該城市。
例:假設有三個城市(A,B,C),染色體編碼為(2,2,1),第一次城市列表為(A,B,C),
2表示訪問(A,B,C)中第2個城市B;然后城市列表變為(A,C),第二次訪問2表示(A,C)
中的第2個城市C;第三次訪問城市列表中只有一個城市A;訪問城市序列為B->C->A。
同理(3,1,2)表示訪問序列為C->A-B,(1,2,1)表示訪問序列為A->C->B。
             作者:章舜仲,zszws@jlonline.com。(版權所有)
************************************************************************/

#include "stdafx.h"
#include  "stdlib.h"
#include  "time.h"
#include  <conio.h>

#define POPSIZE  1000
#define CITYCOUNT  30           /*城市個數*/
#define CHROMLENGTH  CITYCOUNT  /*染色體長度即城市個數*/

int PopSize=900;          //種群規模
int MaxGeneration=800;    //進化代數
double Pc=0.8;            //交叉概率
double Pm=0.08;           //變異概率

int CitySet[CITYCOUNT];          /*城市集合*/ 
int WorkSet[CITYCOUNT];          /*染色體解碼時的臨時工作數組,存放還未訪問的城市序列*/
int TempCitySet[CITYCOUNT];      /*存放染色體解碼完成后所經過的城市序列*/

/************************************************************************
城市之間的距離矩陣,本例中出發城市固定,來回相等
城市矩陣使用網頁getCityMartix.htm產生。
************************************************************************/
int CityDistance[CITYCOUNT][CITYCOUNT]={
{0,170,92,37,205,167,222,158,221,131,138,76,36,85,234,232,102,149,233,157,63,211,202,58,35,217,97,105,33,195},
{170,0,131,133,85,65,113,15,60,48,51,114,206,85,68,80,69,29,68,35,130,41,58,138,204,60,104,90,170,26},
{92,131,0,75,199,164,225,116,190,83,129,112,114,67,198,209,74,102,198,102,114,166,183,35,112,190,125,40,118,156},
{37,133,75,0,171,134,191,122,185,96,103,49,73,49,198,196,66,113,196,122,43,175,167,44,71,181,69,75,46,158},
{205,85,199,171,0,38,29,96,57,122,72,130,240,137,72,43,126,109,68,118,146,89,32,194,240,48,110,161,190,75},
{167,65,164,134,38,0,61,72,69,92,35,93,203,100,86,69,90,82,83,94,110,87,42,157,202,62,74,127,154,68},
{222,113,225,191,29,61,0,124,80,150,96,146,257,160,94,60,151,137,90,147,161,116,59,217,256,72,125,188,204,103},
{158,15,116,122,96,72,124,0,74,34,50,107,194,73,82,94,57,14,82,23,122,53,71,124,192,74,98,76,160,40},
{221,60,190,185,57,69,80,74,0,108,84,155,257,140,17,25,125,89,13,92,172,39,28,196,256,9,138,150,215,36},
{131,48,83,96,122,92,150,34,108,0,60,93,165,47,116,127,31,20,116,26,106,85,102,92,163,107,91,42,138,74},
{138,51,129,103,72,35,96,50,84,60,0,70,175,65,99,93,55,55,97,69,87,86,64,123,173,79,56,93,130,67},
{76,114,112,49,130,93,146,107,155,93,70,0,111,54,170,161,64,103,167,116,17,154,132,88,110,149,21,95,61,135},
{36,206,114,73,240,203,257,194,257,165,175,111,0,120,270,268,137,183,269,191,96,247,239,82,2,253,132,135,56,231},
{85,85,67,49,137,100,160,73,140,47,65,54,120,0,152,154,17,64,150,73,63,126,126,58,119,137,61,41,91,111},
{234,68,198,198,72,86,94,82,17,116,99,170,270,152,0,34,136,96,4,97,187,37,45,206,269,25,154,158,229,42},
{232,80,209,196,43,69,60,94,25,127,93,161,268,154,34,0,140,109,30,114,178,64,29,211,267,21,143,169,222,59},
{102,69,74,66,126,90,151,57,125,31,55,64,137,17,136,140,0,47,135,57,76,110,113,71,135,123,66,39,107,95},
{149,29,102,113,109,82,137,14,89,20,55,103,183,64,96,109,47,0,96,14,118,65,85,112,182,89,98,62,153,54},
{233,68,198,196,68,83,90,82,13,116,97,167,269,150,4,30,135,96,0,98,184,38,41,205,267,21,151,158,227,42},
{157,35,102,122,118,94,147,23,92,26,69,116,191,73,97,114,57,14,98,0,130,64,93,116,189,93,111,63,164,56},
{63,130,114,43,146,110,161,122,172,106,87,17,96,63,187,178,76,118,184,130,0,171,149,85,96,166,36,102,44,152},
{211,41,166,175,89,87,116,53,39,85,86,154,247,126,37,64,110,65,38,64,171,0,57,177,245,45,142,126,211,20},
{202,58,183,167,32,42,59,71,28,102,64,132,239,126,45,29,113,85,41,93,149,57,0,183,238,20,114,143,193,44},
{58,138,35,44,194,157,217,124,196,92,123,88,82,58,206,211,71,112,205,116,85,177,183,0,80,193,105,55,83,164},
{35,204,112,71,240,202,256,192,256,163,173,110,2,119,269,267,135,182,267,189,96,245,238,80,0,252,131,133,56,229},
{217,60,190,181,48,62,72,74,9,107,79,149,253,137,25,21,123,89,21,93,166,45,20,193,252,0,132,150,209,38},
{97,104,125,69,110,74,125,98,138,91,56,21,132,61,154,143,66,98,151,111,36,142,114,105,131,132,0,102,80,122},
{105,90,40,75,161,127,188,76,150,42,93,95,135,41,158,169,39,62,158,63,102,126,143,55,133,150,102,0,121,116},
{33,170,118,46,190,154,204,160,215,138,130,61,56,91,229,222,107,153,227,164,44,211,193,83,56,209,80,121,0,193},
{195,26,156,158,75,68,103,40,36,74,67,135,231,111,42,59,95,54,42,56,152,20,44,164,229,38,122,116,193,0},
};

struct individual      /*定義個體*/
{
	int chrom[CHROMLENGTH];  //染色體編碼
	double value;            //value值表示路徑長度
	double fitness;          //適應度
};

int generation;
struct individual bestindividual;         /*某一代群體中最優個體,*/
struct individual currentbest;            /*到目前為止的最優個體*/
struct individual population[POPSIZE];

void GenerateInitialPopulation();       /* 初始化群體*/
void GenerateNextPopulation();          /* 生成下一代群體 */
void DecodeChromosome(int *chrom,int *Result);    /*解碼染色體Chrom,存于Result中 */
void DeleteOneCity(int *workset,int pos,int n);  /* 從城市序列中刪去一個體 */
void FindBestIndividual();              /* 尋找最優個體 */
void Select(int start,int stop,struct individual *newpopulation);
void SelectionOperator();               /* 選擇算子 */
void CrossoverOperator();               /* 交叉算子 */
void MutationOperator();                /* 變異算子 */
void OutputTextReport();                /* 輸出結果 */
void CalculateFitness();                /* 計算適應度  */

/* 選擇算子 */
void Select(int start,int stop,struct individual *newpopulation)
{
	int i,index;
	double p,sum=0.0;
	double cfitness[POPSIZE];

	for(i=start;i<stop;i++)
	{
		sum+=population[i].fitness;
	}
	for(i=start;i<stop;i++)
	{
		cfitness[i]=population[i].fitness/sum;
	}
	for(i=start+1;i<stop;i++)
	{
		cfitness[i]=cfitness[i-1]+cfitness[i];
	}
	for(i=start;i<stop;i++)
	{
		p=rand()%1000/1000.0;
		index=0;
		while(p>cfitness[index])
		{
			index++;
		}
		newpopulation[i]=population[index];
	}
	for(i=start;i<stop;i++)
	{
		population[i]=newpopulation[i];
	}
	
}
void SelectionOperator(void)
{
	struct individual newpopulation[POPSIZE];
	int start,stop;
	start=0;
	stop=(int)(PopSize/3);
	Select(start,stop,newpopulation);
	start=stop+1;
	stop=(int)(2*PopSize/3);
	Select(start,stop,newpopulation);
	start=stop+1;
	stop=PopSize;
	Select(start,stop,newpopulation);
}

int random(int randmax)
{
	return rand()%randmax;
}

/* 交叉算子 */
void CrossoverOperator(void)
{
	int i,j;
	int index[POPSIZE];
	int point,temp;
	double p;
	int CityNo;

	for(i=0;i<PopSize;i++)
	{
		index[i]=i;
	}
	for(i=0;i<PopSize;i++)
	{
        point=random(PopSize-i);
		temp=index[i];
		index[i]=index[point+i];
		index[point+i]=temp;
	}

	for(i=0;i<PopSize-1;i+=2)
	{
		p=rand()%1000/1000.0;
		if(p<Pc)
		{
			point=random(CHROMLENGTH-1)+1;
			for(j=point;j<CHROMLENGTH;j++)
			{
				CityNo=population[index[i]].chrom[j];
				population[index[i]].chrom[j]=population[index[i+1]].chrom[j];
				population[index[i+1]].chrom[j]=CityNo;
			}
		}
	}
}

/* 變異算子 */
void MutationOperator(void)
{
	int i,j;
	double p;

	for(i=0;i<PopSize;i++)
	{
		for(j=1;j<CHROMLENGTH;j++)   /* 染色體第一個元素為1,不能變異*/
		{
			p=rand()%1000/1000.0;
			if(p<Pm)
			{
				population[i].chrom[j]=random(CITYCOUNT-j)+1;
			}
		}
	}
}

/* 生成第一代群體*/
void GenerateInitialPopulation(void)
{
	int i,j;
	for(i=0;i<PopSize;i++)
	{
		CitySet[i]=i+1; 
	}
	srand( (unsigned)time( NULL ) );
	for(i=0;i<PopSize;i++)
	{
		population[i].chrom[0]=1;   /*第一個城市是出發點,所以第一個元素為1 */
		for(j=1;j<CITYCOUNT;j++)
			population[i].chrom[j]=random(CITYCOUNT-j)+1;
	}
}


/* 生成下一代群體 */
void GenerateNextPopulation(void)
{	SelectionOperator();
	CrossoverOperator();
	MutationOperator();
}

/* 從城市序列中刪去一個體 */
void DeleteOneCity(int *workset,int pos,int n)    /* 數組有n個元素,刪去第pos個 */
{	int i;
	for(i=pos-1;i<n-1;i++)
		workset[i]=workset[i+1];
}


/*對染色體Chrom解碼,結果在Result中 */
void DecodeChromosome(int *chrom,int *Result)   
{	int *p;     /* p指向即將訪問的城市 */
	int i,n;

	p=chrom;   /* 即將訪問城市初值為染色體第一個元素 */
	for(i=0;i<CITYCOUNT;i++) WorkSet[i]=CitySet[i];  /* 工作數組初始化 */
	n=CITYCOUNT;   /* n為未訪問的城市個數 */

	for(i=0;i<CITYCOUNT;i++)
	{
		Result[i]=WorkSet[*p-1];   /* 工作數組中第*p個元素是即將訪問的城市 */
		DeleteOneCity(WorkSet,*p,n);  /* 從未訪問的n個城市中刪去剛訪問的第*p個 */
		n--;   /* 未訪問城市個數減1 */
		p++;  /* 即將訪問城市指向下一個 */
	}
}


/* 輸出結果 */
void OutputTextReport(void)
{	int i;

	DecodeChromosome(currentbest.chrom,TempCitySet);
	printf("Generation=%d, Best Value=%f:\n",generation,currentbest.value);
	printf("個體編碼:");
	for(i=0;i<CHROMLENGTH;i++)
		printf("(%d)",currentbest.chrom[i]);
	printf("\n訪問順序:");
	for(i=0;i<CHROMLENGTH;i++)
		printf("(%d)",TempCitySet[i]);
	printf("\n\n");
}


/* 計算適應度  */
void CalculateFitness()
{	int i,j;
	double TotalDistance=0.0;

	for(i=0;i<PopSize;i++)
	{
		DecodeChromosome(population[i].chrom,TempCitySet);
		for(j=1;j<CITYCOUNT;j++)
			TotalDistance=TotalDistance
			+CityDistance[TempCitySet[j-1]-1][TempCitySet[j]-1];
		TotalDistance=TotalDistance+CityDistance[TempCitySet[CITYCOUNT-1]-1][0];
		population[i].value=TotalDistance;
		TotalDistance=0.0;
	}

	for(i=0;i<PopSize;i++)
	{
	 population[i].fitness=CITYCOUNT/population[i].value;
	}
}

/* 尋找最優個體 */
void FindBestIndividual(void)
{	int i;

	bestindividual=population[0];
	for(i=1;i<PopSize;i++)
	{
		if(population[i].fitness>bestindividual.fitness)
			bestindividual=population[i];
	}

	if(generation==0)
	{
		currentbest=bestindividual;
	}
	else
	{
		if(bestindividual.fitness>currentbest.fitness)
		{
			currentbest=bestindividual;
			OutputTextReport();    /* 每更新一次當前最優值,輸出結果 */
		}
	}
}



void main()
{
	system("cls");
	generation=0;

	GenerateInitialPopulation();
	CalculateFitness();
	FindBestIndividual();
	OutputTextReport();

	while(generation<MaxGeneration)
	{
		generation++;
		GenerateNextPopulation();
		CalculateFitness();
		FindBestIndividual();
	}
	printf("\n完成");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
老司机精品视频导航| 精品一区二区综合| 欧美年轻男男videosbes| 亚洲国产成人av好男人在线观看| 欧美午夜理伦三级在线观看| 日日噜噜夜夜狠狠视频欧美人| 欧美成人猛片aaaaaaa| 国产激情视频一区二区三区欧美 | 麻豆传媒一区二区三区| 欧美精品一区二区三区蜜桃视频| 国产乱人伦偷精品视频不卡| 国产精品国产三级国产三级人妇 | 久久国产综合精品| 国产亚洲欧美日韩俺去了| 99久久精品免费精品国产| 亚洲国产综合在线| 精品国产乱码久久| 本田岬高潮一区二区三区| 亚洲五月六月丁香激情| 欧美成人r级一区二区三区| 国产一区二区不卡在线| 亚洲特黄一级片| 91精品久久久久久久91蜜桃| 国产成人亚洲精品狼色在线| 一区二区三区产品免费精品久久75| 91精品国产色综合久久 | 国产美女在线观看一区| 成人午夜视频免费看| 一区二区三区在线视频观看 | 一区二区三区在线观看国产 | 久久久久久久久一| 色婷婷久久综合| 精品一区在线看| 怡红院av一区二区三区| 精品国产亚洲在线| 色久综合一二码| 精品一区二区日韩| 亚洲精选一二三| 欧美va天堂va视频va在线| 91免费视频大全| 久久狠狠亚洲综合| 一区二区三区欧美视频| 久久综合狠狠综合| 欧美日韩在线播| 成人免费毛片高清视频| 五月婷婷激情综合| 日韩理论片在线| 精品国内二区三区| 欧美优质美女网站| 国产精品66部| 婷婷开心激情综合| 亚洲美腿欧美偷拍| 日本一区二区综合亚洲| 在线电影院国产精品| 91亚洲国产成人精品一区二区三| 极品少妇xxxx精品少妇偷拍| 懂色av一区二区夜夜嗨| 久久综合九色综合欧美98| 一级女性全黄久久生活片免费| 日韩三级免费观看| 色婷婷激情综合| 成人在线综合网| 久久精品国产澳门| 亚洲福利一二三区| 一色桃子久久精品亚洲| 久久亚洲精品国产精品紫薇| 欧美肥妇bbw| 色一区在线观看| 成人小视频在线观看| 国内精品写真在线观看| 婷婷丁香激情综合| 一区二区三区四区蜜桃| 国产精品色在线观看| 久久久亚洲高清| 欧美一区二区三区播放老司机| 91久久精品一区二区三区| 丰满少妇久久久久久久| 美腿丝袜亚洲三区| 视频一区欧美日韩| 亚洲国产日韩精品| 亚洲综合激情另类小说区| 中文字幕亚洲区| 欧美激情综合五月色丁香| 精品播放一区二区| 欧美成人精品1314www| 91精品国产色综合久久不卡蜜臀 | 成人18精品视频| 国产乱妇无码大片在线观看| 精一区二区三区| 奇米亚洲午夜久久精品| 日韩经典一区二区| 日韩精品一二三| 欧美午夜一区二区| 99国产精品99久久久久久| 国产精品中文有码| 久久成人av少妇免费| 蜜桃精品在线观看| 青椒成人免费视频| 视频一区欧美精品| 五月婷婷综合激情| 日本亚洲欧美天堂免费| 日韩不卡免费视频| 日产欧产美韩系列久久99| 日韩电影一二三区| 麻豆精品蜜桃视频网站| 久久精品国产999大香线蕉| 久久精品国产**网站演员| 久热成人在线视频| 久久66热偷产精品| 国产真实乱对白精彩久久| 国产一区二区久久| 盗摄精品av一区二区三区| 成人av电影免费观看| 色伊人久久综合中文字幕| 色一情一乱一乱一91av| 色综合激情久久| 在线精品国精品国产尤物884a| 在线观看欧美精品| 欧美人体做爰大胆视频| 在线播放国产精品二区一二区四区 | 国产剧情在线观看一区二区| 国产成人在线视频播放| 成人国产一区二区三区精品| 日本一区二区不卡视频| 国产精品久久久一本精品| 亚洲欧洲精品一区二区精品久久久| 毛片av中文字幕一区二区| 尤物av一区二区| 亚洲mv在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久精品久久99精品久久| 国产一区二区毛片| caoporn国产一区二区| 91电影在线观看| 91精品欧美久久久久久动漫| 日韩一区二区精品| 久久美女艺术照精彩视频福利播放| 国产精品天天看| 亚洲一区视频在线| 日韩av一二三| 国产成人无遮挡在线视频| 99久免费精品视频在线观看| 欧美亚洲综合一区| 日韩欧美国产wwwww| 国产精品丝袜91| 一区二区三区免费看视频| 视频一区二区不卡| 91小视频免费看| 色先锋资源久久综合| 在线播放国产精品二区一二区四区 | 亚洲少妇中出一区| 中文字幕一区在线观看| 亚洲国产日韩一级| 国产在线精品一区二区| 99麻豆久久久国产精品免费优播| 欧美无人高清视频在线观看| 国产精品一区二区黑丝| 在线视频中文字幕一区二区| 久久久精品tv| 亚洲精选视频免费看| 亚洲欧洲www| 亚洲免费在线播放| 青娱乐精品在线视频| 成人黄色a**站在线观看| 欧美伦理影视网| 久久精品欧美日韩精品| 欧美性做爰猛烈叫床潮| 26uuu欧美| 亚洲综合精品久久| 国产一区二区福利| 欧美伊人久久大香线蕉综合69| 久久久亚洲午夜电影| 亚洲影视在线播放| 国产成人精品1024| 欧美日韩高清不卡| 国产精品卡一卡二| 免费在线观看日韩欧美| 91在线国产观看| 精品国产一区二区国模嫣然| 亚洲一区在线看| 粉嫩欧美一区二区三区高清影视| 91.com视频| 一区二区视频在线| 国产精品小仙女| 欧美一卡二卡三卡| 亚洲精品大片www| 国产精品一区2区| 91精品国产综合久久精品图片| 中文字幕日韩精品一区| 韩国精品在线观看| 欧美日本免费一区二区三区| 中文字幕亚洲在| 国产福利一区在线| 欧美一区二区高清| 亚洲愉拍自拍另类高清精品| 成人午夜在线免费| 久久综合av免费| 日本亚洲电影天堂| 欧美一a一片一级一片| 亚洲天堂成人在线观看|