Charging Ahead with E-buses

32 minute read

Published:

This is another blog post for the 2023 High School Mathematical Contest in Modeling (HiMCM). By taking a glance at the title, one may understand it is about e-buses. The problem statement in some sense is “easy” to understand, but it is not easy to solve appropriately. The problem statement is as follows:

Problem Background

The proliferation of electronic buses (e-buses) in cities across the globe represents a significant stride toward sustainable urban transport. With the mounting concerns over air pollution and climate change, many cities have been prompted to reconsider their reliance on traditional diesel buses. According to a recent report by Bloomberg New Energy Finance, e-buses are set to dominate the public transit sector, becoming the majority of all buses on the road globally by 2032. China has been particularly noteworthy in this transition, as it is home to most of the world’s e-buses, driven in large part by government policies that prioritize electric vehicles and stringent emission standards. Cities throughout the world (e.g., Bogota, Colombia, New York, USA, and Berlin, Germany) are also making concerted efforts to incorporate e-buses into their fleets, albeit at a more gradual pace.

E-buses aren’t only environmentally appealing but are also anticipated to be cost-effective in the long run due to falling battery prices and lower operational expenses Governmental incentives, such as the $1.7 billion allocation from the 2023 Bipartisan Infrastructure Law for e-bus projects in the U.S., further bolster e-bus adoption. However, challenges include high initial costs, charging infrastructure development, lengthy charging times, and potential range limitations.

Requirements

  1. Construct a model to aid cities in understanding the ecological consequences of transitioning to an all-electric bus fleet.
    • Identify a metropolitan area with a population of (at least) 500,000 people that does not currently have a fully electric bus fleet. Apply your model to your chosen location.
  2. Money matters. Construct a model that focuses on the financial implications associated with a conversion to e-buses. Your model should factor in potential external funding covering up to 50% of the transition costs.
    • Apply your financial model to the same metropolitan area you used in the previous question.
  3. Transportation officials in metropolitan areas are exploring approaches in which they gradually change their fleet from combustion engines buses to electric. Assuming the goal is to have a fully electric fleet no later than 2033, utilize your previously developed models to craft a 10-year roadmap that urban transport authorities can leverage to plan their e-bus fleet updates.
    • Apply your models (or new model) to the same metropolitan area you used in the previous question and also apply it to two additional metropolitan areas of your choosing.

Analysis

The problem statement is quite comprehensive and requires a multi-faceted approach to address the ecological and financial implications of transitioning to an all-electric bus fleet. The problem can be broken down into three main components:

Modeling the Ecological Impact of E-buses

To begin with, we need to construct a model that quantifies the ecological impact of transitioning to an all-electric bus fleet. For this model, we’ll focus on the reduction of $CO_2$ emissions as the primary ecological benefit of transitioning to an all-electric bus fleet.

Key factors to consider:

  • Current number of buses
  • Average daily mileage per bus
  • $CO_2$ emissions per mile for diesel buses
  • $CO_2$ emissions per mile for e-buses (based on local electricity grid mix)
  • Lifespan of buses

For a more comprehensive analysis, we could also consider:

  • Non-linear adoption rate of e-buses
  • Improving efficiency of both diesel and e-buses over time
  • Changing electricity grid mix (becoming cleaner over time)
  • Lifecycle emissions, including manufacturing and disposal

Modeling the Financial Implications of E-buses

Equally important, for this model, we’ll consider the costs associated with transitioning to an e-bus fleet, including the possibility of external funding.

Key factors to consider:

  • Cost of diesel buses vs. e-buses
  • Operational costs (fuel/electricity, maintenance)
  • Infrastructure costs (charging stations)
  • External funding (up to $50%$ of transition costs)

However, for a comprehensive analysis, we could also consider:

  • Non-linear adoption rate of e-buses (as in the ecological model)
  • Decreasing costs of e-buses and batteries over time
  • Changing fuel/electricity prices
  • Infrastructure costs spread over time
  • Maintenance cost differences between diesel and e-buses

Modeling the Transition to an All-Electric Fleet

Finally, we need to develop a 10-year roadmap for transitioning to an all-electric bus fleet. This roadmap should consider the ecological and financial implications of the transition and provide a detailed plan for urban transport authorities to follow.

Key factors to consider:

  • Non-linear adoption rate using a logistic function, which better reflects real-world adoption patterns.
  • Consideration of improving efficiency for both diesel and e-buses over time.
  • Incorporation of changing electricity grid mix (becoming cleaner over time).
  • Inclusion of lifecycle emissions, including manufacturing and disposal.
  • Decreasing costs of e-buses and batteries over time.
  • Changing fuel and electricity prices.
  • Infrastructure costs spread over the transition period.
  • Different maintenance costs for diesel and e-buses.

Moreover, we consider three cities for our analysis: New York City, Los Angeles, and Chicago. One may wonder the reason behind choosing these cities. The reason is simple: these cities are among the most populous cities in the United States, and they have a significant impact on the environment due to their large transportation networks. Therefore, it is crucial to analyze the ecological and financial implications of transitioning to an all-electric bus fleet in these cities.

Solution

Now, let us delve into the solution to the problem statement. We are going to start by constructing a model to quantify the ecological impact of transitioning to an all-electric bus fleet. For not being too lengthy, we are going to provide the Python code for the model. The code is as follows:

Ecological Impact of Transitioning to E-buses

# Import necessary libraries
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import logistic

