You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Following the example config-with-all-vehicles-from-file.xml in https://github.com/matsim-org/matsim-code-examples/tree/12.x/scenarios/equil-mixedTraffic, I was trying to figure out how to create a vehicle fleet for the simulation. Yet, I ran into an exception when running the model using this configuration file (see below for the exception below). It seems that coding is needed to reach what I want to do. Is there a way to do this by adding another input xml file? Did anyone know how I should address this issue? Also, I am wondering why we need to assign a vehicle for each mode for each person? What if some people that do not have cars?
Exception in thread "main" java.lang.RuntimeException: Could not retrieve vehicle id from person: 1 for mode: car.
If you are not using config.qsim().getVehicleSource() with 'defaultVehicle' or 'modeVehicleTypesFromVehiclesData' you have to provide a vehicle for each mode for each person. Attach a map of mode:String -> id:Id with key 'vehicles' as person attribute to each person.
VehicleUtils.insertVehicleIdIntoAttributes does this for you.
at org.matsim.vehicles.VehicleUtils.getVehicleId(VehicleUtils.java:143)
at org.matsim.core.mobsim.qsim.agents.PopulationAgentSource.insertVehicles(PopulationAgentSource.java:95)
at org.matsim.core.mobsim.qsim.agents.PopulationAgentSource.insertAgentsIntoMobsim(PopulationAgentSource.java:72)
at org.matsim.core.mobsim.qsim.QSim.createAgents(QSim.java:306)
at org.matsim.core.mobsim.qsim.QSim.prepareSim(QSim.java:291)
at org.matsim.core.mobsim.qsim.QSim.run(QSim.java:250)
at org.matsim.core.controler.NewControler.runMobSim(NewControler.java:124)
at org.matsim.core.controler.AbstractController$8.run(AbstractController.java:198)
at org.matsim.core.controler.AbstractController.iterationStep(AbstractController.java:230)
at org.matsim.core.controler.AbstractController.mobsim(AbstractController.java:194)
at org.matsim.core.controler.AbstractController.iteration(AbstractController.java:145)
at org.matsim.core.controler.AbstractController.doIterations(AbstractController.java:113)
at org.matsim.core.controler.AbstractController$1.run(AbstractController.java:80)
at org.matsim.core.controler.MatsimRuntimeModifications.run(MatsimRuntimeModifications.java:69)
at org.matsim.core.controler.MatsimRuntimeModifications.run(MatsimRuntimeModifications.java:52)
at org.matsim.core.controler.AbstractController.run(AbstractController.java:88)
at org.matsim.core.controler.NewControler.run(NewControler.java:82)
at org.matsim.core.controler.Controler.run(Controler.java:249)
at org.matsim.run.Controler.run(Controler.java:54)
at org.matsim.run.Controler.main(Controler.java:58)
The text was updated successfully, but these errors were encountered:
If you want to use vehicles from a vehicles file you actually have to assign those vehicles to agents. This can only be done in code.
// iterate over all persons
for (Person person : scenario.getPopulation().getPersons().values()) {
// retreive vehicleIds which were previously read in from vehicles.xml. -- insert your own logic here
var carFromFile= scenario.getVehicles().getVehicleTypes().get(Id.create("some-car-id", VehicleType.class));
var bikeFromFile= scenario.getVehicles().getVehicleTypes().get(Id.create("some-bike-id", VehicleType.class));
// link vehicles to different modes
var modeToVehicle = Map.of("car", carFromFile, "bike", bikeFromFile);
// assign vehicles to agent
VehicleUtils.insertVehicleIdsIntoAttributes(person, modeToVehicle);
}
If you simply define whicle types for certain modes, the start up logic will assign a vehicle to each agent for each mode.
Persons only need vehicles for modes they are allowed to choose. So, if you have agents who can't drive a car, you don't have to assign one. Though I do know that this is possible I have never used this feature and therefore don't know how to achieve this.
Hi all,
Following the example config-with-all-vehicles-from-file.xml in https://github.com/matsim-org/matsim-code-examples/tree/12.x/scenarios/equil-mixedTraffic, I was trying to figure out how to create a vehicle fleet for the simulation. Yet, I ran into an exception when running the model using this configuration file (see below for the exception below). It seems that coding is needed to reach what I want to do. Is there a way to do this by adding another input xml file? Did anyone know how I should address this issue? Also, I am wondering why we need to assign a vehicle for each mode for each person? What if some people that do not have cars?
Exception in thread "main" java.lang.RuntimeException: Could not retrieve vehicle id from person: 1 for mode: car.
If you are not using config.qsim().getVehicleSource() with 'defaultVehicle' or 'modeVehicleTypesFromVehiclesData' you have to provide a vehicle for each mode for each person. Attach a map of mode:String -> id:Id with key 'vehicles' as person attribute to each person.
VehicleUtils.insertVehicleIdIntoAttributes does this for you.
at org.matsim.vehicles.VehicleUtils.getVehicleId(VehicleUtils.java:143)
at org.matsim.core.mobsim.qsim.agents.PopulationAgentSource.insertVehicles(PopulationAgentSource.java:95)
at org.matsim.core.mobsim.qsim.agents.PopulationAgentSource.insertAgentsIntoMobsim(PopulationAgentSource.java:72)
at org.matsim.core.mobsim.qsim.QSim.createAgents(QSim.java:306)
at org.matsim.core.mobsim.qsim.QSim.prepareSim(QSim.java:291)
at org.matsim.core.mobsim.qsim.QSim.run(QSim.java:250)
at org.matsim.core.controler.NewControler.runMobSim(NewControler.java:124)
at org.matsim.core.controler.AbstractController$8.run(AbstractController.java:198)
at org.matsim.core.controler.AbstractController.iterationStep(AbstractController.java:230)
at org.matsim.core.controler.AbstractController.mobsim(AbstractController.java:194)
at org.matsim.core.controler.AbstractController.iteration(AbstractController.java:145)
at org.matsim.core.controler.AbstractController.doIterations(AbstractController.java:113)
at org.matsim.core.controler.AbstractController$1.run(AbstractController.java:80)
at org.matsim.core.controler.MatsimRuntimeModifications.run(MatsimRuntimeModifications.java:69)
at org.matsim.core.controler.MatsimRuntimeModifications.run(MatsimRuntimeModifications.java:52)
at org.matsim.core.controler.AbstractController.run(AbstractController.java:88)
at org.matsim.core.controler.NewControler.run(NewControler.java:82)
at org.matsim.core.controler.Controler.run(Controler.java:249)
at org.matsim.run.Controler.run(Controler.java:54)
at org.matsim.run.Controler.main(Controler.java:58)
The text was updated successfully, but these errors were encountered: