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

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

?? population.h

?? 遺傳算法(圖像處理)
?? H
字號:
// population.h: interface for the population class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_POPULATION_H__EBC520C7_10A5_11D4_BAC1_9349EAE2243A__INCLUDED_)
#define AFX_POPULATION_H__EBC520C7_10A5_11D4_BAC1_9349EAE2243A__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

/////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <time.h>
#define GEN_LENGTH 8   //基因串長度
#define N_PARAMETER 1   //代表參數的個數
#define CODE_LENGTH 8   //每個參數基因編碼長度
#define P_MUTATION  0.001 //變異率
#define P_MATING    0.5   //雜交率

///////////////////////////////////////////////////////
//       INDIVIDUAL POPULAION  CALSS                 //
//               個體類定義                          //
///////////////////////////////////////////////////////
class population  
{
public:
	double fitness;//適應度
	unsigned int gen_chain1[GEN_LENGTH],gen_chain2[GEN_LENGTH];//雙鏈基因
	unsigned int decode_chain[GEN_LENGTH];//譯碼基因
	double x[N_PARAMETER];//參數實際值
	
public:
	population();
	void initial(void);//個體初始化函數
	void fitness_function(void);//適應度函數
	void decode(void);//譯碼函數
	virtual ~population();

};

population::population()
{
}
/********************************************************/
/*                POPULATION INITIAL                    */
/*                個體初始化函數                        */
/*********************************************************/
void population::initial(void)
{
	int i;
	unsigned int k;
	for(i=0;i<GEN_LENGTH;i++)
	 {  
	    if((rand()*2/RAND_MAX)>=1) k=1;
		else k=0; 
	    gen_chain1[i]=k;	
	 }

  for(i=0;i<GEN_LENGTH;i++)
	 {  
	    if((rand()*2/RAND_MAX)>=1) k=1;
		else k=0; 
		gen_chain2[i]=k;
	 }
	return;	
}

/********************************************************/
/*                  GENE DECODE                         */
/*                  基因譯碼函數                        */
/*********************************************************/
void population::decode()
{ long sum1,sum2,sum_all;
  int i,j,begin_l,end_l; 
 
 for(j=0;j<N_PARAMETER;j++) 
 {  sum2=1;sum1=0;sum_all=0;
    begin_l=j*CODE_LENGTH;end_l=(j+1)*CODE_LENGTH;
	for(i=begin_l;i<end_l;i++)
	{
		 if(gen_chain1[i]==gen_chain2[i]) 
		 { decode_chain[i]=0; sum1=sum1;}
		if(gen_chain1[i]!=gen_chain2[i])
			{decode_chain[i]=1;sum1=sum1+sum2;}
		sum_all=sum_all+sum2;
		sum2=sum2*2;
	}
  x[j]=(double)((double)sum1/(double)sum_all);
 }
 return;
}

/********************************************************/
/*                FITNESS FUNCATION                     */
/*                    適應度函數                        */
/*********************************************************/
void population::fitness_function()
{
	decode();
	fitness=x[0]*x[0];
	return;
}



population::~population()
{

}

///////////////////////////////////
//   WAREHOUSE CLASS DEFINE      //
//   優良基因倉庫類定義          //
////////////////////////////////////


class warehouse
{
public:
	double average_fitness;//優良基因平均適應度
	int warehouse_size;//基因庫個體總數
	int now_size;//基因庫現在庫存量
	population *pop;//優良個體基因

	warehouse();
	void initial(int size1);//基因庫初始化函數
	int add_individual(population pop1);//基因庫內增加個體函數
	void statistic(void);//基因庫內統計函數
	~warehouse();
};