Then we are going to define a class called AdvancedEBusEcologicalModel that will contain the necessary functions to model the ecological impact of transitioning to an all-electric bus fleet. The Advanced here means we consider more factors in order to make the model more comprehensive. The code is as follows:

class AdvancedEBusEcologicalModel:
    def __init__(self, city, population, num_buses, avg_daily_miles, 
                 initial_diesel_co2_per_mile, initial_ebus_co2_per_mile, 
                 diesel_efficiency_improvement, ebus_efficiency_improvement,
                 grid_cleanliness_improvement, manufacturing_emissions_diesel,
                 manufacturing_emissions_ebus, disposal_emissions_diesel,
                 disposal_emissions_ebus, bus_lifespan_years):
        self.city = city
        self.population = population
        self.num_buses = num_buses
        self.avg_daily_miles = avg_daily_miles
        self.initial_diesel_co2_per_mile = initial_diesel_co2_per_mile
        self.initial_ebus_co2_per_mile = initial_ebus_co2_per_mile
        self.diesel_efficiency_improvement = diesel_efficiency_improvement
        self.ebus_efficiency_improvement = ebus_efficiency_improvement
        self.grid_cleanliness_improvement = grid_cleanliness_improvement
        self.manufacturing_emissions_diesel = manufacturing_emissions_diesel
        self.manufacturing_emissions_ebus = manufacturing_emissions_ebus
        self.disposal_emissions_diesel = disposal_emissions_diesel
        self.disposal_emissions_ebus = disposal_emissions_ebus
        self.bus_lifespan_years = bus_lifespan_years
    
    def adoption_rate(self, year, transition_midpoint=5, transition_steepness=0.8):
        return logistic.cdf(year, loc=transition_midpoint, scale=1/transition_steepness)
    
    def calculate_annual_emissions(self, year):
        percent_electric = self.adoption_rate(year)
        diesel_buses = self.num_buses * (1 - percent_electric)
        ebuses = self.num_buses * percent_electric
        
        annual_miles = self.avg_daily_miles * 365
        
        diesel_co2_per_mile = self.initial_diesel_co2_per_mile * (1 - self.diesel_efficiency_improvement) ** year
        ebus_co2_per_mile = self.initial_ebus_co2_per_mile * (1 - self.ebus_efficiency_improvement) ** year * (1 - self.grid_cleanliness_improvement) ** year
        
        diesel_emissions = diesel_buses * annual_miles * diesel_co2_per_mile
        ebus_emissions = ebuses * annual_miles * ebus_co2_per_mile
        
        # Add lifecycle emissions
        lifecycle_emissions = (self.manufacturing_emissions_diesel + self.disposal_emissions_diesel) * (diesel_buses / self.bus_lifespan_years) + \
                              (self.manufacturing_emissions_ebus + self.disposal_emissions_ebus) * (ebuses / self.bus_lifespan_years)
        
        return diesel_emissions + ebus_emissions + lifecycle_emissions
    
    def project_emissions(self, years):
        return [self.calculate_annual_emissions(year) for year in range(years)]
    
    def plot_emissions(self, years):
        emissions = self.project_emissions(years)
        plt.figure(figsize=(12, 6))
        plt.plot(range(years), emissions)
        plt.title(f"Projected Annual CO2 Emissions from Bus Fleet in {self.city}")
        plt.xlabel("Years")
        plt.ylabel("CO2 Emissions (kg)")
        plt.grid(True)
        plt.show()

Then we use Los Angeles as an example to demonstrate how the model works. We define the parameters for each part; however, the parameters are not real, I just make them up for the example only. The code is as follows:

# Example usage for Los Angeles
la_model = AdvancedEBusEcologicalModel(
    city="Los Angeles",
    population=4_000_000,
    num_buses=2_500,
    avg_daily_miles=150,
    initial_diesel_co2_per_mile=2.70,
    initial_ebus_co2_per_mile=1.40,
    diesel_efficiency_improvement=0.01,  # 1% improvement per year
    ebus_efficiency_improvement=0.02,    # 2% improvement per year
    grid_cleanliness_improvement=0.03,   # 3% improvement per year
    manufacturing_emissions_diesel=100000,  # kg CO2
    manufacturing_emissions_ebus=150000,    # kg CO2
    disposal_emissions_diesel=20000,        # kg CO2
    disposal_emissions_ebus=30000,          # kg CO2
    bus_lifespan_years=12
)

Then we may initiate the model and print the initial and final annual emissions. The code is as follows:

la_model.plot_emissions(20) # Project emissions for the next 20 years

print(f"Initial annual emissions: {la_model.calculate_annual_emissions(0):,.0f} kg CO2")
print(f"Final annual emissions: {la_model.calculate_annual_emissions(19):,.0f} kg CO2")

The figure is as follows:

Projected Annual CO2 Emissions from Bus Fleet in Los Angeles

And the output is as follows:

Initial annual emissions: 391,586,906 kg CO2
Final annual emissions: 110,686,062 kg CO2

The model is working as expected. The next step is to construct a model that focuses on the financial implications associated with a conversion to e-buses.

Financial Implications of Transitioning to E-buses

We also define a class called AdvancedEBusFinancialModel that will contain the necessary functions to model the financial implications of transitioning to an e-bus fleet. The code is as follows:

