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