Path: blob/main/src/activitygen/activities/AGActivity.cpp
169678 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// activitygen module4// Copyright 2010 TUM (Technische Universitaet Muenchen, http://www.tum.de/)5// This program and the accompanying materials are made available under the6// terms of the Eclipse Public License 2.0 which is available at7// https://www.eclipse.org/legal/epl-2.0/8// This Source Code may also be made available under the following Secondary9// Licenses when the conditions for such availability set forth in the Eclipse10// Public License 2.0 are satisfied: GNU General Public License, version 211// or later which is available at12// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html13// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later14/****************************************************************************/15/// @file AGActivity.cpp16/// @author Piotr Woznica17/// @author Daniel Krajzewicz18/// @author Walter Bamberger19/// @date July 201020///21// Parent object for all activities. Derived classes generate trips for each22// household.23/****************************************************************************/24#include <config.h>2526#include <utils/common/RandHelper.h>27#include <activitygen/city/AGHousehold.h>28#include <activitygen/city/AGTime.h>29#include "AGActivity.h"303132// ===========================================================================33// method definitions34// ===========================================================================35bool36AGActivity::isGenerated() {37return genDone;38}394041bool42AGActivity::generateTrips() {43return true;44}4546int47AGActivity::possibleTranspMean(AGPosition destination) {48int FOOT = 1;49int BUS = 2;50int CAR = 4;5152int transp = 0;5354if (destination.distanceTo(myHousehold->getPosition()) <= myStatData->maxFootDistance) {55transp = FOOT;56if (myHousehold->getCarNbr() != 0) {57transp += CAR;58}59if (destination.minDistanceTo(myStatData->busStations) <= myStatData->maxFootDistance60&& myHousehold->getPosition().minDistanceTo(myStatData->busStations) <= myStatData->maxFootDistance) {61transp += BUS;62}63} else if (myHousehold->getCarNbr() == 0) {64double d1 = destination.distanceTo(myHousehold->getPosition());65double d2 = destination.minDistanceTo(myStatData->busStations) + myHousehold->getPosition().minDistanceTo(myStatData->busStations);6667if (d1 > d2) {68transp = BUS;69} else {70transp = FOOT;71}72} else if (myHousehold->getCarNbr() != 0) { //all other cases73if (destination.minDistanceTo(myStatData->busStations) > myStatData->maxFootDistance74|| myHousehold->getPosition().minDistanceTo(myStatData->busStations) > myStatData->maxFootDistance) {75transp = CAR;76} else {77transp = CAR + BUS;78}79}80return transp;81}8283int84AGActivity::availableTranspMeans(AGPosition from, AGPosition to) {85int FOOT = 1;86int BUS = 2;8788int available = 0;8990if (from.distanceTo(to) <= myStatData->maxFootDistance) {91available += FOOT;92}93if (from.minDistanceTo(myStatData->busStations) <= myStatData->maxFootDistance94&& to.minDistanceTo(myStatData->busStations) <= myStatData->maxFootDistance) {95available += BUS;96}97return available;98}99100101int102AGActivity::timeToDrive(AGPosition from, AGPosition to) {103double dist = from.distanceTo(to);104return (int)(timePerKm * dist / 1000.0);105}106107108int109AGActivity::depHour(AGPosition from, AGPosition to, int arrival) {110// ?? departure.addDays(1); // in case of negative time: arrival < timeToDrive111//departure.setDay(0); // days are set to 0 because we want the time in the current day112return (arrival - timeToDrive(from, to));113}114115116int117AGActivity::arrHour(AGPosition from, AGPosition to, int departure) {118return (departure + timeToDrive(from, to));119}120121122int123AGActivity::randomTimeBetween(int begin, int end) {124if (0 > begin || begin > end) {125return -1;126}127if (begin == end) {128return begin;129}130int tAlea = RandHelper::rand(end - begin);131return (begin + tAlea);132}133134135std::list<AGTrip>&136AGActivity::getPartialActivityTrips() {137return myPartialActivityTrips;138}139140141/****************************************************************************/142143144