?? c2.cpp
字號:
#include <cstdlib>//見【對程序的分析】
#include <ctime>//內置類型 顧名思義,用作時間存儲和處理的 就是long
#include <iostream>//包含了一系列模板化的I/O類 換成#include <iostream>的話,要加一句using namespace std;
//或把cout改成std::cout,end改成std::endl等等
#include<cmath>//cmath是c++標準風格的頭文件,位于std命名空間,用法和math.h差不多,都是包含一些常見的數學函數
#include<vector>
#include<algorithm>//和#include<vector>都是標準C++庫的兩個頭文件,都屬于STL庫 MSDN
int main( )
{
using namespace std;//名字空間
cout<<"定義變量"<<endl;
vector <int> v1,v3,v4,t1,t2;
vector<double>v5,v6;
vector <int>::iterator iter,iter3,iiter,new_end;
vector< vector<int> >::iterator iter2;
vector< vector<int> > v2,v7,v8;
vector<double>::iterator iter5;
cout<<"初始群體"<<endl;
int ii;
for(ii=0;ii<=9;ii++){
int i;
for ( i = 0 ; i <= 9; i++ )
v1.push_back( i );//v1.push_back在尾部加入一個數據
random_shuffle ( v1.begin( ), v1.end( ) );
v2.push_back (v1);
cout << "v1 =" ;
for ( iter = v1.begin( ) ; iter != v1.end( ) ; iter++ )
cout << " " << *iter;
cout << endl;
cout <<"v1 size is "<<v1.size () << endl;
v1.clear();
}
cout << "v2 all value is " <<endl;
for ( iter2 = v2.begin( ); iter2 != v2.end() ; iter2++ )
{ v1.clear ();
v1=*iter2;
for(iter=v1.begin ();iter!=v1.end ();iter++)
cout << *iter << " ";
cout<<endl;
}
cout <<"size is "<<v2.size () << endl;
cout<<"以下是算子,有三步,選擇,變異,交叉.其中選擇包括評價"<<endl;
cout<<"選擇"<<endl;
cout<<"定義距離矩陣"<<endl;
int b[][10]= { 0, 1, 4, 6, 8, 1, 3, 7, 2, 9,
1, 0, 7, 5, 3, 8, 3, 4, 2, 4,
4, 7, 0, 3, 8, 3, 7, 9, 1, 2,
6, 5, 3, 0, 3, 1, 5, 2, 9, 1,
8, 3, 8, 3, 0, 2, 3, 1, 4, 6,
1, 8, 3, 1, 2, 0, 3, 3, 9, 5,
3, 3, 7, 5, 3, 3, 0, 7, 5, 9,
7, 4, 9, 2, 1, 3, 7, 0, 1, 3,
2, 2, 1, 9, 4, 9, 5, 1, 0, 1,
9, 4, 2, 1, 6, 5, 9, 3, 1, 0
};
int p;
for(p=1;p<10;p++){
cout<<"初始原始適應度"<<endl;
v3.clear ();
int sum =0;
for ( iter2 = v2.begin( ); iter2 != v2.end() ; iter2++ )
{
for(iter=(*iter2).begin ();iter!=((*iter2).end ()-1);iter++){
sum+=b[*iter][*(iter+1)];
cout << b[*iter][*(iter+1)]<< " ";}
cout<<b[*((*iter2).begin ())][*((*iter2).end ()-1)]<<" ";
sum+=b[*((*iter2).begin ())][*((*iter2).end ()-1)];
v3.push_back (sum);
cout<<"sum= "<<sum<<endl;
sum=0;
}
cout << "v3 =" ;
for ( iter = v3.begin( ) ; iter != v3.end( ) ; iter++ )
cout << " " << *iter;
cout << endl;
cout <<"size is "<<v3.size () << endl;
cout<<"初始轉盤適應值"<<endl;
v4.assign (v3.begin (),v3.end ());
sort(v4.begin (),v4.end ());
cout << "v4 =" ;
for ( iter = v4.begin( ) ; iter != v4.end( ) ; iter++ )
cout << " " << *iter;
cout << endl;
cout <<"size is "<<v4.size () << endl;
double m=0;
double alpha=0.5;
v5.clear ();
for(iter=v3.begin();iter!=v3.end ();iter++ ){
int n=1;
for(iter3=v4.begin ();iter3!=v4.end ();iter3++){
if(*iter!=*iter3) n++;
else {
cout<<n<<endl;
m=alpha*pow(1-alpha,(double)n);
break;
}
}
v5.push_back (m);
}
cout << "v5 =" ;
for ( iter5 = v5.begin( ) ; iter5 != v5.end( ) ; iter5++ )
cout << " " << *iter5;
cout << endl;
cout <<"size is "<<v5.size () << endl;
cout<<"初始轉盤"<<endl;
v6.clear ();
for ( iter5 = v5.begin( ) ; iter5 != v5.end( ) ; iter5++ ){
m+=(*iter5)*1000;
v6.push_back (m);
}
double r=m;
cout<< r <<endl;
cout << "v6 =" ;
for ( iter5 = v6.begin( ) ; iter5 != v6.end( ) ; iter5++ )
cout << " " << *iter5;
cout << endl;
cout <<"size is "<<v6.size () << endl;
cout<<"轉盤選擇群體v7"<<endl;
v7.clear ();
for ( iter2 = v2.begin( ); iter2 != v2.end() ; iter2++ ){
double cw =(double) rand()/ (RAND_MAX + 1) * r;
int n=0;
for ( iter5 = v6.begin( ) ; iter5 != v6.end( ) ; iter5++ ){
if(cw>*iter5)n++;
else {cout<<n<<endl;
v7.push_back (*(v2.begin ()+n));
break;
}
}
}
cout << "all v7 value is " <<endl;
for ( iter2 = v7.begin( ); iter2 != v7.end() ; iter2++ )
{ v1.clear ();
v1=*iter2;
for(iter=v1.begin ();iter!=v1.end ();iter++)
cout << *iter << " ";
cout<<endl;
}
cout<<"隨機變異"<<endl;
srand( (unsigned)time( NULL ) );
int low, high,ab;
int range_max =10;
low =(double) rand()/ (RAND_MAX + 1) * range_max;
high=(double) rand()/ (RAND_MAX + 1) * range_max;
for ( iter2 = v7.begin( ); iter2 != v7.end() ; iter2++ ){
ab=(double) rand()/ (RAND_MAX + 1) * range_max;
if(ab==(iter2-v7.begin ())){
iter=(*iter2).begin ();
swap(*(iter+ low) ,*(iter+ high) );
}
}
cout << "v2 all value is " <<endl;
for ( iter2 = v7.begin( ); iter2 != v7.end() ; iter2++ )
{ v1.clear ();
v1=*iter2;
for(iter=v1.begin ();iter!=v1.end ();iter++)
cout << *iter << " ";
cout<<endl;
}
cout<<"變異位";
cout << low<< " "<<high<<"變異量值 "<<ab;
cout<<endl;
cout<<"交叉fuck"<<endl;
int i;
v1.clear ();
for ( i = 0 ; i <= 9; i++ )
v1.push_back( i );
vector<int> vv1,vv2,s1,s2;
random_shuffle ( v1.begin( ), v1.end( ) );
for(iter=v1.begin ();iter!=v1.end ();iter++)
cout << *iter << " ";
cout<<endl;
//iter=v1.begin ();
v8.clear ();
for(iiter=v1.begin ();iiter!=v1.end ();iiter+=2){
cout<<"now is "<<*iiter<<endl;
vv1.assign((*(v7.begin ()+(*iiter))).begin () ,(*(v7.begin ()+(*iiter))).end());
vv2.assign((*(v7.begin ()+(*(iiter+1)))).begin () ,(*(v7.begin ()+(*(iiter+1)))).end ());
cout<<"vv1 is "<<endl;
for(iter=vv1.begin ();iter!=vv1.end ();iter++)
cout << *iter << " ";
cout<<endl;
cout<<"vv2 is "<<endl;
for(iter=vv2.begin ();iter!=vv2.end ();iter++)
cout << *iter << " ";
cout<<endl;
srand( (unsigned)time( NULL ) );
int lo, hig;
int range_max =10;
while(1){
lo =(double) rand()/ (RAND_MAX + 1) * range_max;
hig=(double) rand()/ (RAND_MAX + 1) * range_max;
if( hig > lo )
break;
else if( hig< lo )
{
swap( lo , hig );
break;
}
}
cout<<" low and high postion is ";
cout << lo<< ", "<<hig;
cout<<endl;
s1.assign(vv1.begin()+lo, vv1.begin ()+hig);
s2.assign (vv2.begin()+lo, vv2.begin ()+hig);
cout<<"the son1 of the vv1 is,same 交叉段是 ";
for(iter=s1.begin ();iter!=s1.end ();iter++)
cout << *iter << " ";
cout<<endl;
cout<<"the son2 of the vv2 is,same 交叉段是 ";
for(iter=s2.begin ();iter!=s2.end ();iter++)
cout << *iter << " ";
cout<<endl;
for (iter = s2.begin(); iter != s2.end(); iter++)
new_end = remove( vv1.begin( ), vv1.end( ),*iter);
cout<<"after remove all son2 of vv2 ,vv1 is "<<endl;
for(iter=vv1.begin ();iter!=vv1.end ();iter++)
cout << *iter << " ";
cout<<endl;
for (iter = s1.begin(); iter != s1.end(); iter++)
new_end = remove( vv2.begin( ), vv2.end( ),*iter);
cout<<"after remove all son1 ,vv2 is "<<endl;
for(iter=vv2.begin ();iter!=vv2.end ();iter++)
cout << *iter << " ";
cout<<endl;
int d=(int )vv1.size ()-hig+lo;
t1.assign (vv1.begin() ,vv1.begin() +d);
cout<<"after assign,t1 is "<<endl;
for(iter=t1.begin ();iter!=t1.end ();iter++)
cout << *iter << " ";
cout<<endl;
t2.assign (vv2.begin() ,vv2.begin() +d);
cout<<"after assign,t2 is "<<endl;
for(iter=t2.begin ();iter!=t2.end ();iter++)
cout << *iter << " ";
cout<<endl;
t1.insert (t1.begin ()+lo,s2.begin (),s2.end ());
cout<<"after insert son2 of vv2 ,t1 is "<<endl;
for(iter=t1.begin ();iter!=t1.end ();iter++)
cout << *iter << " ";
cout<<endl;
t2.insert (t2.begin ()+lo,s1.begin (),s1.end ());
cout<<"after insert son1 of vv1 ,t2 is "<<endl;
for(iter=t1.begin ();iter!=t1.end ();iter++)
cout << *iter << " ";
cout<<endl;
v8.push_back (t1);
v8.push_back (t2);
}
cout << "v8 all value is " <<endl;
for ( iter2 = v8.begin( ); iter2 != v8.end() ; iter2++ )
{ v1.clear ();
v1=*iter2;
for(iter=v1.begin ();iter!=v1.end ();iter++)
cout << *iter << " ";
cout<<endl;
}
v2.assign (v8.begin (),v8.end ());
cout << "v2 all value is " <<endl;
for ( iter2 = v2.begin( ); iter2 != v2.end() ; iter2++ )
{ v1.clear ();
v1=*iter2;
for(iter=v1.begin ();iter!=v1.end ();iter++)
cout << *iter << " ";
cout<<endl;
}
cout <<"size is "<<v2.size () << endl;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -