1
0
mirror of https://github.com/Ahp06/SUMO_Emissions.git synced 2024-11-22 03:26:30 +00:00

Added JSON config file reader

This commit is contained in:
Ahp06 2018-12-09 19:49:37 +01:00
parent 289c09b253
commit 27d48f24d6
2 changed files with 99 additions and 77 deletions

View File

@ -6,113 +6,134 @@ import datetime
import logging import logging
import os import os
import sys import sys
import json
class config:
def __init__(self, config_file = None):
if not (config_file is None):
with open(config_file) as f:
data = json.load(f)
self._SUMOCMD = data["_SUMOCMD"]
self._SUMOCFG = data["_SUMOCFG"]
self.areas_number = data["areas_number"]
self.emissions_threshold = data["emissions_threshold"]
self.n_steps = data["n_steps"]
self.without_actions_mode = data["without_actions_mode"]
self.limit_speed_mode = data["limit_speed_mode"]
self.speed_rf = data["speed_rf"]
self.adjust_traffic_light_mode = data["adjust_traffic_light_mode"]
self.trafficLights_duration_rf = data["trafficLights_duration_rf"]
self.weight_routing_mode = data["weight_routing_mode"]
self.lock_area_mode = data["lock_area_mode"]
############################################################################### ###############################################################################
############################# SIMULATION FILE ################################# ############################# SIMULATION FILE #################################
############################################################################### ###############################################################################
if 'SUMO_HOME' in os.environ:
tools = os.path.join(os.environ['SUMO_HOME'], 'tools')
sys.path.append(tools)
else:
sys.exit("please declare environment variable 'SUMO_HOME'")
_SUMOCMD = 'sumo' # use 'sumo-gui' cmd for UI if 'SUMO_HOME' in os.environ:
_SUMOCFG = "mulhouse_simulation/osm.sumocfg" tools = os.path.join(os.environ['SUMO_HOME'], 'tools')
sumo_binary = os.path.join(os.environ['SUMO_HOME'], 'bin', _SUMOCMD) sys.path.append(tools)
sumo_cmd = [sumo_binary, "-c", _SUMOCFG] else:
sys.exit("please declare environment variable 'SUMO_HOME'")
_SUMOCMD = 'sumo' # use 'sumo-gui' cmd for UI
_SUMOCFG = "mulhouse_simulation/osm.sumocfg"
sumo_binary = os.path.join(os.environ['SUMO_HOME'], 'bin', _SUMOCMD)
sumo_cmd = [sumo_binary, "-c", _SUMOCFG]
############################################################################### ###############################################################################
################################## LOGS ####################################### ################################## LOGS #######################################
############################################################################### ###############################################################################
now = datetime.datetime.now() now = datetime.datetime.now()
current_date = now.strftime("%Y_%m_%d_%H_%M_%S") current_date = now.strftime("%Y_%m_%d_%H_%M_%S")
log_filename = f'logs/sumo_logs_{current_date}.log' log_filename = f'logs/sumo_logs_{current_date}.log'
# create logger # create logger
logger = logging.getLogger("sumo_logger") logger = logging.getLogger("sumo_logger")
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)
# create handler and set level to info # create handler and set level to info
handler = logging.FileHandler(log_filename) handler = logging.FileHandler(log_filename)
# create formatter # create formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# add formatter to handler # add formatter to handler
handler.setFormatter(formatter) handler.setFormatter(formatter)
# add handler to logger # add handler to logger
logger.addHandler(handler) logger.addHandler(handler)
############################################################################### ###############################################################################
########################## SIMULATION CONFIGURATION ########################### ########################## SIMULATION CONFIGURATION ###########################
############################################################################### ###############################################################################
areas_number = 10 # Simulation boundary will be divided into areas_number x areas_number areas areas_number = 10 # Simulation boundary will be divided into areas_number x areas_number areas
emissions_threshold = 500000 emissions_threshold = 500000
n_steps = 200 n_steps = 200
window_size = 100 window_size = 200
############################################################################### ###############################################################################
########################## ACTIONS CONFIGURATION ############################## ########################## ACTIONS CONFIGURATION ##############################
############################################################################### ###############################################################################
#Set this mode to True if you want running a basic simulation without actions #Set this mode to True if you want running a basic simulation without actions
without_actions_mode = False without_actions_mode = False
#Limit the speed into areas when the threshold is exceeded #Limit the speed into areas when the threshold is exceeded
speed_rf = 0.1 speed_rf = 0.1
limit_speed_mode = True limit_speed_mode = True
#Decrease all traffic lights duration into the area when the threshold is exceeded #Decrease all traffic lights duration into the area when the threshold is exceeded
trafficLights_duration_rf = 0.2 trafficLights_duration_rf = 0.2
adjust_traffic_light_mode = True adjust_traffic_light_mode = True
#Vehicles are routed according to the less polluted route (HEAVY) #Vehicles are routed according to the less polluted route (HEAVY)
weight_routing_mode = False
#Lock the area when the threshold is exceeded (NOT FIXED)
lock_area_mode = False
#Weight routing mode cannot be combinated with other actions
if weight_routing_mode:
limit_speed_mode = False
adjust_traffic_light_mode = False
lock_area_mode = False
#If without_actions_mode is choosen
if without_actions_mode:
limit_speed_mode = False
adjust_traffic_light_mode = False
weight_routing_mode = False weight_routing_mode = False
#Lock the area when the threshold is exceeded (NOT FIXED)
lock_area_mode = False lock_area_mode = False
#Weight routing mode cannot be combinated with other actions
if weight_routing_mode:
limit_speed_mode = False
adjust_traffic_light_mode = False
lock_area_mode = False
#If without_actions_mode is choosen
if without_actions_mode:
limit_speed_mode = False
adjust_traffic_light_mode = False
weight_routing_mode = False
lock_area_mode = False
############################################################################### ###############################################################################
########################## SIMULATION REFERENCES ############################## ########################## SIMULATION REFERENCES ##############################
############################################################################### ###############################################################################
# Total of emissions of all pollutants in mg for n steps of simulation without locking areas # Total of emissions of all pollutants in mg for n steps of simulation without locking areas
# These constants are simulation dependant, you must change them according to your simulation # These constants are simulation dependant, you must change them according to your simulation
total_emissions100 = 13615949.148296086 total_emissions100 = 13615949.148296086
total_emissions200 = 43970763.15084738 total_emissions200 = 43970763.15084738
total_emissions300 = 87382632.0821697 total_emissions300 = 87382632.0821697
############################################################################### ###############################################################################
########################## CONFIGURATION METHODS ############################## ########################## CONFIGURATION METHODS ##############################
############################################################################### ###############################################################################
def get_basics_emissions(): def get_basics_emissions(self):
if n_steps == 100: if self.n_steps == 100:
return total_emissions100 return self.total_emissions100
if n_steps == 200: if self.n_steps == 200:
return total_emissions200 return self.total_emissions200
if n_steps == 300: if self.n_steps == 300:
return total_emissions300 return self.total_emissions300
def show_config(): def show_config(self):
return (str(f'Grid : {areas_number}x{areas_number}\n') return (str(f'Grid : {self.areas_number}x{self.areas_number}\n')
+ str(f'step number = {n_steps}\n') + str(f'step number = {self.n_steps}\n')
+ str(f'window size = {window_size}\n') + str(f'window size = {self.window_size}\n')
+ str(f'weight routing mode = {weight_routing_mode}\n') + str(f'weight routing mode = {self.weight_routing_mode}\n')
+ str(f'lock area mode = {lock_area_mode}\n') + str(f'lock area mode = {self.lock_area_mode}\n')
+ str(f'limit speed mode = {limit_speed_mode}, RF = {speed_rf*100}%\n') + str(f'limit speed mode = {self.limit_speed_mode}, RF = {self.speed_rf*100}%\n')
+ str(f'adjust traffic light mode = {adjust_traffic_light_mode} , RF = {trafficLights_duration_rf*100}%\n')) + str(f'adjust traffic light mode = {self.adjust_traffic_light_mode} , RF = {self.trafficLights_duration_rf*100}%\n'))

View File

@ -7,11 +7,12 @@ from shapely.geometry import LineString
from parse import search from parse import search
import actions import actions
import config from config import config
import sys import sys
from model import Area, Vehicle, Lane , TrafficLight , Phase , Logic from model import Area, Vehicle, Lane , TrafficLight , Phase , Logic
from traci import trafficlight from traci import trafficlight
config = config('C:\\Users\\Admin\\Desktop\\config.json')
logger = config.logger logger = config.logger
def init_grid(simulation_bounds, areas_number): def init_grid(simulation_bounds, areas_number):