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.9 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.9 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.30.1.tar.gz (6.5 kB view details)

Uploaded Source

Built Distributions

autopysta-0.0.30.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (860.9 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

autopysta-0.0.30.1-cp313-cp313-macosx_14_0_universal2.whl (634.1 kB view details)

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

autopysta-0.0.30.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (860.8 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

autopysta-0.0.30.1-cp312-cp312-macosx_14_0_universal2.whl (634.1 kB view details)

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

autopysta-0.0.30.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (852.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

autopysta-0.0.30.1-cp311-cp311-macosx_14_0_universal2.whl (632.1 kB view details)

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

autopysta-0.0.30.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (852.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

autopysta-0.0.30.1-cp310-cp310-macosx_14_0_universal2.whl (632.1 kB view details)

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

autopysta-0.0.30.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (847.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

autopysta-0.0.30.1-cp39-cp39-macosx_14_0_universal2.whl (632.1 kB view details)

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

autopysta-0.0.30.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (847.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

autopysta-0.0.30.1-cp38-cp38-macosx_14_0_universal2.whl (632.1 kB view details)

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

File details

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

File metadata

  • Download URL: autopysta-0.0.30.1.tar.gz
  • Upload date:
  • Size: 6.5 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.30.1.tar.gz
Algorithm Hash digest
SHA256 f873e396c199e161984736bb0eb165c6d776889ec4d3cb0b34474c67435de9e3
MD5 d2602ca598bcb66698971d4d606b2a3a
BLAKE2b-256 5acd8f1c5e079bc0a420889f9fcdfa9b62ab8a3042fbef8ed34a240a64fe2fac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f68e47b95f8e7d438712497b0a66e94da140c59f45804dbc9488958e45c0a398
MD5 0f71040c964db8ac14ff0bcb3fd2c1e9
BLAKE2b-256 58b6e361d31cb917920b9077d5133d16e8f7e5e3c82c9053dcc0ed582a1c5c0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp313-cp313-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 1e6f81d00a3f02534593258484f1c34f33cec58b3a9fd2f7a24c83c0b5032e66
MD5 eadb5dbf9413e852be6413ec9b7dcc8c
BLAKE2b-256 871bcd76c284bd77661f4acfd6e2cccb1eae55616c0c4f618d791498e368e312

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a18dd49757d00e11e30e99084c2686727205083638d08a5594cfb4fbcb955d4e
MD5 5a5f4c34e4c663436634d47dcda16277
BLAKE2b-256 9c28f38f85f35bbe60149c03f560d1b5bcf45038a1ce8c36dd4a3f165b695c35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp312-cp312-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 bd9f4e5cee3bedcfde16b0958e58c7256b852ee2e88d8814520a5d940bb7dc81
MD5 34d506e6764e542e812f3ca4f3e55848
BLAKE2b-256 6993e76a3e4ee752670d981f6b784f67a2164042fdc4fef545b98adb5b024409

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed25994fc2d1c1e6238ea390625b4ecd70a0ada8e849f9c1a5fd7573115212ac
MD5 40f24d38bb1ca81bb9bf6325dfcd959f
BLAKE2b-256 3410bd594cfeffcb6a071d9900484effbdb732b01b14882ee3b0cd3291de5a32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp311-cp311-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 3310e7d98e772205d53bb06216e20f21f11086c87daba06fb8c8de2c6e31a83e
MD5 9a0852a6176dd16a3e78ce229df23074
BLAKE2b-256 b1449ef437bb43c83f903afc3a8b0a7dadd79de990d1089e5eefa73667741d50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da230e3b275af284011425a13973c93378df81e607875feb30040d73a7d18d58
MD5 54a547304a976b6e9db29b858f593e15
BLAKE2b-256 301b38d18bba12fbfd6b12150d994dc00ecf9d3e37e94f4138471f12d6014ac1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp310-cp310-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 69c537203ea9c50d5a47461d0aee6262b0957d4583dd50d515d15bb37db10e2e
MD5 587d94b0afd72eabd1f9344b898d7d4f
BLAKE2b-256 9049ef5603b1a1ffa63484bbb5bd4b273788d63feaf42f7ecf8ac9beb0982acd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 45a8a2b07525766d110083ff503137795ed451487e1fb7d186bf98fdd99b77d0
MD5 5bbeebd8a3cbbe4e24c7babadb0d04ba
BLAKE2b-256 396ebb0f231a4d1ab7c33079c0ae5b6134295ec31b413a19a4a80b53ef89aff6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp39-cp39-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 815add58be70d96da3523a3c87d96972ed12b3367ba3c5535d9f500950bb8a23
MD5 c4b812304d570c85f62e618db8f13034
BLAKE2b-256 db70c76e073dc7d9e2cb9617c923f604da666f7dc04178d47601047e53e32808

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 738d3b6c8d122029738089cd8f24e0b2e4e14ee0aef84a620ae6bb06bb93a603
MD5 da93131506586ccd7c702c0eaee80417
BLAKE2b-256 934aa101f562a603251af7f06ae9df2bc7e8a24c68571e9395a54c21c6e03443

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for autopysta-0.0.30.1-cp38-cp38-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 edc57a5da559d1f93fc365d6ce68e100aaa459c7b863cc67f30bed0bd6ea942f
MD5 2f22231f1157c346fba983189057c399
BLAKE2b-256 142d3780d2300c0717bf4a683231204d1102c2dba95d4517d2e318f46d7884b4

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