class AdvancedEBusFinancialModel:
    def __init__(self, city, num_buses, initial_diesel_bus_cost, initial_ebus_cost, 
                 initial_diesel_fuel_cost, initial_electricity_cost,
                 diesel_maintenance_cost, ebus_maintenance_cost,
                 charging_infrastructure_cost, external_funding_percent,
                 ebus_cost_decrease_rate, battery_cost_decrease_rate,
                 diesel_fuel_price_increase_rate, electricity_price_increase_rate):
        self.city = city
        self.num_buses = num_buses
        self.initial_diesel_bus_cost = initial_diesel_bus_cost
        self.initial_ebus_cost = initial_ebus_cost
        self.initial_diesel_fuel_cost = initial_diesel_fuel_cost
        self.initial_electricity_cost = initial_electricity_cost
        self.diesel_maintenance_cost = diesel_maintenance_cost
        self.ebus_maintenance_cost = ebus_maintenance_cost
        self.charging_infrastructure_cost = charging_infrastructure_cost
        self.external_funding_percent = min(external_funding_percent, 0.5)  # Cap at 50%
        self.ebus_cost_decrease_rate = ebus_cost_decrease_rate
        self.battery_cost_decrease_rate = battery_cost_decrease_rate
        self.diesel_fuel_price_increase_rate = diesel_fuel_price_increase_rate
        self.electricity_price_increase_rate = electricity_price_increase_rate

    def adoption_rate(self, year, transition_midpoint=5, transition_steepness=0.8):
        return logistic.cdf(year, loc=transition_midpoint, scale=1/transition_steepness)

    def ebus_cost(self, year):
        return self.initial_ebus_cost * (1 - self.ebus_cost_decrease_rate) ** year * \
               (1 - self.battery_cost_decrease_rate) ** year

    def calculate_transition_cost(self, year, total_years):
        diesel_buses_replaced = self.num_buses * (self.adoption_rate(year) - self.adoption_rate(year - 1))
        ebus_cost = self.ebus_cost(year)
        transition_cost = diesel_buses_replaced * (ebus_cost - self.initial_diesel_bus_cost)
        infrastructure_cost = self.charging_infrastructure_cost / total_years  # Spread infrastructure cost
        total_cost = transition_cost + infrastructure_cost
        return total_cost * (1 - self.external_funding_percent)

    def calculate_operational_costs(self, year):
        percent_electric = self.adoption_rate(year)
        diesel_buses = self.num_buses * (1 - percent_electric)
        ebuses = self.num_buses * percent_electric
        
        diesel_fuel_cost = self.initial_diesel_fuel_cost * (1 + self.diesel_fuel_price_increase_rate) ** year
        electricity_cost = self.initial_electricity_cost * (1 + self.electricity_price_increase_rate) ** year
        
        diesel_cost = diesel_buses * (diesel_fuel_cost + self.diesel_maintenance_cost)
        ebus_cost = ebuses * (electricity_cost + self.ebus_maintenance_cost)
        
        return diesel_cost + ebus_cost

    def project_costs(self, years):
        transition_costs = [self.calculate_transition_cost(year, years) for year in range(years)]
        operational_costs = [self.calculate_operational_costs(year) for year in range(years)]
        total_costs = np.array(transition_costs) + np.array(operational_costs)
        return total_costs

    def plot_costs(self, years):
        costs = self.project_costs(years)
        plt.figure(figsize=(12, 6))
        plt.plot(range(years), costs)
        plt.title(f"Projected Annual Costs for Bus Fleet Transition in {self.city}")
        plt.xlabel("Years")
        plt.ylabel("Annual Cost ($)")
        plt.grid(True)
        plt.show()

We also use Los Angeles as an example to demonstrate how the model works. We define the parameters for each part; however, it is also still the same that the parameters are not real, I just make them up for the example only. The code is as follows:

la_financial_model = AdvancedEBusFinancialModel(
    city="Los Angeles",
    num_buses=2_500,
    initial_diesel_bus_cost=500_000,
    initial_ebus_cost=750_000,
    initial_diesel_fuel_cost=50_000,  # per bus per year
    initial_electricity_cost=30_000,  # per bus per year
    diesel_maintenance_cost=20_000,   # per bus per year
    ebus_maintenance_cost=15_000,     # per bus per year
    charging_infrastructure_cost=50_000_000,
    external_funding_percent=0.4,
    ebus_cost_decrease_rate=0.03,     # 3% decrease per year
    battery_cost_decrease_rate=0.05,  # 5% decrease per year
    diesel_fuel_price_increase_rate=0.02,  # 2% increase per year
    electricity_price_increase_rate=0.01   # 1% increase per year
)

Then we may initiate the model and print the initial and final annual costs. The code is as follows:

la_financial_model.plot_costs(20) # Project costs for the next 20 years

print(f"Initial annual costs: ${la_financial_model.project_costs(20)[0]:,.0f}")
print(f"Final annual costs: ${la_financial_model.project_costs(20)[-1]:,.0f}")

The figure is as follows:

Projected Annual Costs for Bus Fleet Transition in Los Angeles

And the output is as follows:

Initial annual costs: $179,059,726
Final annual costs: $129,601,013

We may see that since we consider the external funding, the final annual costs are lower than the initial annual costs. The model is working as expected. Another reason is that the e-bus cost decreases over time, which also contributes to the lower final annual costs. For a better and comprehensive model, one may consider changing fuel/electricity prices, infrastructure costs spread over time, and maintenance cost differences between diesel and e-buses.

Transitioning to an All-Electric Fleet

