57 double pop = 0, work = 0;
58 std::vector<AGStreet*>::iterator it;
61 pop += (*it)->getPopulation();
62 work += (*it)->getWorkplaceNumber();
69 double neededWorkPositionsInCity = (1.0 -
statData.unemployement)
74 neededWorkPositionsInCity *=
statData.laborDemand;
75 statData.workPositions = (int)neededWorkPositionsInCity;
76 statData.factorWorkPositions = neededWorkPositionsInCity / (double) work;
79 (*it)->setPopulation((*it)->getPopulation() *
statData.factorInhabitants);
80 (*it)->setWorkplaceNumber((*it)->getWorkplaceNumber() *
statData.factorWorkPositions);
84 for (
const auto& itE :
net->getEdgeMap()) {
85 std::vector<AGStreet*>::iterator itS;
87 if (*itS == itE.second) {
92 if (itS ==
streets.end() && !itE.second->isInternal()) {
103 std::vector<AGStreet*>::iterator it;
104 int workPositionCounter = 0;
107 for (
int i = 0; i < (*it)->getWorkplaceNumber(); ++i) {
109 ++workPositionCounter;
112 }
catch (
const std::bad_alloc&) {
113 std::cout <<
"Number of work positions at bad_alloc exception: " << workPositionCounter << std::endl;
120 std::cout <<
"--> work position:" << std::endl;
121 std::cout <<
" |-> in city: " << workPositionCounter << std::endl;
122 std::cout <<
" |-> out city: " <<
statData.workPositions - workPositionCounter << std::endl;
123 std::cout <<
" |-> in+out city: " <<
statData.workPositions << std::endl;
166 std::vector<AGStreet*>::iterator it;
169 int idHouseholds = 0;
170 std::vector<int> numAdults(
statData.households);
171 std::vector<int> numChilds(
statData.households);
174 for (
int i = 0; i <
statData.households; i++) {
178 numAdults[i] = -numAdults[i];
179 }
else if (totalChildrenLeft > 0) {
180 numChilds[i] =
statData.getPoissonsNumberOfChildren(
statData.meanNbrChildren);
181 totalChildrenLeft -= numChilds[i];
185 const int numSecondPers =
statData.getPeopleOlderThan(
statData.limitAgeChildren) -
statData.households + totalChildrenLeft;
186 for (
int i = 0; i < numSecondPers; i++) {
187 int index = i % numAdults.size();
188 if (numAdults[index] >= 0) {
189 numAdults[index] += 1;
191 numAdults[index] -= 1;
195 people += (*it)->getPopulation();
196 while (people > 0 && idHouseholds < (
int)numAdults.size()) {
200 households.back().generatePeople(abs(numAdults[i]), numChilds[i], numAdults[i] < 0);
203 numAdults[i] = numAdults[numAdults.size() - idHouseholds];
204 numChilds[i] = numChilds[numAdults.size() - idHouseholds];
216 std::list<AGHousehold>::iterator itt;
218 if (itt->getAdultNbr() == 1) {
221 if (itt->getAdultNbr() == 2) {
224 nbrChild += itt->getPeopleNbr() - itt->getAdultNbr();
236 std::cout <<
"--> population:" << std::endl;
237 std::cout <<
" |-> city households: " << nbrHH << std::endl;
238 std::cout <<
" |-> city people: " << nbrSingle + nbrCouple + nbrChild << std::endl;
239 std::cout <<
" |-> city single: " << nbrSingle <<
" / (in) couple: " << nbrCouple << std::endl;
240 std::cout <<
" |-> city adults: " << nbrSingle + nbrCouple << std::endl;
241 std::cout <<
" |-> estimation: " <<
statData.getPeopleOlderThan(
statData.limitAgeChildren) << std::endl;
242 std::cout <<
" |-> retired: " <<
statData.getPeopleOlderThan(
statData.limitAgeRetirement) << std::endl;
243 std::cout <<
" |-> city children: " << nbrChild << std::endl;
244 std::cout <<
" |-> estimation: " <<
statData.getPeopleYoungerThan(
statData.limitAgeChildren) << std::endl;
285 std::list<AGHousehold>::iterator it;
293 if (it->retiredHouseholders()) {
296 shortage = !it->allocateAdultsWork();
298 std::cout <<
"===> ERROR: Not enough work positions in the city for all working people..." << std::endl;
300 statData.AdultNbr += it->getAdultNbr();
302 std::cout <<
" processed " <<
statData.AdultNbr <<
" adults\r";
309 std::list<AGAdult>::iterator itA;
315 std::cout <<
"not enough work for incoming people..." << std::endl;
321 std::list<AGHousehold>::iterator itt;
323 if (itt->getAdultNbr() == 1) {
324 if (itt->getAdults().front().isWorking()) {
328 if (itt->getAdultNbr() == 2) {
329 if (itt->getAdults().front().isWorking()) {
332 if (itt->getAdults().back().isWorking()) {
337 std::cout <<
" |-> working people: " <<
peopleIncoming.size() + workingP << std::endl;
338 std::cout <<
" |-> working people in city: " << workingP << std::endl;
339 std::cout <<
" |-> working people from outside: " <<
peopleIncoming.size() << std::endl;