本文整理汇总了C++中Entity::GetConfig方法的典型用法代码示例。如果您正苦于以下问题:C++ Entity::GetConfig方法的具体用法?C++ Entity::GetConfig怎么用?C++ Entity::GetConfig使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Entity
的用法示例。
在下文中一共展示了Entity::GetConfig方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: checkVicinityBlind
string Search::checkVicinityBlind( JoinedLandscape & thisLandscape, Entity & thisEntity, bool Sequential, int WhichLandscape )
/* randomly selects one move */
{
tempPayoff.SetConfig ( thisEntity.GetConfig() );
if ( !thisEntity.IsAlive() ) { return "EMPTY"; }
string tempConfig = tempPayoff.GetConfig();
unsigned short int i, j;
unsigned short int strLength;
double tempFitness;
strLength = tempConfig.length();
i = rand() % (strLength);
if ( tempConfig[i] == '0' ) { tempConfig[i] = '1'; }
else { tempConfig[i] = '0'; };
switch (WhichLandscape)
{
case 0: pLandscape = &thisLandscape;
break;
case 1: pLandscape = &thisLandscape.LOne;
break;
case 2: pLandscape = &thisLandscape.LTwo;
break;
}
tempFitness = thisLandscape.d[tempConfig].GetFitness();
if ( tempPayoff.GetFitness() <= thisLandscape.d[ thisEntity.GetConfig() ].GetFitness() ) { return "EMPTY"; }
return tempPayoff.GetConfig();
}
示例2: checkVicinityDist
string Search::checkVicinityDist( JoinedLandscape & thisLandscape, Entity & thisEntity, bool Sequential, int WhichLandscape )
/* randomly selects one move weighted by distribution */
{
tempPayoff.SetConfig ( thisEntity.GetConfig() );
if ( !thisEntity.IsAlive() ) { return "EMPTY"; }
string tempConfig = tempPayoff.GetConfig();
int i, j;
unsigned short int strLength;
double tempFitness;
map <string,int> chance;
vector <string> Configs;
strLength = tempConfig.length();
Configs.push_back( tempConfig );
for ( i = 0 ; i < strLength; i++ )
{
tempConfig = tempPayoff.GetConfig();
if ( tempConfig[i] == '0' ) { tempConfig[i] = '1'; }
else { tempConfig[i] = '0'; }
Configs.push_back( tempConfig );
}
unsigned int total = 0;
switch (WhichLandscape)
{
case 0: pLandscape = &thisLandscape;
break;
case 1: pLandscape = &thisLandscape.LOne;
break;
case 2: pLandscape = &thisLandscape.LTwo;
break;
}
vector <string>::iterator IT;
for ( IT = Configs.begin() ; IT != Configs.end() ; IT++ )
{
chance.insert( pair<string,int> ( (*IT), thisLandscape.d[(*IT)].GiveDistribution() ) );
total += thisLandscape.d[(*IT)].GiveDistribution();
}
i = rand() % total;
map <string,int>::reverse_iterator IT_TWO;
for ( IT_TWO = chance.rbegin() ; IT_TWO != chance.rend() ; IT_TWO++ ) // this random number might be 1 off
{
i = i-(*IT_TWO).second;
tempConfig = (*IT_TWO).first;
if (i < 0) { break; }
}
tempFitness = thisLandscape.d[tempConfig].GetFitness();
tempPayoff.SetConfig( tempConfig );
tempPayoff.SetFitness( tempFitness );
// if ( Move.GetFitness() <= d[ itsPayoff.GetConfig() ].GetFitness() ) { return "EMPTY"; }
return tempPayoff.GetConfig();
}
示例3: checkVicinityNonrandom
string Search::checkVicinityNonrandom( JoinedLandscape & thisLandscape, Entity & thisEntity, bool Sequential, int WhichLandscape )
/* this version finds the move with the greatest improvement choices constant */
{
tempPayoff.SetConfig ( thisEntity.GetConfig() ); // tempPayoff is current value for thisEntity
if ( !thisEntity.IsAlive() ) { return "EMPTY"; }
string configuration = tempPayoff.GetConfig(); // configuration is a temporary string to be returned as the potential move
unsigned short int i, j, strLength, searchLength;
double tempAverage = 0;
vector <Payoff> averages;
strLength = configuration.length();
switch (WhichLandscape)
{
case 0: pLandscape = &thisLandscape;
searchLength = strLength;
break;
case 1: pLandscape = &thisLandscape.LOne;
searchLength = strLength / 2;
break;
case 2: pLandscape = &thisLandscape.LTwo;
configuration = flipConfigString( configuration );
tempPayoff.SetConfig ( flipConfigString ( tempPayoff.GetConfig() ) );
searchLength = strLength / 2;
break;
}
tempPayoff.SetFitness ( (*pLandscape).d[configuration].GetFitness() );
for ( i = 0 ; i < searchLength ; i++)
{
configuration = tempPayoff.GetConfig(); // reset configuration
if ( configuration[i] == '0' ) { configuration[i] = '1'; } // flip one decision
else { configuration[i] = '0'; };
tempAverage = (*pLandscape).d[configuration].GetFitness(); // get the new value for the flipped string
averages.push_back ( Payoff(configuration, tempAverage) ); // add to the list of possibilties
}
configuration = tempPayoff.GetConfig(); // resetting configuration to the Entity's current value
if (WhichLandscape == 2) { configuration = flipConfigString (configuration); } // ugly hack to make the second landscape work
tempAverage = tempPayoff.GetFitness(); // resetting fitness to the Entity's current value
vector <Payoff>::iterator IT;
for ( IT = averages.begin() ; IT != averages.end() ; IT++ )
{
if ( tempAverage < (*IT).GetFitness() ) // if one of the averages is greater
{
configuration = (*IT).GetConfig(); // set the move information
tempAverage = (*IT).GetFitness(); // similar
}
} // the move information should be the greatest possible
if ( tempAverage <= tempPayoff.GetFitness() ) { return "EMPTY"; } // if less, don't recommend a move
if ( isEqual (tempAverage, tempPayoff.GetFitness() ) ) { return "EMPTY"; } // if equal, no reason to move
if ( WhichLandscape == 2 ) { return flipConfigString ( configuration ); } // flip the string back for the potential move
return configuration;
}
示例4: main
int main()
{
unsigned short int n=0, k=0, totalruns=0, i=0, k_two=0, walks=0, j=0;
string search_strategy;
Multicounter CounterA("A"), CounterB("B"), CounterC("C"), CounterD("D");
cout << "How many runs? ";
cin >> totalruns;
cout << "Select a size: ";
cin >> n;
srand ( time(NULL) );
cout << "Select k_1 (" << n-1 << " or less): ";
cin >> k;
cout << "Select k_2 (" << n-1 << " or less): ";
cin >> k_two;
cout << "Select number of steps: ";
cin >> walks;
cout << endl << "a) Keeps landscape constant (non-blind)"
<< endl << "b) Optimizes all choices at the same time (non-blind)"
<< endl << "all) Use all methods" << endl;
cout << "Select a search strategy[default='all']: " ;
cin >> search_strategy;
if ( search_strategy != "a" && search_strategy != "b" )
{
search_strategy = "all";
}
Landscape * pLandscape = 0;
Landscape * pLandscape_two = 0;
JoinedLandscape * pLandscape_join = 0;
Entity * pEntity = 0;
string Move;
bool success = 0;
while( i < totalruns)
{
pLandscape = new Landscape(n,k,1);
pLandscape_two = new Landscape(n,k,1);
pLandscape_join = new JoinedLandscape(*pLandscape, *pLandscape_two, k_two);
pEntity = new Entity( pLandscape_join->d, pLandscape_join->d_two, 2*n);
if ( search_strategy == "a" || search_strategy == "all")
{
cout << "--------Search A--------" << endl;
for ( j = 0 ; j < walks ; j++)
{
Move = pEntity->checkVicinity_one( pLandscape_join->d , pLandscape_join->d_two , n );
success = pEntity->Move( Move, pLandscape_join->d , pLandscape_join->d_two );
if ( !success ) { cout << "No move (1)" << endl; }
}
for ( j = 0 ; j < walks ; j++)
{
Move = pEntity->checkVicinity_two( pLandscape_join->d , pLandscape_join->d_two , n );
success = pEntity->Move( Move, pLandscape_join->d , pLandscape_join->d_two );
if ( !success ) { cout << "No move (2)" << endl; }
}
cout << "Final: " << pEntity->GetConfig() << ":" << pEntity->GetFitness() << endl;
CounterA.Add ( pEntity->GetFitness() );
cout << "------------------------" << endl;
}
pEntity->Reset( pLandscape_join->d, pLandscape_join->d_two );
if ( search_strategy == "b" || search_strategy == "all")
{
cout << "--------Search B--------" << endl;
for ( j = 0 ; j < walks ; j++)
{
Move = pEntity->checkVicinity_all( pLandscape_join->d , pLandscape_join->d_two );
success = pEntity->Move( Move, pLandscape_join->d , pLandscape_join->d_two );
if ( !success ) { cout << "No move" << endl; }
}
cout << "Final: " << pEntity->GetConfig() << ":" << pEntity->GetFitness() << endl;
CounterB.Add ( pEntity->GetFitness() );
cout << "------------------------" << endl;
}
pEntity->Reset( pLandscape_join->d, pLandscape_join->d_two );
if ( 1 )
{
cout << "--------Search C--------" << endl;
for ( j = 0 ; j < walks ; j++)
{
Move = pEntity->checkVicinity_one_blind( pLandscape_join->d , pLandscape_join->d_two , n );
success = pEntity->Move( Move, pLandscape_join->d , pLandscape_join->d_two );
if ( !success ) { cout << "No move (1)" << endl; }
}
for ( j = 0 ; j < walks ; j++)
{
Move = pEntity->checkVicinity_two_blind( pLandscape_join->d , pLandscape_join->d_two , n );
success = pEntity->Move( Move, pLandscape_join->d , pLandscape_join->d_two );
if ( !success ) { cout << "No move (2)" << endl; }
}
cout << "Final: " << pEntity->GetConfig() << ":" << pEntity->GetFitness() << endl;
CounterC.Add ( pEntity->GetFitness() );
cout << "------------------------" << endl;
}
pEntity->Reset( pLandscape_join->d, pLandscape_join->d_two );
if ( 1 )
{
cout << "--------Search D--------" << endl;
for ( j = 0 ; j < walks ; j++)
{
Move = pEntity->checkVicinity_one_blind( pLandscape_join->d , pLandscape_join->d_two , n );
success = pEntity->Move( Move, pLandscape_join->d , pLandscape_join->d_two );
if ( !success ) { cout << "No move (1)" << endl; }
Move = pEntity->checkVicinity_two_blind( pLandscape_join->d , pLandscape_join->d_two , n );
//.........这里部分代码省略.........