warehouse::warehouse()
{
 now_size=0;warehouse_size=0;
}
/********************************************************/
/*                WAREHOUSE  INITIAL                    */
/*                基因庫初始化函數                        */
/*********************************************************/
void warehouse::initial(int size1)
{
 warehouse_size=size1;
 pop=(population *)malloc(sizeof(population)*size1);
 if(pop==NULL)   {cout<<"內存分配失敗!"<<endl;exit(0);}
 return;
}
/********************************************************/
/*               STATISTIC FUCATION                     */
/*                基因庫統計函數                        */
/*********************************************************/
void warehouse::statistic()
{int i;
 double sum1;
    sum1=0.0;
	if(now_size!=0)
	{   for(i=0;i<now_size;i++)	sum1=sum1+pop[i].fitness;
		average_fitness=sum1/(double)now_size;		
	}
	else
		average_fitness=0.0;
	return;
}
/********************************************************/
/*                ADD INDIVIDUAL                        */
/*                基因庫增加基因函數                    */
/*********************************************************/
int warehouse::add_individual(population pop1)
{   int i;
   if(now_size<warehouse_size)
   {
		pop[now_size]=pop1;
		now_size++;
	}
   else
   {
	   for(i=0;i<warehouse_size;i++)
	   {
		   if(pop1.fitness>pop[i].fitness) pop[i]=pop1;
	   }
   }
   return(1);
}



warehouse::~warehouse()
{

}

///////////////////////////////////////////////////////
//                 MATING POOL CLASS                 //
//                 交配池類定義                      //
///////////////////////////////////////////////////////
class mating_pool
{
public:
	int pool_size;//交配池中個體總數
	population *parent_pop,*filial_pop;//父代個體,子代個體
	double sumfitness;//交配池中個體適應度總和
	long int n_mating,n_mutation;//交配池中個體交配、變異次數統計
	double max_fitness;//最大適應度
	double average_fitness;//平均適應度
	int max_location;//最大適應度個體位置
	warehouse gene_base;//優良基因倉庫
	
	mating_pool();
	void initial(int pop_size);//初始化交配池函數
	void statistic();//交配池中個體統計函數
	int selection();//交配池中個體選擇函數
	int flip(double probability);//FLIP實驗函數
	int mutation(unsigned int loca);//變異函數
    int mating(unsigned int *parent1_chain1,unsigned int *parent1_chain2,
			   unsigned int *parent2_chain1,unsigned int *parent2_chain2,
			   int k5);//交配函數
	void generation(void);//代進化函數
	void next_generation(void);//父代、子代一致函數
	void report_generation(void);//一代個體報告函數
	void initial_gene_base(int size1);//優良基因庫初始化函數
	void retain_good_gene(void);//優良基因保存函數
	void recall_good_gene(int size1);//優良基因輸出函數
	~mating_pool();
};

mating_pool::mating_pool()
{
	n_mutation=0;n_mating=0;
	sumfitness=0.0;max_fitness=0.0;max_location=0;
}

/********************************************************/
/*                MATING POOL INITIAL                   */
/*                交配池初始化函數                      */
/*********************************************************/
void mating_pool::initial(int pop_size)
{
  int  i;
  pool_size=pop_size;
  parent_pop=(population *)malloc(sizeof(population)*pool_size);
  if(parent_pop==NULL) {cout<<"內存空間分配失敗!"<<endl;exit(0);}
  filial_pop=(population *)malloc(sizeof(population)*pool_size);
  if(filial_pop==NULL) {cout<<"內存空間分配失敗!"<<endl;exit(0);}
  for(i=0;i<pool_size;i++)
  {
	  parent_pop[i].initial();
	  parent_pop[i].fitness_function();
	  filial_pop[i]=parent_pop[i];
  }
  return;
}
/********************************************************/
/*                STATISTIC FUNCTION                   */
/*                交配池統計函數                        */
/*********************************************************/
void mating_pool::statistic()
{int i,max_l;
 double sum1,max_f;
 sum1=0.0;max_f=0.0;max_l=0;
 for(i=0;i<pool_size;i++)
 {
 	 sum1=sum1+parent_pop[i].fitness;
	 if(parent_pop[i].fitness>max_f) 
	 {
		 max_f=parent_pop[i].fitness;
		 max_l=i;
	 } 
 }
 sumfitness=sum1;max_fitness=max_f;max_location=max_l;
 average_fitness=sumfitness/pool_size;
 return;
}
/********************************************************/
/*                SELECTION FUNCTION                   */
/*                  個體選擇函數                        */
/*********************************************************/
int mating_pool::selection()
{ double rand1,partsum;
  int j;
  partsum=0.0;j=0;
  rand1=(double)rand()/(double)RAND_MAX;
  rand1=rand1*sumfitness;
  while((partsum<rand1)&&(j<pool_size))
	{ partsum=partsum+parent_pop[j].fitness;j++;}
  return(j);
}
///////////////////////////////////////////////////////
//               FLIP FUNCTION                      //
//               FLIP 實驗函數                       //
///////////////////////////////////////////////////////

