Skip to main content

2D traffic modeling.

Project description

Autopysta

Autopysta is a Python library for simulating 2D traffic flow on highways. It is written in C++ for high performance and wrapped using SWIG for Python compatibility. The library allows users to create realistic highway traffic scenarios with customizable vehicle behaviors, lane-changing logic, and road configurations.

Platform Support

Autopysta supports Windows, Linux, and macOS. However, the specific Python versions supported on each platform are still under testing and validation. Currently:

  • Windows: Tentatively supports Python 3.8, pending further compatibility testing.
  • Linux and macOS: Compatible with Python 3.8 and later, though compatibility with other versions is being evaluated.

Key Features

  1. Flexible Vehicle Behavior
    Autopysta provides a variety of vehicle models that dictate acceleration, deceleration, and lane-changing dynamics. Examples include:

    • Intelligent Driver Model (IDM)
    • Gipps Model
    • Newell Random Acceleration Model
  2. Vehicle Creation Options
    Users can choose different vehicle creation strategies for each lane, defining how vehicles are added to the simulation.

  3. Customizable Highway Geometry
    Configure highways with parameters such as road length, number of lanes, and merge/diverge points for ramps.


Installing Autopysta from PyPI

If you don’t want to compile from source, you can install Autopysta directly from PyPI (precompiled binaries are available for supported platforms):

pip install autopysta

This will install the latest version of Autopysta and its dependencies, allowing you to skip the manual build process.


Compiling Autopysta from Source

To compile Autopysta from source, you will need to build the C++ components, generate the Python wrappers, and copy the necessary binaries to the appropriate directories.

Prerequisites

Before building from source, ensure you have the following installed:

  • Python (version 3.8 on Windows, 3.8 or higher on Linux/macOS)
  • CMake (for building the C++ components)
  • setuptools and wheel (pip install setuptools wheel)
  • SWIG (for generating Python wrappers)

Steps to Compile Autopysta

  1. Clone the Repository
    Run the following commands to clone the repository and navigate to its directory:

    git clone https://bitbucket.org/rdelpiano/autopysta.git
    cd autopysta
    
  2. Build the Extension
    Use the following command to build the C++ extension:

    python setup.py build_ext
    

    This will:

    1. Use CMake to compile the C++ code.
    2. Generate the autopysta.py wrapper and the platform-specific _autopysta.* shared library.
    3. Copy the generated binaries to:
      1. The root autopysta directory.
      2. The examples/autopysta directory.
  3. Verify the Build
    After building, check the autopysta directory (both in the root and inside examples/) for:

    1. autopysta.py: Python wrapper.
    2. _autopysta.*: Shared library file specific to your platform (e.g., _autopysta.so on Linux/macOS or _autopysta.pyd on Windows).

Running an Example

Once the build is complete, you can run any example provided in the examples directory.

Example: Running the Different Vehicle Creators Example

Navigate to the examples/ directory:

cd examples

Run the different_creators.py (or any other example script):

python different_creators.py

This script simulates traffic with different vehicle creation strategies, as shown in the "Quick Start Example" below.


Quick Start Example: Using Autopysta to Simulate Different Vehicle Creators

Autopysta offers various ways to populate lanes with vehicles, each governed by different driving models and behaviors. Here’s an example of setting up a simulation with different vehicle creators to model distinct traffic conditions.

# ------------------------------------------------------------------------------
# Case Study: Using Different Vehicle Creators
#
# This example demonstrates the use of different vehicle creators to populate 
# lanes with vehicles using distinct driving models. The creators used are:
# 1. `FixedStateCreator`: Generates vehicles with specified spacing and speed.
# 2. `FixedDemandCreator`: Generates vehicles based on a fixed traffic flow rate.
# ------------------------------------------------------------------------------

# Import the library
import autopysta as ap

# Display the current version of autopysta
print(ap.version())

# Define the highway geometry for the simulation. The Geometry object takes:
# 1. `length`: The length of the highway (meters).
# 2. `lanes`: Number of lanes.
# 3. `merge_pos`: Position where a merge ramp ends (0 for no merge ramp).
# 4. `diverge_pos`: Position where a diverge ramp starts (highway length for no diverge ramp).
length = 1000
initial_lanes = 4
merge_position = 300
diverge_position = 700
highway_geometry = ap.Geometry(length, initial_lanes, merge_position, diverge_position)

# Define the driving models for acceleration/deceleration.
# Default parameters are used for both models.
idm_model = ap.idm()
gipps_model = ap.gipps()

