public int ChooseAction( double[] actionEstimates )
{
// actions count
int actionsCount = actionEstimates.Length;
// actions sum
double sum = 0, estimateSum = 0;
for ( int i = 0; i < actionsCount; i++ )
{
estimateSum += actionEstimates[i];
}
// get random number, which determines which action to choose
double actionRandomNumber = rand.NextDouble( );
for ( int i = 0; i < actionsCount; i++ )
{
sum += actionEstimates[i] / estimateSum;
if ( actionRandomNumber <= sum )
return i;
}
return actionsCount - 1;
}
}