mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-14 08:59:50 -05:00
fixed small bug in probability computation in grouter
This commit is contained in:
parent
6d1a3937d6
commit
a41d9df4da
@ -1137,7 +1137,6 @@ void p3GRouter::locked_collectAvailableFriends(const GRouterKeyId& gxs_id,const
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// remove incoming peers and peers for which the proba is less than half the maximum proba
|
// remove incoming peers and peers for which the proba is less than half the maximum proba
|
||||||
float total_probas = 0.0f ;
|
|
||||||
uint32_t count=0;
|
uint32_t count=0;
|
||||||
|
|
||||||
for(uint32_t i=0;i<tmp_peers.size();++i)
|
for(uint32_t i=0;i<tmp_peers.size();++i)
|
||||||
@ -1150,8 +1149,6 @@ void p3GRouter::locked_collectAvailableFriends(const GRouterKeyId& gxs_id,const
|
|||||||
tmp_peers[count] = tmp_peers[i] ;
|
tmp_peers[count] = tmp_peers[i] ;
|
||||||
probas[count] = (max_probability==0.0)? (0.5+0.001*RSRandom::random_f32()) : probas[i] ;
|
probas[count] = (max_probability==0.0)? (0.5+0.001*RSRandom::random_f32()) : probas[i] ;
|
||||||
++count ;
|
++count ;
|
||||||
|
|
||||||
total_probas+=probas[i] ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp_peers.resize(count) ;
|
tmp_peers.resize(count) ;
|
||||||
@ -1174,17 +1171,29 @@ void p3GRouter::locked_collectAvailableFriends(const GRouterKeyId& gxs_id,const
|
|||||||
std::vector<std::pair<float,RsPeerId> > mypairs ;
|
std::vector<std::pair<float,RsPeerId> > mypairs ;
|
||||||
|
|
||||||
for(uint32_t i=0;i<tmp_peers.size();++i)
|
for(uint32_t i=0;i<tmp_peers.size();++i)
|
||||||
mypairs.push_back(std::make_pair(probas[i]/total_probas,tmp_peers[i])) ;
|
mypairs.push_back(std::make_pair(probas[i],tmp_peers[i])) ;
|
||||||
|
|
||||||
// now sort them up
|
// now sort them up
|
||||||
std::sort(mypairs.begin(),mypairs.end(),item_comparator_001()) ;
|
std::sort(mypairs.begin(),mypairs.end(),item_comparator_001()) ;
|
||||||
|
|
||||||
uint32_t max_count = std::min(std::min((uint32_t)mypairs.size(),(uint32_t)GROUTER_MAX_BRANCHING_FACTOR),duplication_factor);
|
int max_count = std::min(std::min((uint32_t)mypairs.size(),(uint32_t)GROUTER_MAX_BRANCHING_FACTOR),duplication_factor);
|
||||||
uint32_t n=0 ;
|
|
||||||
|
|
||||||
|
// normalise the probabilities
|
||||||
|
#ifdef GROUTER_DEBUG
|
||||||
|
std::cerr << " Normalising probabilities..." << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float total_probas = 0.0f ;
|
||||||
|
|
||||||
|
if(mypairs.size() > 0 && max_count > 0)
|
||||||
|
{
|
||||||
|
for(int i=mypairs.size()-1,n=0;i>=0 && n<max_count;--i,++n) total_probas += mypairs[i].first ;
|
||||||
|
for(int i=mypairs.size()-1,n=0;i>=0 && n<max_count;--i,++n) mypairs[i].first /= total_probas ;
|
||||||
|
}
|
||||||
|
|
||||||
float duplication_factor_delta =0.0;
|
float duplication_factor_delta =0.0;
|
||||||
|
|
||||||
for(int i=mypairs.size()-1;i>=0 && n<max_count;--i)
|
for(int i=mypairs.size()-1,n=0;i>=0 && n<max_count;--i,++n)
|
||||||
{
|
{
|
||||||
float ideal_dupl = duplication_factor*mypairs[i].first - duplication_factor_delta ; // correct what was taken in advance
|
float ideal_dupl = duplication_factor*mypairs[i].first - duplication_factor_delta ; // correct what was taken in advance
|
||||||
|
|
||||||
@ -1194,7 +1203,6 @@ void p3GRouter::locked_collectAvailableFriends(const GRouterKeyId& gxs_id,const
|
|||||||
std::cerr << " Peer " << mypairs[i].second << " prob=" << mypairs[i].first << ", ideal_dupl=" << ideal_dupl << ", real=" << real_dupl << ". Delta = " << duplication_factor_delta << std::endl;
|
std::cerr << " Peer " << mypairs[i].second << " prob=" << mypairs[i].first << ", ideal_dupl=" << ideal_dupl << ", real=" << real_dupl << ". Delta = " << duplication_factor_delta << std::endl;
|
||||||
|
|
||||||
friend_peers_and_duplication_factors[ mypairs[i].second ] = real_dupl ; // should be updated correctly
|
friend_peers_and_duplication_factors[ mypairs[i].second ] = real_dupl ; // should be updated correctly
|
||||||
++n ;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user