void Forum::deliverService() { if( numberWorkers() > 0 && walkers().size() == 0 ) { TaxCollectorPtr walker = TaxCollector::create( _city() ); walker->send2City( this, ServiceWalker::goServiceMaximum|ServiceWalker::anywayWhenFailed ); addWalker( walker.object() ); } }
void match_walkers(Array1<double> & weights, Array1 <int> & branch) { const double split_threshold=1.8; branch=-1; int totwalkers=weights.GetDim(0); Array1<weight_obj> walkers(totwalkers); for(int i=0; i< totwalkers; i++) { walkers(i).w=weights(i); walkers(i).i=i; } sort(walkers.v,walkers.v+totwalkers); int currsmallest=0; for(int i=totwalkers-1; i > 1; i--) { if(walkers(i).w < split_threshold) break; int w=walkers(i).i; int smallest=walkers(currsmallest).i; double weight1=weights(w)/(weights(w)+weights(smallest)); if(weight1+rng.ulec() >= 1.0) { branch(w)=2; branch(smallest)=0; weights(w)+=weights(smallest); weights(w)/=2.0; } else { branch(w)=0; branch(smallest)=2; weights(smallest)+=weights(w); weights(smallest)/=2.0; } currsmallest++; } //for(int i=0; i< totwalkers; i++) { // cout << walkers(i).w << endl; //} }
WalkerList EntertainmentBuilding::_specificWorkers() const { return walkers(); }