Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
!pip install gradio --quiet
|
| 2 |
+
import gradio as gr
|
| 3 |
+
|
| 4 |
+
# Simple simulation model for EV trip energy use
|
| 5 |
+
def estimate_energy(distance_km, elevation_m, avg_speed, temp_c):
|
| 6 |
+
base_kwh_per_km = 0.18 # typical EV consumption
|
| 7 |
+
speed_penalty = 0.001 * (avg_speed - 70) # penalty per km/h above 70
|
| 8 |
+
temp_penalty = 0.002 * abs(temp_c - 20) # penalty per °C deviation
|
| 9 |
+
elevation_penalty = elevation_m * 0.00002 # kWh per meter of climb
|
| 10 |
+
|
| 11 |
+
kwh = distance_km * (base_kwh_per_km + speed_penalty + temp_penalty)
|
| 12 |
+
kwh += elevation_penalty
|
| 13 |
+
return round(max(kwh, 0.1), 2)
|
| 14 |
+
|
| 15 |
+
def range_safe(available_kWh, reserve_kWh, distance_km, elevation_m, avg_speed, temp_c):
|
| 16 |
+
needed_kWh = estimate_energy(distance_km, elevation_m, avg_speed, temp_c)
|
| 17 |
+
|
| 18 |
+
# safety check
|
| 19 |
+
margin = available_kWh - reserve_kWh - needed_kWh
|
| 20 |
+
|
| 21 |
+
if margin >= 5:
|
| 22 |
+
status = "SAFE TO PROCEED"
|
| 23 |
+
confidence = "High confidence"
|
| 24 |
+
bar = "🟩🟩🟩"
|
| 25 |
+
elif margin >= 0:
|
| 26 |
+
status = "MARGINALLY SAFE"
|
| 27 |
+
confidence = "Medium confidence"
|
| 28 |
+
bar = "🟨🟨⬜"
|
| 29 |
+
else:
|
| 30 |
+
status = "CHARGING REQUIRED"
|
| 31 |
+
confidence = "Low confidence"
|
| 32 |
+
bar = "🟥⬜⬜"
|
| 33 |
+
|
| 34 |
+
explanation = (
|
| 35 |
+
f"Trip requires {needed_kWh} kWh. "
|
| 36 |
+
f"You have {available_kWh} kWh available with {reserve_kWh} kWh reserved.\n"
|
| 37 |
+
f"Energy margin: {round(margin,2)} kWh.\n"
|
| 38 |
+
f"Confidence level: {confidence} {bar}"
|
| 39 |
+
)
|
| 40 |
+
|
| 41 |
+
return f"{status}\n\n{explanation}"
|
| 42 |
+
|
| 43 |
+
demo = gr.Interface(
|
| 44 |
+
fn=range_safe,
|
| 45 |
+
inputs=[
|
| 46 |
+
gr.Number(label="Available Battery (kWh)", value=50),
|
| 47 |
+
gr.Number(label="Reserve to Keep (kWh)", value=10),
|
| 48 |
+
gr.Number(label="Distance (km)", value=120),
|
| 49 |
+
gr.Number(label="Elevation Gain (m)", value=300),
|
| 50 |
+
gr.Number(label="Average Speed (km/h)", value=80),
|
| 51 |
+
gr.Number(label="Temperature (°C)", value=15),
|
| 52 |
+
],
|
| 53 |
+
outputs="text",
|
| 54 |
+
title="Enhanced Range Safe Mode Prototype",
|
| 55 |
+
description="Multi-factor range safety calculator simulating realistic EV behavior.",
|
| 56 |
+
)
|
| 57 |
+
|
| 58 |
+
demo.launch()
|