int mating_pool::flip(double probability)
{   double probability_f;     
    // srand((unsigned)time(NULL));
	 probability_f=(double)rand()/(double)(RAND_MAX);
	 if ( probability_f<=probability) return(1);
	 else return(0);
}
///////////////////////////////////////////////////////
//               MUTATION FUNCTION                  //
//                     變異函數                      //
///////////////////////////////////////////////////////
int mating_pool::mutation(unsigned int loca)
{    int mutate;
     mutate=flip(P_MUTATION);
     if(mutate==1)
	{   n_mutation=n_mutation+1;
	if(loca==1) loca=0;
		else loca=1;
	}
     if(loca==1) return(1);
	else return(0);
}
///////////////////////////////////////////////////////
//                 MATING FUNCTION                  //
//                     雜交函數                      //
///////////////////////////////////////////////////////
int mating_pool::mating(unsigned int *parent1_chain1,unsigned int *parent1_chain2,
						unsigned int *parent2_chain1,unsigned int *parent2_chain2,
						int k5)
{  int j;
   if(flip(P_MATING)==1)
	 {  n_mating=n_mating+1;
	    for(j=0;j<GEN_LENGTH;j++)
	    {
		filial_pop[k5].gen_chain1[j]=mutation(parent1_chain1[j]);
		filial_pop[k5].gen_chain2[j]=mutation(parent2_chain2[j]);
		filial_pop[k5+1].gen_chain1[j]=mutation(parent2_chain1[j]);
		filial_pop[k5+1].gen_chain2[j]=mutation(parent1_chain2[j]);
	     }
	 }

else{
   for(j=0;j<GEN_LENGTH;j++)
      {  filial_pop[k5].gen_chain1[j]=mutation(parent1_chain1[j]);
	     filial_pop[k5].gen_chain2[j]=mutation(parent1_chain2[j]);
	     filial_pop[k5+1].gen_chain1[j]=mutation(parent2_chain1[j]);
	     filial_pop[k5+1].gen_chain2[j]=mutation(parent2_chain2[j]);
      }
    }
   return(1);
}
/********************************************************/
/*                GENERATION FUNCTION                   */
/*                  子代產生函數                        */
/*********************************************************/
void mating_pool::generation(void)
{  unsigned int mate1,mate2;
   int j;
   j=0;
   while(j<pool_size)
   {  mate1=selection();mate2=selection();
	 mating(parent_pop[mate1].gen_chain1,parent_pop[mate1].gen_chain2,
		    parent_pop[mate2].gen_chain1,parent_pop[mate2].gen_chain2,
		    j);
	 filial_pop[j].fitness_function();
	 filial_pop[j+1].fitness_function();
	 j=j+2;
    }
   return;
}
/********************************************************/
/*                NEXT GENERATION                       */
/*      下一代子代產生的準備函數:父代、子代一致函數    */
/*********************************************************/
void mating_pool::next_generation()
{int i;
 for(i=0;i<pool_size;i++) parent_pop[i]=filial_pop[i];
 return;
 }


