Umstieg auf Python 3
Mai 2021: Python 2 wurde im Januar 2020 eingestellt. Tessa Hayman gibt Ihnen einige Tipps, wie Sie Ihr Skript für eine optimale Leistung in Aimsun Next Python-3-fähig machen.
In bestimmten Situationen bestehen für jeden Fahrzeugtyp unterschiedliche Geschwindigkeitsbegrenzungen. Auf einbahnigen Landstraßen in Großbritannien beispielsweise beträgt die zulässige Höchstgeschwindigkeit für Fahrzeuge über 7,5 Tonnen 50 mph bzw. 80 km/h, für alle anderen Fahrzeuge jedoch 60 mph bzw. 100 km/h. In Aimsun Next können Sie dies für mikro- und mesoskopische Modelle mithilfe von Verkehrsmanagementmaßnahmen oder für makroskopische Modelle innerhalb der CR-Funktionen kodieren.
Bei mikroskopischen und mesoskopischen Modellen wird die Geschwindigkeitsbegrenzung für eine Straße durch den Parameter „Speed Limit“ festgelegt. Die Geschwindigkeitsbegrenzung für eine Fahrzeugklasse kann mithilfe einer Verkehrsmanagementmaßnahme namens „Speed Reduction“ reduziert werden, die Sie auch zur Reduzierung der Abbiegegeschwindigkeiten für größere Fahrzeuge einsetzen können.
Schritt 1: Fügen Sie über das Projektmenü > »Traffic Management« > »New« > »Traffic Condition« eine neue Verkehrssituation hinzu.
Schritt 2: Rufen Sie mit einem Doppelklick auf die Verkehrssituation den entsprechenden Editor auf. Wählen Sie unter »Activation Condition« die Aktivierungsbedingung »Always« aus, und aktivieren Sie die Checkbox »Apply to Warm up«.
Schritt 3: Fügen Sie jetzt eine Geschwindigkeitsreduzierung hinzu, indem Sie mit der rechten Maustaste auf »Traffic Condition« > »New« > »Speed Reduction« klicken.
Schritt 4: Wählen Sie die entsprechenden Geschwindigkeitsreduzierungsparameter aus:
Im entsprechenden Menü können Sie festlegen, auf welche Strecke bzw. welchen Abbieger die Geschwindigkeitsreduzierung angewendet werden soll, die neue Höchstgeschwindigkeit eingeben und die Anwendung auf eine bestimmte Fahrzeugklasse beschränken. Im obigen Beispiel wurde die Fahrzeugklasse „Heavy Class“ (Lkw) ausgewählt, die alle Fahrzeugtypen mit Fahrzeugen über 7,5 t umfasst.
Die oben beschriebenen Einstellungen gelten jeweils immer nur für eine Strecke bzw. einen Abbieger; bei einem Modell mit zahlreichen Straßen, auf denen unterschiedliche Geschwindigkeitsbegrenzungen für Lkw gelten, wäre dies ein äußerst mühsames Unterfangen. Sie können Geschwindigkeitsänderungen jedoch auch auf eine Gruppierung von Strecken bzw. Abbiegern oder einen bestimmten Straßentyp anwenden.
In einigen Fällen möchten Sie möglicherweise eine Geschwindigkeitsreduzierung auf eine Teilmenge von Strecken eines bestimmten Straßentyps wie z. B. einbahnige Straßen mit einer Geschwindigkeitsbegrenzung von 60 mph anwenden, ohne hierfür einen eigenen Straßentyp anzulegen.
Um eine Geschwindigkeitsreduzierung auf einen bestimmten Straßentyp anzuwenden und gleichzeitig die Anzahl der Fahrstreifen auf der Strecke zu überprüfen, können Sie das folgende Skript verwenden. Hierfür müssen Sie die entsprechende Verkehrssituation, die neue Geschwindigkeit, die Fahrzeugklasse und den Straßentyp sowie die Fahrstreifenanzahl angeben, auf die die neue Geschwindigkeit angewendet werden soll. Das Skript wird anschließend über alle im Modell vorhandenen Strecken des angegebenen Straßentyps iteriert und fügt jeder Strecke eine Geschwindigkeitsreduzierung hinzu.
Der Pseudocode hierfür lautet:
Get/Create Traffic Condition
Get vehicle class
Für alle Strecken:
Wenn section.roadtype==roadtype und section.numberoflanes:
Geschwindigkeitsreduzierungsmaßnahme erstellen
Geschwindigkeitsreduzierung der Verkehrssituation hinzufügen
'''This script applies a speed reduction for all sections in a road type. The User must specify the road type and the new speed'''
TrafficConditionName="Speed Reduction"
RoadTypeName="SingleCarriageway60" #96kph
VehicleClassName="Heavy Class"
NewSpeed=80 #50mph
NumberofLanes=1
def createSpeedReduction(section,Speed, VehicleClassname): #Add a speed reduction action
change = GKSystem.getSystem().newObject("GKSpeedChange", model)
change.setSection(section)
change.setSpeed(str(Speed)) #set the new speed
VehicleClassType=model.getType("GKVehicleClass")
VehicleClass=model.getCatalog().findByName(VehicleClassname,VehicleClassType)
change.setVehicleClass(VehicleClass) #add a filter for the vehicle class
return change
def NewTrafficCondition():#add a new TrafficConditionName
cmd = model.createNewCmd( model.getType( "GKTrafficCondition" ))
model.getCommander().addCommand( cmd )
res = cmd.createdObject()
res.setActivationType(GKSimulationEvent.eAlways) #set it to be active throughout the modelled period
applyToWarmUpAtt = model.getColumn("GKPolicy::applyOnWarmupAtt") #set it to be active in the warm up
res.setDataValue(applyToWarmUpAtt, QVariant(True))
return res
def GetVehicleClass( model, name): # get the vehicle class object
vehicleClassType=model.getType("GKVehicleClass")
vehicleClass = model.getCatalog().findByName(name, vehicleClassType)
if vehicleClass == None:
print ("No Vehicle Class Found")
return None
return vehicleClass
condition=model.getCatalog().findByName(TrafficConditionName, model.getType("GKTrafficCondition"))
if condition==None: #find condition or add new one
condition=NewTrafficCondition()
condition.setName(TrafficConditionName)
sections=model.getCatalog().getObjectsByType(model.getType("GKSection"))
for section in sections: #for all sections in road type, if the section has x lanes, make a new speed change in the given Traffic Condition
section=sections[section]
nooflanes=section.getNbFullLanes() #get the number of full lanes for this section
if section.getRoadType().getName()==RoadTypeName and nooflanes==NumberofLanes:
speedreductionaction=createSpeedReduction(section,NewSpeed,VehicleClassName)
speedreductionaction.setName("Speed reduction for section %s" %(section.getId()))
condition.addChange(speedreductionaction)
print ("new change")
print ("done")
Zuletzt müssen Sie die Verkehrssituation auf das entsprechende Szenario anwenden, unabhängig davon, ob diese über ein Skript oder manuell hinzugefügt wurde. Öffnen Sie hierzu das entsprechende Szenario, und rufen Sie die Registerkarte „Strategies and Conditions“ auf. Aktivieren Sie die neue Verkehrssituation.
Mai 2021: Python 2 wurde im Januar 2020 eingestellt. Tessa Hayman gibt Ihnen einige Tipps, wie Sie Ihr Skript für eine optimale Leistung in Aimsun Next Python-3-fähig machen.
September 2021: Bei der Verkehrsmodellierung kann ein Vergleich der Verkehrsnachfrage und des Fahrzeugdurchsatzes auf einer Route nützlich sein: wie viele Personen wollen eine Fahrt absolvieren, und wie viele davon sind in der Lage, diese Fahrt innerhalb eines vorgegebenen Zeitrahmens durchzuführen.
TEILEN
Aimsun Next 23
Aimsun Next 20.0.5
Aimsun Next 23
@manual {AimsunManual,
title = {Aimsun Next 23 User's Manual},
author = {Aimsun},
edition = {Aimsun Next 23.0.0},
address = {Barcelona, Spain},
year = {2023. [Online]},
month = {Accessed on: Month, Day, Year},
url = {https://docs.aimsun.com/next/23.0.0/},
}
Aimsun Next 20.0.5
@manual {AimsunManual,
title = {Aimsun Next 20.0.5 User's Manual},
author = {Aimsun},
edition = {Aimsun Next 20.0.5},
address = {Barcelona, Spain},
year = {2021. [In software]},
month = {Accessed on: Month, Day, Year},
url = {qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/Intro.html},
}
Aimsun Next 23
TY - COMP
T1 - Aimsun Next 23 User's Manual
A1 - Aimsun
ET - Aimsun Next Version 23.0.0
Y1 - 2023
Y2 - Accessed on: Month, Day, Year
CY - Barcelona, Spain
PB - Aimsun
UR - [In software]. Verfügbar: https://docs.aimsun.com/next/23.0.0/
Aimsun Next 20.0.5
TY - COMP
T1 - Aimsun Next 20.0.5 User's Manual
A1 - Aimsun
ET - Aimsun Next Version 20.0.5
Y1 - 2021
Y2 - Accessed on: Month, Day, Year
CY - Barcelona, Spanien
PB - Aimsun
UR - [In software]. Available: qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/Intro.html