The next step is to develop a 10-year roadmap for transitioning to an all-electric bus fleet. We are going to define a class called EBusTransitionRoadmap that will contain the necessary functions to craft a 10-year roadmap for transitioning to an all-electric bus fleet. The code is as follows:

class EBusTransitionRoadmap:
    def __init__(self, name, num_buses, avg_daily_miles, 
                 initial_diesel_co2_per_mile, initial_ebus_co2_per_mile, 
                 diesel_efficiency_improvement, ebus_efficiency_improvement,
                 grid_cleanliness_improvement, manufacturing_emissions_diesel,
                 manufacturing_emissions_ebus, disposal_emissions_diesel,
                 disposal_emissions_ebus, bus_lifespan_years,
                 initial_diesel_bus_cost, initial_ebus_cost, 
                 initial_diesel_fuel_cost, initial_electricity_cost,
                 diesel_maintenance_cost, ebus_maintenance_cost,
                 charging_infrastructure_cost, external_funding_percent,
                 ebus_cost_decrease_rate, battery_cost_decrease_rate,
                 diesel_fuel_price_increase_rate, electricity_price_increase_rate):
        
        # Ecological parameters
        self.name = name
        self.num_buses = num_buses
        self.avg_daily_miles = avg_daily_miles
        self.initial_diesel_co2_per_mile = initial_diesel_co2_per_mile
        self.initial_ebus_co2_per_mile = initial_ebus_co2_per_mile
        self.diesel_efficiency_improvement = diesel_efficiency_improvement
        self.ebus_efficiency_improvement = ebus_efficiency_improvement
        self.grid_cleanliness_improvement = grid_cleanliness_improvement
        self.manufacturing_emissions_diesel = manufacturing_emissions_diesel
        self.manufacturing_emissions_ebus = manufacturing_emissions_ebus
        self.disposal_emissions_diesel = disposal_emissions_diesel
        self.disposal_emissions_ebus = disposal_emissions_ebus
        self.bus_lifespan_years = bus_lifespan_years
        
        # Financial parameters
        self.initial_diesel_bus_cost = initial_diesel_bus_cost
        self.initial_ebus_cost = initial_ebus_cost
        self.initial_diesel_fuel_cost = initial_diesel_fuel_cost
        self.initial_electricity_cost = initial_electricity_cost
        self.diesel_maintenance_cost = diesel_maintenance_cost
        self.ebus_maintenance_cost = ebus_maintenance_cost
        self.charging_infrastructure_cost = charging_infrastructure_cost
        self.external_funding_percent = min(external_funding_percent, 0.5)
        self.ebus_cost_decrease_rate = ebus_cost_decrease_rate
        self.battery_cost_decrease_rate = battery_cost_decrease_rate
        self.diesel_fuel_price_increase_rate = diesel_fuel_price_increase_rate
        self.electricity_price_increase_rate = electricity_price_increase_rate

    def adoption_rate(self, year, transition_midpoint=5, transition_steepness=0.8):
        return logistic.cdf(year, loc=transition_midpoint, scale=1/transition_steepness)

    def calculate_annual_emissions(self, year):
        percent_electric = self.adoption_rate(year)
        diesel_buses = self.num_buses * (1 - percent_electric)
        ebuses = self.num_buses * percent_electric
        
        annual_miles = self.avg_daily_miles * 365
        
        diesel_co2_per_mile = self.initial_diesel_co2_per_mile * (1 - self.diesel_efficiency_improvement) ** year
        ebus_co2_per_mile = self.initial_ebus_co2_per_mile * (1 - self.ebus_efficiency_improvement) ** year * (1 - self.grid_cleanliness_improvement) ** year
        
        diesel_emissions = diesel_buses * annual_miles * diesel_co2_per_mile
        ebus_emissions = ebuses * annual_miles * ebus_co2_per_mile
        
        lifecycle_emissions = (self.manufacturing_emissions_diesel + self.disposal_emissions_diesel) * (diesel_buses / self.bus_lifespan_years) + \
                              (self.manufacturing_emissions_ebus + self.disposal_emissions_ebus) * (ebuses / self.bus_lifespan_years)
        
        return diesel_emissions + ebus_emissions + lifecycle_emissions

    def ebus_cost(self, year):
        return self.initial_ebus_cost * (1 - self.ebus_cost_decrease_rate) ** year * \
               (1 - self.battery_cost_decrease_rate) ** year

    def calculate_transition_cost(self, year, total_years):
        diesel_buses_replaced = self.num_buses * (self.adoption_rate(year) - self.adoption_rate(year - 1))
        ebus_cost = self.ebus_cost(year)
        transition_cost = diesel_buses_replaced * (ebus_cost - self.initial_diesel_bus_cost)
        infrastructure_cost = self.charging_infrastructure_cost / total_years
        total_cost = transition_cost + infrastructure_cost
        return total_cost * (1 - self.external_funding_percent)

    def calculate_operational_costs(self, year):
        percent_electric = self.adoption_rate(year)
        diesel_buses = self.num_buses * (1 - percent_electric)
        ebuses = self.num_buses * percent_electric
        
        diesel_fuel_cost = self.initial_diesel_fuel_cost * (1 + self.diesel_fuel_price_increase_rate) ** year
        electricity_cost = self.initial_electricity_cost * (1 + self.electricity_price_increase_rate) ** year
        
        diesel_cost = diesel_buses * (diesel_fuel_cost + self.diesel_maintenance_cost)
        ebus_cost = ebuses * (electricity_cost + self.ebus_maintenance_cost)
        
        return diesel_cost + ebus_cost

    def create_roadmap(self, years):
        emissions = [self.calculate_annual_emissions(year) for year in range(years)]
        transition_costs = [self.calculate_transition_cost(year, years) for year in range(years)]
        operational_costs = [self.calculate_operational_costs(year) for year in range(years)]
        total_costs = np.array(transition_costs) + np.array(operational_costs)
        percent_electric = [self.adoption_rate(year) for year in range(years)]
        
        return percent_electric, emissions, total_costs

    def plot_roadmap(self, years):
        percent_electric, emissions, costs = self.create_roadmap(years)
        
        fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 18))
        
        ax1.plot(range(years), percent_electric)
        ax1.set_title(f"E-Bus Transition Roadmap for {self.name}")
        ax1.set_ylabel("Percent of Fleet Electric")
        ax1.set_ylim(0, 1)
        ax1.grid(True)
        
        ax2.plot(range(years), costs)
        ax2.set_ylabel("Annual Cost ($)")
        ax2.grid(True)
        
        ax3.plot(range(years), emissions)
        ax3.set_xlabel("Years")
        ax3.set_ylabel("Annual CO2 Emissions (kg)")
        ax3.grid(True)
        
        plt.tight_layout()
        plt.show()
    
    def create_actionable_roadmap(self, years):
        percent_electric, emissions, costs = self.create_roadmap(years)
        
        actionable_roadmap = []
        for year in range(years):
            new_ebuses = int(self.num_buses * (percent_electric[year] - (percent_electric[year-1] if year > 0 else 0)))
            charging_stations = max(1, int(new_ebuses * 0.2))  # Assume 1 station per 5 buses, minimum 1
            
            action_items = [
                f"Purchase and deploy {new_ebuses} new electric buses",
                f"Install {charging_stations} new charging stations",
                f"Retire {new_ebuses} diesel buses",
                f"Train {max(1, int(new_ebuses * 0.5))} maintenance staff on e-bus technology",
                f"Conduct public awareness campaign on benefits of e-buses"
            ]
            
            if year == 0:
                action_items.append("Secure external funding and partnerships")
                action_items.append("Develop detailed implementation plan")
            elif year == years - 1:
                action_items.append("Evaluate program success and plan for future improvements")
            
            actionable_roadmap.append({
                "year": year + 1,
                "percent_electric": percent_electric[year],
                "emissions": emissions[year],
                "costs": costs[year],
                "action_items": action_items
            })
        
        return actionable_roadmap

    def print_actionable_roadmap(self, years):
        roadmap = self.create_actionable_roadmap(years)
        
        print(f"\nActionable 10-Year Roadmap for {self.name}:")
        for year in roadmap:
            print(f"\nYear {year['year']}:")
            print(f"  Percent of fleet electric: {year['percent_electric']:.2%}")
            print(f"  Annual emissions: {year['emissions']:,.0f} kg CO2")
            print(f"  Annual costs: ${year['costs']:,.0f}")
            print("  Action items:")
            for item in year['action_items']:
                print(f"    - {item}")

