Beispiel #1
0
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(); }