LCOV - code coverage report
Current view: top level - src/activitygen/city - AGDataAndStatistics.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 1 1 100.0 %
Date: 2024-05-05 15:31:14 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4             : // activitygen module
       5             : // Copyright 2010 TUM (Technische Universitaet Muenchen, http://www.tum.de/)
       6             : // This program and the accompanying materials are made available under the
       7             : // terms of the Eclipse Public License 2.0 which is available at
       8             : // https://www.eclipse.org/legal/epl-2.0/
       9             : // This Source Code may also be made available under the following Secondary
      10             : // Licenses when the conditions for such availability set forth in the Eclipse
      11             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      12             : // or later which is available at
      13             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      14             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      15             : /****************************************************************************/
      16             : /// @file    AGDataAndStatistics.h
      17             : /// @author  Piotr Woznica
      18             : /// @author  Daniel Krajzewicz
      19             : /// @author  Jakob Erdmann
      20             : /// @author  Walter Bamberger
      21             : /// @date    July 2010
      22             : ///
      23             : // Contains various data, statistical values and functions from input used
      24             : // by various objects
      25             : /****************************************************************************/
      26             : #pragma once
      27             : #include <config.h>
      28             : 
      29             : #include <iostream>
      30             : #include <map>
      31             : #include "AGSchool.h"
      32             : #include "AGPosition.h"
      33             : 
      34             : 
      35             : // ===========================================================================
      36             : // class definitions
      37             : // ===========================================================================
      38             : class AGDataAndStatistics {
      39             : public:
      40             :     /**
      41             :      * parameters
      42             :      */
      43             :     double speedTimePerKm;              //number of seconds for one km
      44             :     double carPreference;              //prob. to choose the car (compared to the bus)
      45             : 
      46             :     /**
      47             :      * from General element from XML file.
      48             :      */
      49             :     int inhabitants;
      50             :     int households;
      51             :     int limitAgeChildren;
      52             :     int limitAgeRetirement;
      53             :     int limitEndAge;
      54             :     double carRate;
      55             :     double unemployement;
      56             :     double laborDemand;
      57             :     double maxFootDistance;
      58             :     int incomingTraffic;
      59             :     int outgoingTraffic;
      60             :     double freeTimeActivityRate;
      61             :     double uniformRandomTrafficRate;
      62             :     double departureVariation;
      63             : 
      64             :     std::map<int, double> beginWorkHours;        //<hour, probability> (number only used in term of PROPORTION: it should be normalized)
      65             :     std::map<int, double> endWorkHours;        //<hour, probability> (number only used in term of PROPORTION: it should be normalized)
      66             :     std::map<int, AGPosition> busStations;        //<id, position>
      67             :     //std::map<SchoolType, int> schoolCapacity;
      68             :     std::map<int, double> population;            //<bracket's end age, number> (number only used in term of PROPORTION: it should be normalized)
      69             :     std::map<int, int> ageSpan; // <brachets begin age, endage>
      70             :     //std::map<int, double> childrenAccompagniment;    //<bracket's end age, probability>
      71             :     /**
      72             :      * number of incoming or outgoing people through the given city gates
      73             :      * PROPORTION: it should be normalized
      74             :      */
      75             :     std::map<int, double> incoming;
      76             :     std::map<int, double> outgoing;
      77             : 
      78             :     /**
      79             :      * computed values used during processing
      80             :      */
      81             :     int workPositions;
      82             :     double factorInhabitants;
      83             :     double factorWorkPositions;
      84             : 
      85             :     /**
      86             :      * data used for household generation
      87             :      * has to be computed before.
      88             :      */
      89             :     //probability of picking an old-people household (compared to working and have children adults)
      90             :     double oldAgeHhProb;
      91             :     //probability of having a second adult (old in case of old householders) in the household.
      92             :     double secondPersProb;
      93             :     //this s the mean number of children pro household (not old). This value is used in the Poisson-lay for determining the number of children in each family
      94             :     double meanNbrChildren;
      95             : 
      96             :     /**
      97             :      * numbers not needed but interesting for statistics and TESTING
      98             :      */
      99             :     //int childrenNbr;
     100             :     //int oldPeopleNbr;
     101             :     int AdultNbr;
     102             :     int householdsNbr;
     103             :     //households far from public transports
     104             :     int hhFarFromPT;
     105             : 
     106             :     static AGDataAndStatistics& getDataAndStatistics();
     107             : 
     108             :     /**
     109             :      * function returning a random number between the two given numbers: [n;m[ (m cannot occur)
     110             :      * it returns 0 if m < n
     111             :      */
     112             :     int getRandom(int n, int m);
     113             :     /**
     114             :      * function returning a random age between the two numbers satisfying the previous constrains
     115             :      * this number is in relation to the distribution of the population through the brackets (population's list)
     116             :      * if the given numbers are both greater than limitEndAge, it returns 0
     117             :      * if m is greater than limitEndAge, m=limitEndAge
     118             :      * returns -1 if conditions are not satisfied
     119             :      */
     120             :     int getRandomPopDistributed(int n, int m);
     121             :     /**
     122             :      * function evaluating the POISSON's lay (probability lay)
     123             :      * it returns the number of children with a probability of POISSON in a household
     124             :      * is given the mean of the distribution
     125             :      *
     126             :      * TODO Consider reimplementation
     127             :      */
     128             :     int getPoissonsNumberOfChildren(double mean);
     129             :     /**
     130             :      * these functions return the number of people having more (or less) than the given age
     131             :      * (inclusive for getPeopleOlderThan; exclusive for getPeopleYoungerThan)
     132             :      * getPeopleOlderThan(n) + getPeopleYoungerThan(n) = inhabitants
     133             :      * these first two function are based on the third one.
     134             :      */
     135             :     int getPeopleOlderThan(int age);
     136             :     int getPeopleYoungerThan(int age);
     137             :     double getPropYoungerThan(int age);
     138             :     /**
     139             :      * function consolidating statistics:
     140             :      * normalizes the maps with probabilities
     141             :      * completes data which have to be computed before use
     142             :      */
     143             :     void consolidateStat();
     144             :     /**
     145             :      * function returning a random value corresponding to this distribution:
     146             :      * -mean is given
     147             :      * -max variation of the mean (|possible value - mean| <= maxVar
     148             :      * -the mean is the most probable
     149             :      * -the probability distribution function is a "scaled exponential" distribution
     150             :      * from mean-maxVar to mean and from mean to mean+maxVar
     151             :      */
     152             :     double getInverseExpRandomValue(double mean, double maxVar);
     153             :     /**
     154             :      * function returning a random city gate corresponding to
     155             :      * the distribution of the incoming/outgoing traffic
     156             :      * In fact, it returns the position of a city gate in the citygate vector.
     157             :      */
     158             :     int getRandomCityGateByIncoming();
     159             :     int getRandomCityGateByOutgoing();
     160             : 
     161             : private:
     162          10 :     AGDataAndStatistics() {}
     163             : 
     164             :     /**
     165             :      * returns the POISSON's probability (exp(-m)*m^k/k!)
     166             :      * @arg: mean of the distribution
     167             :      * @arg: number of occurrences
     168             :      *
     169             :      * TODO Create a Poisson distribution class for this. Or is it in Boost?
     170             :      */
     171             :     double poisson(double mean, int occ);
     172             :     /**
     173             :      * recursive mathematical function returning the factorial of n: n!
     174             :      */
     175             :     int factorial(int n);
     176             : 
     177             :     //function normalizing the map's probabilities: Sum(floats) = 1
     178             :     void normalizeMapProb(std::map<int, double>* myMap);
     179             : };

Generated by: LCOV version 1.14