Then we may establish the examples for Los Angeles, New York City, and Chicago. The code is as follows:

# Example usage for three cities
cities = [
    {
        "name": "Los Angeles",
        "num_buses": 2_500,
        "avg_daily_miles": 150,
        "initial_diesel_co2_per_mile": 2.70,
        "initial_ebus_co2_per_mile": 1.40,
        "diesel_efficiency_improvement": 0.01,
        "ebus_efficiency_improvement": 0.02,
        "grid_cleanliness_improvement": 0.03,
        "manufacturing_emissions_diesel": 100000,
        "manufacturing_emissions_ebus": 150000,
        "disposal_emissions_diesel": 20000,
        "disposal_emissions_ebus": 30000,
        "bus_lifespan_years": 12,
        "initial_diesel_bus_cost": 500000,
        "initial_ebus_cost": 750000,
        "initial_diesel_fuel_cost": 50000,
        "initial_electricity_cost": 30000,
        "diesel_maintenance_cost": 20000,
        "ebus_maintenance_cost": 15000,
        "charging_infrastructure_cost": 50000000,
        "external_funding_percent": 0.4,
        "ebus_cost_decrease_rate": 0.03,
        "battery_cost_decrease_rate": 0.05,
        "diesel_fuel_price_increase_rate": 0.02,
        "electricity_price_increase_rate": 0.01
    },
    {
        "name": "New York City",
        "num_buses": 5_700,
        "avg_daily_miles": 130,
        "initial_diesel_co2_per_mile": 2.70,
        "initial_ebus_co2_per_mile": 1.2,
        "diesel_efficiency_improvement": 0.01,
        "ebus_efficiency_improvement": 0.02,
        "grid_cleanliness_improvement": 0.025,
        "manufacturing_emissions_diesel": 100000,
        "manufacturing_emissions_ebus": 150000,
        "disposal_emissions_diesel": 20000,
        "disposal_emissions_ebus": 30000,
        "bus_lifespan_years": 12,
        "initial_diesel_bus_cost": 500000,
        "initial_ebus_cost": 750000,
        "initial_diesel_fuel_cost": 55000,
        "initial_electricity_cost": 35000,
        "diesel_maintenance_cost": 22000,
        "ebus_maintenance_cost": 16000,
        "charging_infrastructure_cost": 100000000,
        "external_funding_percent": 0.45,
        "ebus_cost_decrease_rate": 0.03,
        "battery_cost_decrease_rate": 0.05,
        "diesel_fuel_price_increase_rate": 0.02,
        "electricity_price_increase_rate": 0.015
    },
    {
        "name": "Chicago",
        "num_buses": 1_800,
        "avg_daily_miles": 140,
        "initial_diesel_co2_per_mile": 2.7,
        "initial_ebus_co2_per_mile": 1.5,
        "diesel_efficiency_improvement": 0.01,
        "ebus_efficiency_improvement": 0.02,
        "grid_cleanliness_improvement": 0.02,
        "manufacturing_emissions_diesel": 100000,
        "manufacturing_emissions_ebus": 150000,
        "disposal_emissions_diesel": 20000,
        "disposal_emissions_ebus": 30000,
        "bus_lifespan_years": 12,
        "initial_diesel_bus_cost": 500000,
        "initial_ebus_cost": 750000,
        "initial_diesel_fuel_cost": 48000,
        "initial_electricity_cost": 28000,
        "diesel_maintenance_cost": 19000,
        "ebus_maintenance_cost": 14000,
        "charging_infrastructure_cost": 40000000,
        "external_funding_percent": 0.35,
        "ebus_cost_decrease_rate": 0.03,
        "battery_cost_decrease_rate": 0.05,
        "diesel_fuel_price_increase_rate": 0.02,
        "electricity_price_increase_rate": 0.01
    }
]

