Hi there,

I am trying to randomly place a finite (and specific) set of vehicles in
certain parts of a map network in SUMO using Flow along with the Traci
simulator but... without using Flow's inflows() objects.
When running the flow.envs.base.reset()  to reset the sim with a new
randomized configuration, one of the vehicles added is missing.

Let network_object = flow.networks.Network(....) derived from Flow. I can
confirm it has the correct ID list and initial state configuration (ID,
lane_ID, position, velocity) in its fields. When calling Flow reset(),
running self.k.kernel_api.vehicle.getIDList() confirms there are missing
vehicles relative to network_object.vehicles.ids. After detecting this
discrepancy, Flow errors out.

The error message form is:

  File "~/flow_env_with_status.py", line N, in reset
    return super().reset()
  File "/tmp/ucrl/flow/envs/base.py", line M, in reset
    raise FatalFlowError(msg=msg)
flow.utils.exceptions.FatalFlowError:
Not enough vehicles have spawned! Bad start?
Missing vehicles / initial state:
- vehicle_X : ('vehicle_type_X', 'custom_road_name', lane_id, position,
velocity)
A hack that seems to help is adding the following code inside of the
missing vehicles check before returning the observation vector to the
simulation environment:

  # check to make sure all vehicles have been spawned
  if len(network_object.initial_ids) >
len(self.k.kernel_api.vehicle.getIDList()):
      missing_vehicles = list(set(self.initial_ids) - set(initial_ids))
      for mv in missing_vehicles:
          self.k.kernel_api.vehicle.remove(mv)  # FIXME: hack
          type_id, edge, lane_index, pos, speed = self.initial_state[mv]
          self.k.vehicle.add(
              veh_id=mv,
              type_id=type_id,
              edge=edge,
              lane=lane_index,
              pos=pos,
              speed=speed)
          self.k.simulation.simulation_step()
          # update the information in each kernel to match the current state
          self.k.update(reset=True)

I am not sure why the missing vehicle was not added before reaching this
part of the code. Is this a problem that others have seen before? Any
suggested fixes if we do not want to use Inflows()?

Thanks as always for your time and your help!

Stefano
_______________________________________________
sumo-user mailing list
[email protected]
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/sumo-user

Reply via email to