From 27b482fb3f6c0960f27150be6a26043799b55981 Mon Sep 17 00:00:00 2001 From: Shrek Requiem Date: Mon, 3 Feb 2025 16:21:43 -0500 Subject: [PATCH] initial model --- python/src/classes.py | 14 ++++++++++-- python/src/simulation.py | 49 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 python/src/simulation.py diff --git a/python/src/classes.py b/python/src/classes.py index d5317a2..814b9b8 100644 --- a/python/src/classes.py +++ b/python/src/classes.py @@ -1,5 +1,5 @@ import numpy as np -from datetime import datetime, timedelta +from datetime import datetime class Bakery: def __init__(self): @@ -15,7 +15,7 @@ class Bakery: self.energy_per_loaf = 0.3 # kWh per loaf # Community / meta-system metrics - self.community_trust = 50 # 0-100 score + self.community_trust = 50.0 # 0-100 score self.distribution_log = [] def produce_bread(self, requested_loaves): @@ -46,3 +46,13 @@ class Bakery: "individuals": total_distributed * 0.2 }) return total_distributed + +class Member: + def __init__(self, name, skill): + self.name = name + self.skill = skill + self.participation_score = np.random.randint(20, 80) + self.trust_score = np.random.randint(30, 70) + + def vote(self, proposal): + return "yes" if np.random.rand() > 0.01 else "no" # 1/100 chance for a no diff --git a/python/src/simulation.py b/python/src/simulation.py new file mode 100644 index 0000000..f9be27c --- /dev/null +++ b/python/src/simulation.py @@ -0,0 +1,49 @@ +import numpy as np +from datetime import datetime, timedelta +from classes import Bakery, Member + +def simulate_days(days=30): + bakery = Bakery() + + # Initialize members + members = [ + Member("Alex", "baker"), + Member("Sam", "organizer"), + Member("Jamie", "distributor"), + Member("Casey", "volunteer") + ] + + # Metrics + trust_history = [] + bread_history = [] + + for day in range(days): + # --- Daily donations --- + bakery.flour_stock += np.random.randint(10, 2) # ~10kg/day + bakery.energy_stock += np.random.randint(30, 5) # ~30kWh/day + + # --- Decentralized production decision --- + if bakery.flour_stock < 50: # Trigger production proposal + votes = [member.vote("produce_bread") for member in members] + yes_votes = sum(1 for vote in votes if vote == "yes") + + if yes_votes / len(members) >= 1: # Consensus + requested_loaves = 100 + produced = bakery.produce_bread(requested_loaves) + print(f"Day {day}: Produced {produced} loaves") + + # --- Distribute bread --- + daily_distribution = bakery.distribute_bread({ + "mutual_aid": 50, # 50 groups needing bread + "individuals": 100 # 100 individuals + }) + + # --- Update meta-system trust --- + bakery.community_trust += daily_distribution * 0.1 + bakery.community_trust = min(bakery.community_trust, 100) + + # Log metrics + trust_history.append(bakery.community_trust) + bread_history.append(bakery.bread_stock) + + return trust_history, bread_history