DCsionMaker / app.py
SanaAdeel's picture
Update app.py
654008f verified
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
# Function to calculate the total cost for AC and DC systems
def calculate_costs(ac_distance_cost, ac_load_cost, ac_voltage_cost, dc_distance_cost, dc_load_cost, dc_voltage_cost, distance, load_power, project_lifespan):
# AC System Cost Calculation
ac_initial_cost = ac_distance_cost * distance + ac_load_cost * load_power + ac_voltage_cost * 220 # Using 220 kV for AC voltage cost
ac_maintenance_cost = ac_initial_cost * 0.05 # Example maintenance cost per year (5%)
ac_total_cost = ac_initial_cost + (ac_maintenance_cost * project_lifespan)
# DC System Cost Calculation
dc_initial_cost = dc_distance_cost * distance + dc_load_cost * load_power + dc_voltage_cost * 220 # Using 220 kV for DC voltage cost
dc_maintenance_cost = dc_initial_cost * 0.05 # Example maintenance cost per year (5%)
dc_total_cost = dc_initial_cost + (dc_maintenance_cost * project_lifespan)
return ac_total_cost, dc_total_cost
# Function to calculate energy losses for AC and DC systems (simplified for demonstration)
def calculate_losses(distance, load_power, is_dc):
if is_dc:
loss = 0.02 * distance * load_power # 2% loss per 100 km for DC
else:
loss = 0.05 * distance * load_power # 5% loss per 100 km for AC
return loss
# Streamlit Interface
st.title("AC vs DC Transmission Line Cost and Efficiency Comparison")
# Input Parameters
ac_voltage = st.number_input("AC Voltage (kV)", value=220.00)
frequency = st.number_input("Frequency (Hz)", value=50.00)
dc_voltage = st.number_input("DC Voltage (kV)", value=220.00)
load_power = st.number_input("Load Power (MW)", value=100.00)
distance = st.number_input("Distance (km)", value=500.00)
ac_distance_cost = st.number_input("AC Distance Cost Factor ($/km)", value=1000.00)
ac_load_cost = st.number_input("AC Load Cost Factor ($/MW)", value=0.50)
ac_voltage_cost = st.number_input("AC Voltage Cost Factor ($/kV)", value=0.10)
dc_distance_cost = st.number_input("DC Distance Cost Factor ($/km)", value=1500.00)
dc_load_cost = st.number_input("DC Load Cost Factor ($/MW)", value=0.80)
dc_voltage_cost = st.number_input("DC Voltage Cost Factor ($/kV)", value=0.20)
project_lifespan = st.number_input("Project Lifespan (years)", value=30)
# Calculate costs and losses
ac_total_cost, dc_total_cost = calculate_costs(ac_distance_cost, ac_load_cost, ac_voltage_cost,
dc_distance_cost, dc_load_cost, dc_voltage_cost,
distance, load_power, project_lifespan)
ac_loss = calculate_losses(distance, load_power, is_dc=False)
dc_loss = calculate_losses(distance, load_power, is_dc=True)
# Display Results
st.subheader("Cost Comparison (Over Project Lifespan)")
st.write(f"Total AC System Cost: ${ac_total_cost:,.2f}")
st.write(f"Total DC System Cost: ${dc_total_cost:,.2f}")
st.subheader("Energy Losses (Over Distance)")
st.write(f"Energy Loss in AC System: {ac_loss:,.2f} MW")
st.write(f"Energy Loss in DC System: {dc_loss:,.2f} MW")
# Graphical Comparison
fig, ax = plt.subplots(2, 1, figsize=(10, 10))
# Cost Comparison Graph
ax[0].bar(["AC", "DC"], [ac_total_cost, dc_total_cost], color=["blue", "red"])
ax[0].set_title("Total System Cost Comparison")
ax[0].set_ylabel("Total Cost ($)")
ax[0].set_xlabel("Transmission Type")
# Loss Comparison Graph
ax[1].bar(["AC", "DC"], [ac_loss, dc_loss], color=["blue", "red"])
ax[1].set_title("Energy Loss Comparison")
ax[1].set_ylabel("Energy Loss (MW)")
ax[1].set_xlabel("Transmission Type")
# Display the plots
st.pyplot(fig)