void mating_pool::report_generation(void)
{
	int i;
	cout<<"gen   chain1:  ";
	for(i=GEN_LENGTH-1;i>=0;i--)
	cout<<parent_pop[max_location].gen_chain1[i];
	cout<<endl;

	cout<<"gen   chain2:  ";
	for(i=GEN_LENGTH-1;i>=0;i--)
	cout<<parent_pop[max_location].gen_chain2[i];
	cout<<endl;
    
	cout<<"decode chain:  ";
	for(i=GEN_LENGTH-1;i>=0;i--)
	cout<<parent_pop[max_location].decode_chain[i];
	cout<<endl;

	cout<<"Parameters Are:"<<endl;
	for(i=N_PARAMETER-1;i>=0;i--)
	cout<<"x["<<i<<"]="<<parent_pop[max_location].x[i]<<endl;
	cout<<"Max Population Location Is:  "<<max_location<<endl;
    cout<<"Max Fitness="<<parent_pop[max_location].fitness<<endl;
	cout<<"Max Fitness="<<max_fitness<<endl;
	cout<<"Average Fitness= "<<average_fitness<<endl;
	return;	
}
/********************************************************/
/*                INITIAL WAREHOUSE                     */
/*                基因倉庫初始化函數                    */
/*********************************************************/
void  mating_pool::initial_gene_base(int size1)
{
	gene_base.initial(size1);
	return;
}
/********************************************************/
/*                RETAIN GOOD GENE                      */
/*                優良基因保存函數                      */
/*********************************************************/
void mating_pool::retain_good_gene(void)
{int i;
  gene_base.add_individual(parent_pop[max_location]);
  for(i=0;i<pool_size;i++)
  {
	  if(parent_pop[i].fitness>average_fitness)
		  gene_base.add_individual(parent_pop[i]);
  }
 return;	
}
/********************************************************/
/*                RECALL GOOD GENE                      */
/*                優良基因輸出函數                      */
/*********************************************************/
void  mating_pool::recall_good_gene(int size1)
{
	int i,j;
	j=0;
	for(i=0;i<pool_size;i++)
	{
		if(parent_pop[i].fitness<gene_base.pop[j].fitness)
		{ parent_pop[i]=gene_base.pop[i];
		  j++;
		}
		if(j>=size1) break;
	}
	return;
}

mating_pool::~mating_pool()
{

}

