欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C++實現(xiàn)簡單遺傳算法

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

本文實例講述了C++實現(xiàn)簡單遺傳算法。分享給大家供大家參考。具體實現(xiàn)方法如下:

//遺傳算法 GA 
#include<iostream>
#include <cstdlib>
#include<bitset>
using namespace std;
const int L=5; //定義編碼的長度 
int f(int x) //定義測設(shè)函數(shù)f(x) 
{
int result;
result=x*x*x-60*x*x+900*x+100;
return result;
}
int main(int argc,char *argv[])
{
int a(0),b(32); //定義x的定義域范圍
const int pop_size=8; //定義種群大小
// int L; //指定編碼的長度 
const int NG=20; //指定種群最大的繁殖的代數(shù) 
int t=0; //當(dāng)前繁殖的代數(shù) 
int p[pop_size]; //定義種群 
int q[pop_size]; //定義繁殖種群 即種群的下一代 
srand(6553); //定義隨機數(shù)生成的種子 
double sum; //適值總和 
double avl_sum; //適度平均值 
double p_probability[pop_size]; //適值概率 
double pp[pop_size];
double pro; //定義隨機生成的概率 
float pc=0.90; //定義交叉的概率 
float pm=0.05; //定義變異的概率 
cout<<"初始的種群 "; 
for(int i=0;i<pop_size;i++) //生成初始的第0代種群 
  {
p[i]=rand()%31;
cout<<p[i]<<" ";
  }
   cout<<endl;
   cout<<endl;
   void Xover(int &,int &); //聲明交叉函數(shù) 
//當(dāng)停止準則不滿足 即繁殖代數(shù)沒到最大代數(shù) ,繼續(xù)繁殖
while(t<=NG)             
{ 
cout<<"繁殖的代數(shù):t="<<t<<endl;
sum=0.0;
for(int i=0;i<pop_size;i++)      
  {
q[i]=p[i];
cout<<q[i]<<" ";
  }
  cout<<endl;
 for(int i=0;i<pop_size;i++) //計算sum 
   sum +=f(p[i]);
 avl_sum=sum/pop_size;
 cout<<"sum="<<sum<<endl;
 cout<<"適度平均值="<<avl_sum<<endl; 
    for(int i=0;i<pop_size;i++) //計算適值概率 
    {
      p_probability[i]=f(p[i])/sum;
if(i==0)
{
pp[i]=p_probability[i];
cout<<"pp"<<i<<"="<<pp[i]<<endl;
}
      else
      {
       pp[i]=p_probability[i]+pp[i-1];
    cout<<"pp"<<i<<"="<<pp[i]<<endl;
      }
//cout<<"p_probability"<<i<<"="<<p_probability[i]<<endl;
    }
    //選擇雙親
     for(int i=0;i<pop_size;i++) 
     {
     pro=rand()%1000/1000.0;
if(pro>=pp[0]&&pro<pp[1])
  p[i]=q[0]; 
else if(pro>=pp[1]&&pro<pp[2])
       p[i]=q[1];
     else if(pro>=pp[2]&&pro<pp[3])
       p[i]=q[2];
     else if(pro>=pp[3]&&pro<pp[4])
       p[i]=q[3];
     else if(pro>=pp[4]&&pro<pp[5])
       p[i]=q[4];
     else 
       p[i]=q[5]; 
     }
//雜交算子
int r=0;
int z=0; 
for(int j=0;j<pop_size;j++) 
{
  pro=rand()%1000/1000.0;
if(pro<pc)
{
 ++z;
 if(z%2==0)
  Xover(p[r],p[j]);
 else
  r=j; 
} 
} 
//變異算子 
for(int i=1;i<=pop_size;i++)
 for(int j=0;j<L;j++)
{
 pro=rand()%1000/1000.0; //在【0,1】區(qū)間產(chǎn)生隨機數(shù)
if(pro<pm)
{
bitset<L>v(p[i]);      
v.flip(j);
p[i]=v.to_ulong();
} 
 } 
t++;
cout<<endl; //種群繁殖一代 
 }
 cout<<"最終結(jié)果:";  
 for(int i(0);i<pop_size;i++) //算法結(jié)束,輸出結(jié)果 
  {
 cout<<p[i]<<" ";
  }
  cout<<endl;
return 0;
}
//定義雜交操作 
 void Xover(int &a,int &b)         
{ 
int pos; //隨機生成雜交點 即第幾個分量進行相互交換
pos=rand()%5+1; //在n個分量中,隨機確定第pos個分量 
int j,k;
  j=pos;
  k=pos;
bitset<L>e(a);
bitset<L>f(b); //前pos個分量進行相互交換
bitset<L>g;            
bitset<L>h;
for(int i=0;i<pos;i++)
{
if(e[i]==1)
 g.set(i); 
   }
  for(int i=0;i<pos;i++)
   {
   if(f[i]==1)
    h.set(i);
   }
  for(j;j<L;j++)
   {
   if(f[j]==1)
    g.set(j);
   }
  for(k;k<L;k++)
   {
   if(e[k]==1)
    h.set(k);
   }
a=g.to_ulong();
b=h.to_ulong();  
}

希望本文所述對大家的C++程序設(shè)計有所幫助。

上一篇:C語言中的數(shù)組和指針匯編代碼分析實例

欄    目:C語言

下一篇:C++二分查找在搜索引擎多文檔求交的應(yīng)用分析

本文標題:C++實現(xiàn)簡單遺傳算法

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3065.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有