tokev's picture
Add files using upload-large-folder tool
4d03ebc verified
.. _start:
Quick Start
===========
Installation
------------
If you have not installed CityFlow yet, :ref:`install` is a simple guide for installation.
Create Engine
-------------
.. code-block:: python
import cityflow
eng = cityflow.Engine(config_path, thread_num=1)
- ``config_path``: path for config file.
- ``thread_num``: number of threads.
Arguments In Config File
^^^^^^^^^^^^^^^^^^^^^^^^
- ``interval``: time of each simulation step (in seconds). An ``interval`` of 0.5 means for each simulation step, the system will move 0.5 seconds forward. For example, if a car is at location 0 with speed 10m/s, after one simulation step, it will move to location 10*0.5=5.
- ``seed``: random seed.
- ``dir``: root directory, all file path will be relative to this directory.
- ``roadnetFile``: path for roadnet file.
- ``flowFile``: path for flow file.
- ``rlTrafficLight``: whether to enable traffic light control through python API. If set to ``false``, default traffic light plan defined in ``roadnetFile`` will be used.
- ``saveReplay``: whether to save simulation for replay. If set to ``true``, ``roadnetLogFile`` and ``replayLogFile`` are required.
- ``roadnetLogFile``: path for roadnet replay file. This is a special roadnet file for replay, not the same as ``roadnetFile``.
- ``replayLogFile``: path for replay. This file contains vehicle positions and traffic light situation of each simulation step.
- ``laneChange``: whether to enable lane changing. The default value is 'false'.
For format of ``roadnetFile`` and ``flowFile``, please see :ref:`roadnet`, :ref:`flow`
.. note::
Runnable sample roadnet and flow files can be found in ``examples`` folder.
You can generate grid roadnet and flow files using `tools/generate_grid_scenario.py`
For example, you can generate a 2x3 roadnet with predefined traffic light plan and a corresponding flow file with
.. code-block:: shell
python generate_grid_scenario.py 2 3 --roadnetFile roadnet.json --flowFile flow.json --dir . --tlPlan
Sample Config File
^^^^^^^^^^^^^^^^^^^
.. note::
Runnable sample config files can be found in ``examples`` folder.
.. code-block:: json
{
"interval": 1.0,
"seed": 0,
"dir": "data/",
"roadnetFile": "roadnet/testcase_roadnet_3x3.json",
"flowFile": "flow/testcase_flow_3x3.json",
"rlTrafficLight": false,
"saveReplay": true,
"roadnetLogFile": "frontend/web/testcase_roadnet_3x3.json",
"replayLogFile": "frontend/web/testcase_replay_3x3.txt"
}
Simulation
----------
To simulate one step, simply call ``eng.next_step()``
.. code-block:: python
eng.next_step()
Data Access API
---------------
``get_vehicle_count()``:
- Get number of total running vehicles.
- Return an ``int``
``get_vehicles(include_waiting=False)``:
- Get all vehicle ids
- Include vehicles in lane's waiting buffer if ``include_waiting=True``
- Return an ``list`` of vehicle ids
``get_lane_vehicle_count()``:
- Get number of running vehicles on each lane.
- Return a ``dict`` with lane id as key and corresponding number as value.
``get_lane_waiting_vehicle_count()``:
- Get number of waiting vehicles on each lane. Currently, vehicles with speed less than 0.1m/s is considered as waiting.
- Return a ``dict`` with lane id as key and corresponding number as value.
``get_lane_vehicles()``:
- Get vehicle ids on each lane.
- Return a ``dict`` with lane id as key and list of vehicle id as value.
``get_vehicle_info(vehicle_id)``:
- Return a ``dict`` which contains information of the given vehicle.
- The items include:
+ ``running``: whether the vehicle is running.
+ If the vehicle is running:
* ``speed``: The speed of the vehicle.
* ``distance``: The distance the vehicle has travelled on the current lane or lanelink.
* ``drivable``: The id of the current drivable(lane or lanelink)
* ``road``: The id of the current road if the vehicle is running on a lane.
* ``intersection``: The next intersection if the vehicle is running on a lane.
* ``route``: A string contains ids of following roads in the vehicle's route which are separated by ``' '``.
- Note that all items are stored as ``str``.
``get_vehicle_speed()``:
- Get speed of each vehicle
- Return a ``dict`` with vehicle id as key and corresponding speed as value.
``get_vehicle_distance()``:
- Get distance travelled on current lane of each vehicle.
- Return a ``dict`` with vehicle id as key and corresponding distance as value.
``get_leader(vehicle_id)``
- Return the id of the vehicle in front of ``vehicle_id``.
- Return an empty string ``""`` when ``vehicle_id`` does not have a leader
``get_current_time()``:
- Get simulation time (in seconds)
- Return a ``double``
``get_average_travel_time()``:
- Get average travel time (in seconds)
- Return a ``double``
Control API
-----------
``set_tl_phase(intersection_id, phase_id)``:
- Set the phase of traffic light of ``intersection_id`` to ``phase_id``. Only works when ``rlTrafficLight`` is set to ``true``.
- The ``intersection_id`` should be defined in ``roadnetFile``
- ``phase_id`` is the index of phase in array ``"lightphases"``, defined in ``roadnetFile``.
``set_vehicle_speed(vehicle_id, speed)``:
- Set the speed of ``vehicle_id`` to ``speed``.
- The vehicles have to obey fundamental rules to avoid collisions so the real speed might be different from ``speed``.
``reset(seed=False)``:
- Reset the simulation (clear all vehicles and set simulation time back to zero)
- Reset random seed if ``seed`` is set to ``True``
- This does not clear old replays, instead, it appends new replays to ``replayLogFile``.
``snapshot()``:
- Take a snapshot of current simulation state
- This will generate an ``Archive`` object which can be loaded later
- You can save an ``Archive`` object to a file using its ``dump`` method.
``load(archive)``:
- Load an ``Archive`` object and restore simulation state
``load_from_file(path)``
- Load a snapshot file created by ``dump`` method and restore simulation state.
- The whole process of saving and loading file is like:
.. code-block:: python
archive = eng.snapshot() # create an archive object
archive.dump("save.json") # if you want to save the snapshot to a file
# do something
eng.load(archive)
# load 'archive' and the simulation will start from the status when 'archive'is created
# or if you want to load from 'save.json'
eng.load_from_file("save.json")
``set_random_seed(seed)``:
- Set seed of random generator to ``seed``
.. _set-replay-file:
``set_vehicle_route(vehicle_id, route)``:
- To change the route of a vehicle during its travelling.
- `route` is a list of road ids (doesn't include the current road)
- Return true if the route is available and can be connected.
Other API
---------
``set_replay_file(replay_file)``:
- ``replay_file`` should be a path related to ``dir`` in config file
- Set ``replayLogFile`` to ``replay_file``, newly generated replays will be output into ``replay_file``
- This is useful when you want to look at a specific episode for debugging purposes
- This API works only when ``saveReplay`` is ``true`` in config json
``set_save_replay(open)``:
- Open or close replay saving
- Set ``open`` to False to stop replay saving
- Set ``open`` to True to start replay saving
- This API works only when ``saveReplay`` is ``true`` in config json