#endif // !defined(AFX_POPULATION_H__EBC520C7_10A5_11D4_BAC1_9349EAE2243A__INCLUDED_)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜激情久久久| 三级欧美韩日大片在线看| 久草中文综合在线| 蜜臀av一级做a爰片久久| 狂野欧美性猛交blacked| 蜜芽一区二区三区| 国产高清视频一区| 欧美三电影在线| 久久久久久久久久久电影| 亚洲欧美综合网| 久久99热99| 欧洲亚洲精品在线| 国产农村妇女毛片精品久久麻豆 | 亚洲综合另类小说| 国产另类ts人妖一区二区| 欧美视频精品在线| 欧美国产综合一区二区| 久久国产精品色| 91精品国模一区二区三区| 中文一区二区在线观看 | 欧美曰成人黄网| 国产精品伦理一区二区| 国产一区二区看久久| 欧美日韩日日骚| 亚洲国产精品天堂| 欧美视频一区在线| 亚洲午夜激情网站| 在线观看中文字幕不卡| 一区二区三区加勒比av| 91国偷自产一区二区三区观看| 国产婷婷精品av在线| 国产一区二区三区免费播放| 日韩视频在线观看一区二区| 亚洲一区二区三区激情| 欧美日本国产一区| 日欧美一区二区| 日韩美女一区二区三区| 国模套图日韩精品一区二区 | 日韩avvvv在线播放| 欧美一级黄色大片| 九色porny丨国产精品| 亚洲小少妇裸体bbw| 亚洲欧洲精品天堂一级| 精品三级在线观看| 九九国产精品视频| 亚洲乱码国产乱码精品精可以看| www国产精品av| 欧美精品在欧美一区二区少妇| av不卡在线播放| 亚洲啪啪综合av一区二区三区| 99re8在线精品视频免费播放| 中文字幕一区日韩精品欧美| 岛国一区二区三区| 国产精品国产三级国产普通话三级| 成人性生交大片免费看视频在线| 国产欧美一区视频| 在线观看亚洲专区| 日韩精品电影在线观看| 精品91自产拍在线观看一区| av毛片久久久久**hd| 亚洲国产精品久久久久婷婷884| 欧美在线观看视频一区二区 | 日本成人超碰在线观看| 精品国产一区a| 欧美日韩三级视频| 欧美欧美午夜aⅴ在线观看| 99精品国产热久久91蜜凸| 亚洲成在人线免费| 亚洲美女精品一区| 亚洲国产成人一区二区三区| 欧美日韩aaa| 欧美福利视频导航| 欧美日韩成人一区二区| 91国在线观看| 欧美乱熟臀69xxxxxx| 欧美影片第一页| 在线观看日韩av先锋影音电影院| 91小视频免费看| 色综合一区二区| 欧美三级韩国三级日本三斤| 色久综合一二码| 91精品婷婷国产综合久久性色| 欧美亚洲动漫制服丝袜| 欧美午夜不卡视频| 日韩片之四级片| 久久综合久久综合九色| 激情综合一区二区三区| 亚洲男人都懂的| 国产精品一区在线观看乱码| 欧美电影影音先锋| 亚洲一二三区视频在线观看| 91玉足脚交白嫩脚丫在线播放| 久久久久久一级片| 国产女主播视频一区二区| 亚洲日本丝袜连裤袜办公室| 亚洲高清免费在线| 国产精品1024久久| 欧美一区二区三区四区在线观看| 久久蜜桃一区二区| 日本网站在线观看一区二区三区| 国产高清精品久久久久| 日韩精品一区二区三区swag | 国产女人18毛片水真多成人如厕| 中文字幕在线观看不卡| 美脚の诱脚舐め脚责91| 欧美午夜精品一区二区三区| 中文字幕欧美日韩一区| 美女看a上一区| 91精品国产综合久久久久久漫画| 中文字幕一区二区在线观看| 国产精品一卡二卡| 26uuu亚洲综合色| 亚洲图片一区二区| 91亚洲精品久久久蜜桃网站| 久久色视频免费观看| 激情综合网最新| 精品久久久久久亚洲综合网| 亚洲成人综合视频| 欧美精品免费视频| 亚洲18影院在线观看| 欧美日本视频在线| 免费看日韩精品| 日韩免费观看2025年上映的电影| 麻豆极品一区二区三区| 日韩精品专区在线影院重磅| 国内外成人在线| 中文字幕一区在线| 91丝袜美腿高跟国产极品老师| 国产精品毛片久久久久久久| 日本高清视频一区二区| 琪琪一区二区三区| 中文字幕不卡在线播放| 色婷婷综合久久久中文一区二区| 日韩影院免费视频| 久久久久久久久99精品| 91亚洲国产成人精品一区二区三 | 欧美精品丝袜中出| 国产一区二区精品在线观看| 亚洲欧美韩国综合色| 精品va天堂亚洲国产| 欧美手机在线视频| 99re66热这里只有精品3直播| 免费成人在线观看| 日韩高清一区二区| 一级女性全黄久久生活片免费| 国产欧美日韩综合精品一区二区| 欧美精品日韩一本| 欧美精品在线观看一区二区| 精品视频在线看| 色婷婷亚洲婷婷| 美洲天堂一区二卡三卡四卡视频| 国产精品亲子乱子伦xxxx裸| 欧美人xxxx| 波多野结衣亚洲| 韩国女主播一区| 奇米影视一区二区三区小说| 1区2区3区欧美| 欧美国产一区视频在线观看| 日韩区在线观看| 欧美放荡的少妇| 666欧美在线视频| 欧美色区777第一页| 激情综合色播五月| 毛片av中文字幕一区二区| 亚洲国产一区视频| 一区二区高清在线| 国产精品久久久久影院老司| 亚洲精品在线三区| 精品国产成人在线影院 | 亚洲一区二区三区四区五区中文 | 7777精品伊人久久久大香线蕉的| 91久久国产综合久久| 在线精品观看国产| 欧美日韩在线电影| 日韩一级视频免费观看在线| 欧美一区二区三区色| 欧美一级搡bbbb搡bbbb| 5566中文字幕一区二区电影| 日韩一级片网址| 国产欧美视频一区二区三区| 亚洲欧美电影院| 日韩精品五月天| 97久久超碰国产精品电影| 欧美日韩成人综合天天影院| 精品88久久久久88久久久| 国产精品美女久久久久av爽李琼| 亚洲一区二区三区四区在线| 午夜精品久久一牛影视| 久久国产成人午夜av影院| 成人app软件下载大全免费| 欧美午夜免费电影| 国产精品美女久久久久aⅴ | 欧美不卡视频一区| 亚洲猫色日本管| 激情综合色丁香一区二区| 91精品福利在线| 国产精品三级av| 久久精品国产**网站演员| a亚洲天堂av| 日本一区二区动态图|