# Specify the types of vehicle creators for each lane. The creators define the
# conditions under which vehicles are added to the lanes:
# - `FixedStateCreator`: Generates vehicles based on specified spacing and speed.
# - `FixedDemandCreator`: Generates vehicles based on a fixed flow rate.
# If only one creator is given, it will apply to all lanes. The final parameter 
# is optional, specifying a maximum number of vehicles (default is unlimited).
spacing = 15
speed = 10
flow_rate = 0.5
lane_creators = [
    ap.FixedStateCreator(gipps_model, spacing, speed),  # Lane 1
    ap.FixedDemandCreator(idm_model, flow_rate),        # Lane 2
    ap.FixedStateCreator(idm_model, spacing, speed),    # Lane 3
    ap.FixedDemandCreator(gipps_model, flow_rate),      # Lane 4 (if present)
]


# Define the lane-changing model. To disable lane changing, use `no_lch`.
lane_change_model = ap.lcm_gipps()

# Initialize the Simulation object with the defined settings. The simulation is
# set to run for 80 seconds with a timestep of 0.1 seconds.
# No vehicles are predefined, so we use an empty list.
# We set verbose mode to get some extra output and see the shape of the geometry
total_time = 80
vehicles=[]
time_step = 0.1
verbose = True
simulation = ap.Simulation(
    lane_change_model,
    total_time,
    highway_geometry,
    lane_creators,
    vehicles,
    time_step
)


# Run the simulation. The `run()` method returns a `Results` object containing
# trajectory data from the simulation.
simulation_results = simulation.run()

# The `plot_x_vs_t` method generates trajectory plots. It can be used to plot
# all lanes or specific lanes, as shown below.
plotting = True
if plotting:
    simulation_results.plot_x_vs_t()       # Plot all lanes
    simulation_results.plot_x_vs_t(lane=1) # Plot only lane 1
    simulation_results.plot_x_vs_t(lane=2) # Plot only lane 2
    simulation_results.plot_x_vs_t(lane=3) # Plot only lane 3
    simulation_results.plot_x_vs_t(lane=4) # Plot only lane 4 (if applicable)

Explanation of the Simulation Example

  • Geometry Setup: Creates a highway with a length of 1000 meters and 4 lanes. The highway includes a merge ramp at 300 meters and a diverge ramp at 700.
  • Vehicle Models: The IDM, Gipps, and Newell Random Acceleration models are assigned to control vehicle dynamics. Different models can represent various driving styles or traffic conditions.
  • Lane Creators: Vehicles are added based on either a fixed spacing (FixedStateCreator) or a flow rate (FixedDemandCreator). This allows the simulation of both congested and free-flowing traffic conditions.
  • Lane-Changing Logic: The lane-change model (lcm_gipps) handles vehicle lane changes based on the surrounding traffic conditions, with optional parameters for enabling or disabling lane changes.
  • Simulation Execution: The simulation runs for a set period, returning vehicle trajectories for analysis.

Additional Features

  • Verbose Mode: Enables detailed output during the simulation, useful for understanding and troubleshooting the behavior of individual vehicles.
  • Plotting: The plot_x_vs_t() method generates time-space plots for vehicle trajectories, providing a visual representation of the simulation results.

Platform-Specific Details

  • Linux and macOS: Autopysta uses .so shared libraries and works with Python 3.8+.
  • Windows: Only Python 3.8 is supported due to DLL handling requirements. Autopysta uses .pyd files on Windows.

Autopysta provides an efficient and flexible framework for traffic simulation, making it suitable for research, experimentation, and traffic model development. 🚦

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

autopysta-0.0.31.0.tar.gz (105.8 kB view details)

Uploaded Source

Built Distributions