Then we may initiate the model and print the actionable roadmap for each city. The code is as follows:

for city_data in cities:
    model = EBusTransitionRoadmap(**city_data)
    model.plot_roadmap(10)  # 10-year roadmap
    model.print_actionable_roadmap(10)

    percent_electric, emissions, costs = model.create_roadmap(10)
    print(f"\nRoadmap for {city_data['name']}:")
    print(f"Initial percent electric: {percent_electric[0]:.2%}")
    print(f"Final percent electric: {percent_electric[-1]:.2%}")
    print(f"Initial annual emissions: {emissions[0]:,.0f} kg CO2")
    print(f"Final annual emissions: {emissions[-1]:,.0f} kg CO2")
    print(f"Initial annual costs: ${costs[0]:,.0f}")
    print(f"Final annual costs: ${costs[-1]:,.0f}")

Then we may have the corresponding results for each city. First and foremost, we have the actionable roadmap for Los Angeles.

E-Bus Transition Roadmap for Los Angeles

Actionable 10-Year Roadmap for Los Angeles:

Year 1:
  Percent of fleet electric: 1.80%
  Annual emissions: 391,586,906 kg CO2
  Annual costs: $180,559,726
  Action items:
    - Purchase and deploy 44 new electric buses
    - Install 8 new charging stations
    - Retire 44 diesel buses
    - Train 22 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses
    - Secure external funding and partnerships
    - Develop detailed implementation plan

Year 2:
  Percent of fleet electric: 3.92%
  Annual emissions: 384,161,384 kg CO2
  Annual costs: $184,055,504
  Action items:
    - Purchase and deploy 52 new electric buses
    - Install 10 new charging stations
    - Retire 52 diesel buses
    - Train 26 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 3:
  Percent of fleet electric: 8.32%
  Annual emissions: 372,524,223 kg CO2
  Annual costs: $186,592,030
  Action items:
    - Purchase and deploy 110 new electric buses
    - Install 22 new charging stations
    - Retire 110 diesel buses
    - Train 55 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 4:
  Percent of fleet electric: 16.80%
  Annual emissions: 353,100,796 kg CO2
  Annual costs: $185,300,622
  Action items:
    - Purchase and deploy 212 new electric buses
    - Install 42 new charging stations
    - Retire 212 diesel buses
    - Train 106 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 5:
  Percent of fleet electric: 31.00%
  Annual emissions: 322,327,511 kg CO2
  Annual costs: $175,371,699
  Action items:
    - Purchase and deploy 355 new electric buses
    - Install 71 new charging stations
    - Retire 355 diesel buses
    - Train 177 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 6:
  Percent of fleet electric: 50.00%
  Annual emissions: 281,347,432 kg CO2
  Annual costs: $154,698,884
  Action items:
    - Purchase and deploy 474 new electric buses
    - Install 94 new charging stations
    - Retire 474 diesel buses
    - Train 237 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 7:
  Percent of fleet electric: 69.00%
  Annual emissions: 239,053,704 kg CO2
  Annual costs: $131,332,371
  Action items:
    - Purchase and deploy 474 new electric buses
    - Install 94 new charging stations
    - Retire 474 diesel buses
    - Train 237 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 8:
  Percent of fleet electric: 83.20%
  Annual emissions: 205,095,517 kg CO2
  Annual costs: $117,255,263
  Action items:
    - Purchase and deploy 355 new electric buses
    - Install 71 new charging stations
    - Retire 355 diesel buses
    - Train 177 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 9:
  Percent of fleet electric: 91.68%
  Annual emissions: 181,967,792 kg CO2
  Annual costs: $114,182,249
  Action items:
    - Purchase and deploy 212 new electric buses
    - Install 42 new charging stations
    - Retire 212 diesel buses
    - Train 106 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 10:
  Percent of fleet electric: 96.08%
  Annual emissions: 166,935,555 kg CO2
  Annual costs: $116,369,897
  Action items:
    - Purchase and deploy 110 new electric buses
    - Install 22 new charging stations
    - Retire 110 diesel buses
    - Train 55 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses
    - Evaluate program success and plan for future improvements

