📄 group.cpp
字号:
// Group.cpp: implementation of the Group class.
//
//////////////////////////////////////////////////////////////////////
#include "Group.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Group::Group():member(),gene(0) //memberCount=10 //用const int memberCount的话需在列表中初始化**,memberCount=10
{
VectorInt vi;
int i=0;
for(i=0;i<CITYCOUNT;i++)
{
vi.push_back(i);
}
Individual indiv(vi);
for (i=0;i<memberCount;i++)
{
indiv=indiv.variate();
member.push_back(indiv);
}
sort(member.begin(),member.end());
}
Group::Group(int ge, VectorIdv vi):member(vi),gene(ge)
{
}
Group::~Group()
{
member.~vector();
}
//ofstream test1("test1.txt");
Group& Group::evolute()
{
VectorIdv mem;
int rand1;
int rand2;
for (int i=0;i<memberCount*crossRate;)
{
rand1=Individual::ranRange(0,CITYCOUNT-1);
do
{
rand2=Individual::ranRange(0,CITYCOUNT-1);
}while(rand1==rand2);
Individual& mem1=member.at(rand1);
Individual& mem2=member.at(rand2);
Individual& newMem=mem1.cross(mem2);
// test1<<rand1<<"------"<<rand2<<endl;
// mem1.printIndividual(test1);
// mem2.printIndividual(test1);
// newMem.printIndividual(test1);
if (!find(member,newMem))
{
mem.push_back(newMem);
i++;
}
}
for (i=0;i<memberCount*variateRate;i++)
{
rand1=Individual::ranRange(0,CITYCOUNT-1);
Individual& pref=member.at(rand1);
Individual& indinew=pref.variate();
mem.push_back(indinew);
}
mem.insert(mem.end(),member.begin(),member.end());
sort(mem.begin(),mem.end());
mem.erase(mem.begin()+memberCount,mem.end());
Group *pGroup=new Group(gene+1,mem);
return *pGroup;
}
Group::printGroup(ostream& cout)
{
cout<<"第"<<gene<<"代种群:"<<endl;
int size=member.size();
for(int i=0;i<size;i++)
{
Individual& indi=member.at(i);
indi.printIndividual(cout);
}
cout<<endl;
}
Group::printGroup(ofstream& cout)
{
cout<<"第"<<gene<<"代种群:"<<endl;
int size=member.size();
for(int i=0;i<size;i++)
{
Individual& indi=member.at(i);
indi.printIndividual(cout);
}
cout<<endl;
}
Group::printBestIndividual(ostream& cout)
{
cout<<"第"<<gene<<"代最佳个体:"<<endl;
Individual& indi=member.at(0);
indi.printIndividual(cout);
cout<<endl;
}
Group::printBestIndividual(ofstream& cout)
{
cout<<"第"<<gene<<"代最佳个体:"<<endl;
Individual& indi=member.at(0);
indi.printIndividual(cout);
cout<<endl;
}
bool Group::operator ==(Group& other)
{
return calValue()==other.calValue();
}
int Group::calValue()
{
vindviter iter=member.begin();
return (*iter).CalValue();
}
const double Group::variateRate=0.4;
const double Group::crossRate=0.8;
const int Group::memberCount=10;
bool Group::find(const VectorIdv& vectoridv,const Individual& individ)
{
int size=vectoridv.size();
for (int i=0;i<size;i++)
{
Individual elem=vectoridv.at(i);
if (elem==individ)
{
return true;
}
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -