本文整理汇总了C++中Population::SPRPerturbation方法的典型用法代码示例。如果您正苦于以下问题:C++ Population::SPRPerturbation方法的具体用法?C++ Population::SPRPerturbation怎么用?C++ Population::SPRPerturbation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Population
的用法示例。
在下文中一共展示了Population::SPRPerturbation方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RemoteSubtreeWorker
//.........这里部分代码省略.........
return 0;
}
//
bool gotNewIndiv=false;
int recievedDefNumber;
debug_mpi("SYNCH COMM (node 0)");
gotmessage=true;
assert(tag == TAG_TREE_STRINGS || tag==TAG_PERTURB);
if(firstmessage==false) debug_mpi("\tfound a newer message...");
if(tag != TAG_PERTURB){
gotNewIndiv=true;
RecvMPIMessage(&buf, &size, 0, &tag, true);
assert(tag == TAG_MODEL);
models=(double*) buf;
debug_mpi("\tgot new ind" );
RecvMPIMessage(&buf, &size, 0, &tag, true);
// if(tag != TAG_PERTURB){
perturb=false;
assert(tag == TAG_SUBTREE_DEFINE);
subtreeNode=atoi(buf);
if(subtreeNode!=0){
delete []buf;
RecvMPIMessage(&buf, &size, 0, &tag, true);
assert(tag == TAG_SUBTREE_ITERATION);
recievedDefNumber=atoi(buf);
debug_mpi("\tworking on subtree def %d, node %d", recievedDefNumber, subtreeNode);
}
else recievedDefNumber=0;
}
else{
pop.pertMan->pertType=atoi(tree_strings);
perturb=true;
}
//if the current best and the new tree are either both accurate for the same subtree def or both
//inaccurate for subtrees, just replace the worst individual, rather than the
// whole pop, that way if the tree is old and worse that what the remote
// already has it won't matter
if(gotNewIndiv){
*which=(int)pop.cumfit[0][0];
debug_mpi("\treplacing indiv %d", *which);
pop.ReplaceSpecifiedIndividuals(1, which, tree_strings, models);
if(recievedDefNumber!=pop.subtreeDefNumber || (pop.subtreeNode!=0 && subtreeNode!=0)){
pop.AssignSubtree(subtreeNode, *which);
pop.CalcAverageFitness();
debug_mpi("\tfilling pop with clones of %d", *which);
pop.SetNewBestIndiv(*which);
pop.FillPopWithClonesOfBest();
pop.subtreeDefNumber=recievedDefNumber;
}
delete [] models;
delete [] buf;
}
#ifdef INCLUDE_PERTURBATION
if(perturb==true){
pop.CalcAverageFitness();
if(pop.pertMan->pertType==1){
debug_mpi("peforming NNI perturbation...");
int toReplace=(pop.bestIndiv == 0 ? 1 : 0);
pop.AppendTreeToTreeLog(-1, pop.bestIndiv);
pop.NNIPerturbation(pop.bestIndiv, toReplace);
pop.SetNewBestIndiv(toReplace);
pop.FillPopWithClonesOfBest();
pop.AppendTreeToTreeLog(-1, pop.bestIndiv);
}
else if(pop.pertMan->pertType==2){
debug_mpi("peforming SPR perturbation...");
int toReplace=(pop.bestIndiv == 0 ? 1 : 0);
pop.AppendTreeToTreeLog(-1, pop.bestIndiv);
pop.SPRPerturbation(pop.bestIndiv, toReplace);
pop.SetNewBestIndiv(toReplace);
pop.FillPopWithClonesOfBest();
pop.AppendTreeToTreeLog(-1, pop.bestIndiv);
}
else assert(0);
}
#endif
delete [] tree_strings;
tag=0;
firstmessage=false;
}
if(gotmessage==true){
// if(pop.subtreeNode != subtreeNode) pop.AssignSubtree(subtreeNode);
pop.CalcAverageFitness();
debug_mpi("\tbest score= %f", pop.indiv[*which].Fitness());
//DEBUG
//pop.AppendTreeToTreeLog(rank, -1, *which);
}
}
SendMPIMessage(NULL, 0, 0, TAG_QUIT);
debug_mpi("\tsent: quit message");
delete [] which;
debug_mpi("quitting");
return 0;
}