Roadmap for Los Angeles:
Initial percent electric: 1.80%
Final percent electric: 96.08%
Initial annual emissions: 391,586,906 kg CO2
Final annual emissions: 166,935,555 kg CO2
Initial annual costs: $180,559,726
Final annual costs: $116,369,897

For New York City, we may have

E-Bus Transition Roadmap for New York City

Actionable 10-Year Roadmap for New York City:

Year 1:
  Percent of fleet electric: 1.80%
  Annual emissions: 780,471,147 kg CO2
  Annual costs: $449,433,721
  Action items:
    - Purchase and deploy 102 new electric buses
    - Install 20 new charging stations
    - Retire 102 diesel buses
    - Train 51 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses
    - Secure external funding and partnerships
    - Develop detailed implementation plan

Year 2:
  Percent of fleet electric: 3.92%
  Annual emissions: 764,900,078 kg CO2
  Annual costs: $457,427,549
  Action items:
    - Purchase and deploy 120 new electric buses
    - Install 24 new charging stations
    - Retire 120 diesel buses
    - Train 60 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 3:
  Percent of fleet electric: 8.32%
  Annual emissions: 740,210,512 kg CO2
  Annual costs: $463,070,386
  Action items:
    - Purchase and deploy 250 new electric buses
    - Install 50 new charging stations
    - Retire 250 diesel buses
    - Train 125 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 4:
  Percent of fleet electric: 16.80%
  Annual emissions: 698,888,037 kg CO2
  Annual costs: $460,099,846
  Action items:
    - Purchase and deploy 483 new electric buses
    - Install 96 new charging stations
    - Retire 483 diesel buses
    - Train 241 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 5:
  Percent of fleet electric: 31.00%
  Annual emissions: 633,710,521 kg CO2
  Annual costs: $438,252,057
  Action items:
    - Purchase and deploy 809 new electric buses
    - Install 161 new charging stations
    - Retire 809 diesel buses
    - Train 404 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 6:
  Percent of fleet electric: 50.00%
  Annual emissions: 547,728,461 kg CO2
  Annual costs: $393,343,446
  Action items:
    - Purchase and deploy 1082 new electric buses
    - Install 216 new charging stations
    - Retire 1082 diesel buses
    - Train 541 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 7:
  Percent of fleet electric: 69.00%
  Annual emissions: 460,229,003 kg CO2
  Annual costs: $342,990,874
  Action items:
    - Purchase and deploy 1082 new electric buses
    - Install 216 new charging stations
    - Retire 1082 diesel buses
    - Train 541 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 8:
  Percent of fleet electric: 83.20%
  Annual emissions: 391,402,661 kg CO2
  Annual costs: $312,950,884
  Action items:
    - Purchase and deploy 809 new electric buses
    - Install 161 new charging stations
    - Retire 809 diesel buses
    - Train 404 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 9:
  Percent of fleet electric: 91.68%
  Annual emissions: 345,915,034 kg CO2
  Annual costs: $306,882,481
  Action items:
    - Purchase and deploy 483 new electric buses
    - Install 96 new charging stations
    - Retire 483 diesel buses
    - Train 241 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 10:
  Percent of fleet electric: 96.08%
  Annual emissions: 317,533,522 kg CO2
  Annual costs: $312,481,564
  Action items:
    - Purchase and deploy 250 new electric buses
    - Install 50 new charging stations
    - Retire 250 diesel buses
    - Train 125 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses
    - Evaluate program success and plan for future improvements

Roadmap for New York City:
Initial percent electric: 1.80%
Final percent electric: 96.08%
Initial annual emissions: 780,471,147 kg CO2
Final annual emissions: 317,533,522 kg CO2
Initial annual costs: $449,433,721
Final annual costs: $312,481,564

Finally for Chicago, we may have

E-Bus Transition Roadmap for Chicago

Actionable 10-Year Roadmap for Chicago:

Year 1:
  Percent of fleet electric: 1.80%
  Annual emissions: 264,522,630 kg CO2
  Annual costs: $125,264,035
  Action items:
    - Purchase and deploy 32 new electric buses
    - Install 6 new charging stations
    - Retire 32 diesel buses
    - Train 16 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses
    - Secure external funding and partnerships
    - Develop detailed implementation plan