autopysta-0.0.31.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (866.1 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

autopysta-0.0.31.0-cp313-cp313-macosx_14_0_universal2.whl (637.1 kB view details)

Uploaded CPython 3.13 macOS 14.0+ universal2 (ARM64, x86-64)

autopysta-0.0.31.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (866.1 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

autopysta-0.0.31.0-cp312-cp312-macosx_14_0_universal2.whl (637.1 kB view details)

Uploaded CPython 3.12 macOS 14.0+ universal2 (ARM64, x86-64)

autopysta-0.0.31.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (857.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

autopysta-0.0.31.0-cp311-cp311-macosx_14_0_universal2.whl (635.5 kB view details)

Uploaded CPython 3.11 macOS 14.0+ universal2 (ARM64, x86-64)

autopysta-0.0.31.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (857.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

autopysta-0.0.31.0-cp310-cp310-macosx_14_0_universal2.whl (635.5 kB view details)

Uploaded CPython 3.10 macOS 14.0+ universal2 (ARM64, x86-64)

autopysta-0.0.31.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (853.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

autopysta-0.0.31.0-cp39-cp39-macosx_14_0_universal2.whl (635.5 kB view details)

Uploaded CPython 3.9 macOS 14.0+ universal2 (ARM64, x86-64)

autopysta-0.0.31.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (853.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

autopysta-0.0.31.0-cp38-cp38-macosx_14_0_universal2.whl (635.4 kB view details)

Uploaded CPython 3.8 macOS 14.0+ universal2 (ARM64, x86-64)

File details

Details for the file autopysta-0.0.31.0.tar.gz.

File metadata

  • Download URL: autopysta-0.0.31.0.tar.gz
  • Upload date:
  • Size: 105.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.13.0

File hashes

Hashes for autopysta-0.0.31.0.tar.gz
Algorithm Hash digest
SHA256 08145ce3eafbec263efaba0daeba2859bac4d92fa0372b61dc72afdeccca92ea
MD5 7de382c5588ba540f48038158e948ed1
BLAKE2b-256 4241cd1d55d10795f9ca49d59005033ffa5b09856e01d58ee9d462f39361f6a7

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ffe5747bea9acdb0715cd1dbb7f7e9a234498acfb1a43bb44dc364758a8418c7
MD5 3e4a2cfd314bc9115d55f86f7e4a083d
BLAKE2b-256 9119fc70a11b572762bd14b6d0ef8a4bd71bb208effc020dad58fe4cf78fc414

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp313-cp313-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp313-cp313-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 1df845a3a7c16f9c9afaba70092add83ec4fc428d88408b82fe569233bc7313a
MD5 a90d619f36ff2316f5e6cf66442250cd
BLAKE2b-256 1f462e3056f10909662952942902914f53482bec2d5aeaab6c4674ae9dac0ce3

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4186eb065a546016ed162de6d42b7ee4d938cb5561cc2e6a347dba37ac4e04b9
MD5 0b89889bf87fa05a4dda95a4dcb066ce
BLAKE2b-256 7665aba9475c330ddc4598e4172703e6c880c2cba3955babcaf49a95115c7d48

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp312-cp312-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp312-cp312-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 08e1d0ce6ff54d0328d85738ec604143aa4ae64c9f7a199b9f49de541a68bd66
MD5 fdd078d74f7a98916acb882451217c0d
BLAKE2b-256 5584ff3ef48c07bb63762b64c523b338b4a242c12217555dd1da9b01645dd9cd

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0455ac5e050c467b541d6802059c25a7a066e6fcc7d8ceb1a41c6d607a644fc3
MD5 d797778a03cecb7f91e0709ad2439c00
BLAKE2b-256 5487709e0908d6189af906a5603d1430b4f2beb3d6004aa181dc67a4c16ba9e2

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp311-cp311-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp311-cp311-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 22b344ef35d53eb6e63168c6ddbb0b6fb65c2b72b459771d95529dcf2c1ebb0c
MD5 c51fe870beddcfe907faf553c5d3b46e
BLAKE2b-256 43ae065853c93fee537f887c713e8f7e9c31d0750bfae0c04e137b9dddf33ca7

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cecfbe192038b1e22fab4e66fe7214301a9865df8cd1b9c761419d7e7feef616
MD5 a8b7dee65b3c95a417465c5b92e1cb3b
BLAKE2b-256 109d9bd3411f1267d057d758ecbfcaef32f88e070ed185ed65746f1d2a13cce2

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp310-cp310-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp310-cp310-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 8ea32672d1ac4b4ddde8db49b6da03a46cfb5750f52b0c694e1009df1f8f4f6e
MD5 06db8dc1bfcf5356f16875c150c62cea
BLAKE2b-256 8a9efa27d1df548e35994137721f6b64814b3e730751fa9659d8bc8e9a01b2db

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12a5af60236c907c4a6829984bbf7737aca4fb7a9c0fd9bb787c79ea8493a77f
MD5 41905b3a295103443b7623e369906a34
BLAKE2b-256 90993f79f810864305e99b39483240d3808aa70b560b68eab4af4695da9469a5

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp39-cp39-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp39-cp39-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 d72462bf9a2266d6e76d66e7f26b93d093a662ce8412128c4d73295cd6d20551
MD5 d31809c25b303ac10ae39d0c0b47fb21
BLAKE2b-256 980e0a48c26355894d9512ab386de20ff07415192518caed606875cc13a5a7e3

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b56db1bf476461e7472234f869a3ac9bffdbcaea7a9fd161a6e2741c44d9682e
MD5 9b436be0a019dc47c77168d9286acd5c
BLAKE2b-256 e18436e631e0806e5e3570be83e89554b5558f8838b12eac405d89af81a53abf

See more details on using hashes here.

File details

Details for the file autopysta-0.0.31.0-cp38-cp38-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for autopysta-0.0.31.0-cp38-cp38-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 2606ce403d19a3a505ee4d54a4e55259d2df0a14927fd57eb741c508fe65d5ee
MD5 c395f4cf0fa7ccc6a1abedbf1be8ced1
BLAKE2b-256 81ada57d1db9adb8b0524f00e9f585794dd6fc16f88e927a648b8d2f25226a57

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page