This document outlines a Simulated Annealing (SA) approach to the bus charging scheduling problem that utilizes Mixed Integer Linear Programming (MILP) constraints to determine feasible charging schedules. The problem involves generating an optimal charging schedule for a fleet of Battery Electric Buses (BEBs) based on a set of routes and a mix of fast and slow chargers. The aim is to minimize both the consumption cost (amount of electricity used over a certain time) and the demand cost (rate at which electricity is being used) while ensuring that the buses maintain sufficient charge to complete their workday without delays.
The SA algorithm is introduced and constrained by a set of MILP constraints derived from the Position Allocation Problem (PAP) to ensure the validity of proposed charging schedules. Objective functions describing consumption cost and demand cost are used to minimize power consumption and total cost of using the BEBs.
This repository contains both the source code and the documentation/research for the code as a submodule. The code is written in rust. Rust was chosen for its performance, reliability, and its rich packaging system. Rust can be installed by following this link.
This repository also includes the partnered research paper. The document is written in org mode, but has a LaTeX export of the document that can be built with pdflatex and latexmk. These are typically bundled with a full installation of the LaTeX environment. PlantUML is also utilized for some of the image generation.
Most (if not all) of the tasks are automated via Make. Type make help
to get a list of tasks that can be run.
Run make help
or follow the instruction below:
- Build:
cargo build
- Test:
cargo test
- Run:
cargo run
- Rust crate documentation:
cargo doc --open