Year 2:
  Percent of fleet electric: 3.92%
  Annual emissions: 259,775,356 kg CO2
  Annual costs: $127,853,687
  Action items:
    - Purchase and deploy 38 new electric buses
    - Install 7 new charging stations
    - Retire 38 diesel buses
    - Train 19 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 3:
  Percent of fleet electric: 8.32%
  Annual emissions: 252,492,394 kg CO2
  Annual costs: $129,788,998
  Action items:
    - Purchase and deploy 79 new electric buses
    - Install 15 new charging stations
    - Retire 79 diesel buses
    - Train 39 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 4:
  Percent of fleet electric: 16.80%
  Annual emissions: 240,533,859 kg CO2
  Annual costs: $128,917,907
  Action items:
    - Purchase and deploy 152 new electric buses
    - Install 30 new charging stations
    - Retire 152 diesel buses
    - Train 76 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 5:
  Percent of fleet electric: 31.00%
  Annual emissions: 221,781,389 kg CO2
  Annual costs: $121,579,232
  Action items:
    - Purchase and deploy 255 new electric buses
    - Install 51 new charging stations
    - Retire 255 diesel buses
    - Train 127 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 6:
  Percent of fleet electric: 50.00%
  Annual emissions: 196,953,055 kg CO2
  Annual costs: $106,115,891
  Action items:
    - Purchase and deploy 341 new electric buses
    - Install 68 new charging stations
    - Retire 341 diesel buses
    - Train 170 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 7:
  Percent of fleet electric: 69.00%
  Annual emissions: 171,399,434 kg CO2
  Annual costs: $88,608,669
  Action items:
    - Purchase and deploy 341 new electric buses
    - Install 68 new charging stations
    - Retire 341 diesel buses
    - Train 170 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 8:
  Percent of fleet electric: 83.20%
  Annual emissions: 150,884,913 kg CO2
  Annual costs: $78,175,790
  Action items:
    - Purchase and deploy 255 new electric buses
    - Install 51 new charging stations
    - Retire 255 diesel buses
    - Train 127 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 9:
  Percent of fleet electric: 91.68%
  Annual emissions: 136,867,846 kg CO2
  Annual costs: $76,086,459
  Action items:
    - Purchase and deploy 152 new electric buses
    - Install 30 new charging stations
    - Retire 152 diesel buses
    - Train 76 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses

Year 10:
  Percent of fleet electric: 96.08%
  Annual emissions: 127,684,494 kg CO2
  Annual costs: $77,917,704
  Action items:
    - Purchase and deploy 79 new electric buses
    - Install 15 new charging stations
    - Retire 79 diesel buses
    - Train 39 maintenance staff on e-bus technology
    - Conduct public awareness campaign on benefits of e-buses
    - Evaluate program success and plan for future improvements

Roadmap for Chicago:
Initial percent electric: 1.80%
Final percent electric: 96.08%
Initial annual emissions: 264,522,630 kg CO2
Final annual emissions: 127,684,494 kg CO2
Initial annual costs: $125,264,035
Final annual costs: $77,917,704

Conclusion

Our comprehensive analysis of the transition from diesel to electric buses in three major U.S. cities - Los Angeles, New York City, and Chicago - reveals several key insights and recommendations for urban transportation authorities:

  • Environmental Impact: The transition to e-buses demonstrates significant potential for reducing CO2 emissions in all three cities. By the end of the 10-year period, each city is projected to achieve substantial reductions in annual emissions:
    • Los Angeles: More than $50%$ reduction
    • New York City: Around $55-65%$ reduction
    • Chicago: About $50-60%$ reduction

      These reductions highlight the critical role that e-bus adoption can play in cities’ efforts to combat climate change and improve air quality.

  • Financial Implications: While the initial years show higher costs due to the purchase of e-buses and installation of charging infrastructure, the long-term financial outlook is promising:
    • By year 10, all cities are projected to see lower annual costs compared to their initial diesel fleet operations.
    • The decreasing costs of e-buses and batteries, combined with lower operational and maintenance costs, contribute to long-term savings.
    • External funding plays a crucial role in managing transition costs, emphasizing the importance of securing grants and partnerships.
  • Adoption Rates: The model predicts a non-linear adoption rate following an S-curve:
    • Initial years show slower adoption as cities build infrastructure and overcome early challenges.
    • Mid-period years see accelerated adoption as processes are streamlined and benefits become apparent.
    • Later years show a slowdown as the transition nears completion. This pattern allows for a gradual, manageable transition that aligns with budget constraints and operational capacities.
  • City-Specific Considerations:
    • Los Angeles shows the fastest adoption rate, benefiting from higher external funding and a cleaner electricity grid.
    • New York City faces the biggest challenge due to its large fleet size but also stands to make the largest absolute impact on emissions.
    • Chicago’s moderate-sized fleet and funding level result in a balanced transition pace.
  • Key Recommendations:
    • Phased Implementation: Cities should follow a phased approach, starting with pilot programs and gradually scaling up. This allows for learning and adaptation.
    • Secure Funding: Actively pursue external funding sources and partnerships to offset transition costs, especially in the early years.
    • Infrastructure Development: Prioritize the development of charging infrastructure in parallel with bus acquisitions to ensure operational readiness.
    • Workforce Training: Implement comprehensive training programs for maintenance staff to build necessary skills for e-bus fleets.
    • Public Engagement: Conduct ongoing public awareness campaigns to build support and highlight the benefits of e-buses.
    • Flexible Planning: Regularly review and adjust the transition plan based on technological advancements, changing costs, and operational experiences.
    • Holistic Approach: Consider the transition as part of a broader sustainable transportation strategy, integrating it with other initiatives like renewable energy adoption and smart city technologies.
  • Future Considerations:
    • Monitor advancements in battery technology, which could further improve range and reduce costs.
    • Consider the potential of hydrogen fuel cell buses as a complementary or alternative technology, especially for longer routes.
    • Explore opportunities for using e-buses in vehicle-to-grid systems to support urban power grids.

In conclusion, the transition to e-buses presents a significant opportunity for cities to reduce their carbon footprint, improve air quality, and potentially realize long-term cost savings. While the transition poses challenges, particularly in the early years, a well-planned, phased approach can lead to substantial environmental and economic benefits. By following the roadmap and recommendations provided, cities can navigate this transition effectively, contributing to a more sustainable and livable urban future.

Comments