lmcuong199 commited on
Commit
21f9f1e
Β·
verified Β·
1 Parent(s): 9758500

Create simulator_module.py

Browse files
Files changed (1) hide show
  1. simulator_module.py +71 -0
simulator_module.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+
3
+ def run_simulator(
4
+ site_name: str,
5
+ visitor_count: int,
6
+ current_risk: float,
7
+ improvement_pct: float # 0-100, do user kΓ©o slider
8
+ ) -> tuple[str, pd.DataFrame]:
9
+
10
+ improvement = improvement_pct / 100
11
+ new_risk = round(max(0.0, current_risk * (1 - improvement)), 3)
12
+
13
+ # ── TΓ­nh toΓ‘n TRƯỚC ───────────────────────────────────
14
+ waste_total = visitor_count * 0.5
15
+ unmanaged_now = waste_total * current_risk
16
+ water_now = round(unmanaged_now * 0.15, 2)
17
+ co2_now = round(unmanaged_now * 2.5, 2) if current_risk > 0.5 else 0.0
18
+ cost_now = round(unmanaged_now * 1.5, 1)
19
+
20
+ # ── TΓ­nh toΓ‘n SAU ─────────────────────────────────────
21
+ unmanaged_new = waste_total * new_risk
22
+ water_new = round(unmanaged_new * 0.15, 2)
23
+ co2_new = round(unmanaged_new * 2.5, 2) if new_risk > 0.5 else 0.0
24
+ cost_new = round(unmanaged_new * 1.5, 1)
25
+ good_cost = round(waste_total * 0.4, 1)
26
+
27
+ daily_save = round(max(cost_now - cost_new, 0), 1)
28
+ annual_save = int(daily_save * 365)
29
+
30
+ # ── Trust grade ───────────────────────────────────────
31
+ def grade(r):
32
+ if r < 0.2: return "A 🌟"
33
+ if r < 0.4: return "B βœ…"
34
+ if r < 0.6: return "C ⚠️"
35
+ if r < 0.8: return "D 🚩"
36
+ return "F 🚨"
37
+
38
+ # ── DataFrame cho bar chart ───────────────────────────
39
+ chart_df = pd.DataFrame({
40
+ "Scenario": ["Current", "After Improvement", "Current", "After Improvement", "Current", "After Improvement"],
41
+ "Metric": ["Unmanaged Waste (kg/day)", "Unmanaged Waste (kg/day)",
42
+ "CO2 Emission (kg/day)", "CO2 Emission (kg/day)",
43
+ "Daily Cost (USD)", "Daily Cost (USD)"],
44
+ "Value": [unmanaged_now, unmanaged_new, co2_now, co2_new, cost_now, cost_new]
45
+ })
46
+
47
+ # ── Text output ───────────────────────────────────────
48
+ output = f"""## πŸ”„ Before / After Simulator β€” {site_name}
49
+
50
+ **Improvement Applied: {improvement_pct:.0f}%**
51
+ | | Before | After | Change |
52
+ |--|--------|-------|--------|
53
+ | Risk Score | {current_risk:.2f} | {new_risk:.2f} | {"↓ " + str(round((current_risk - new_risk)*100)) + "%" if new_risk < current_risk else "β€”"} |
54
+ | Trust Grade | {grade(current_risk)} | {grade(new_risk)} | {"⬆️ Improved" if new_risk < current_risk else "β€”"} |
55
+ | Unmanaged Waste | {unmanaged_now:.1f} kg/day | {unmanaged_new:.1f} kg/day | ↓ {round(unmanaged_now - unmanaged_new, 1)} kg |
56
+ | Water Pollution | {water_now} kg BOD | {water_new} kg BOD | ↓ {round(water_now - water_new, 2)} kg |
57
+ | COβ‚‚ Emission | {co2_now} kg/day | {co2_new} kg/day | ↓ {round(co2_now - co2_new, 1)} kg |
58
+ | Daily Cost | ${cost_now} | ${cost_new} | ↓ ${daily_save} |
59
+ | **Annual Savings** | β€” | β€” | **${annual_save:,}/year** |
60
+
61
+ ---
62
+
63
+ ### πŸ’‘ What {improvement_pct:.0f}% improvement means in practice:
64
+ - Reduce unmanaged waste by **{round(unmanaged_now - unmanaged_new, 1)} kg every day**
65
+ - Save **${annual_save:,} USD per year**
66
+ - Protect **{int((water_now - water_new) * 1000 * 365):,} liters** of clean water annually
67
+ - Avoid **{round((co2_now - co2_new) * 365, 1)} kg COβ‚‚** per year
68
+
69
+ > πŸ“Š See bar chart below for visual comparison
70
+ """
71
+ return output, chart_df