44from math import radians , cos , sin , asin , sqrt
55
66class FreightSim :
7- def __init__ (self , csv_path = "uscities.csv" , num_trucks = 50 , min_pop = 50000 ):
7+ def __init__ (self , csv_path = "uscities.csv" , num_trucks = 50 , min_pop = 50000 , enable_finance = False ):
88 # Load all US cities from the CSV file
99 self .cities = pd .read_csv (csv_path )
1010
@@ -13,13 +13,18 @@ def __init__(self, csv_path="uscities.csv", num_trucks=50, min_pop=50000):
1313
1414 # Create a fleet of trucks
1515 self .num_trucks = num_trucks
16+
17+ # Finance tracking flag
18+ self .enable_finance = enable_finance
19+
1620 self .trucks = pd .DataFrame ({
1721 'truck_id' : [f"T{ i + 1 } " for i in range (num_trucks )], # Truck names T1, T2, ...
1822 'city_idx' : np .random .choice (self .cities .index , num_trucks ), # Start trucks in random cities
1923 'capacity' : np .random .randint (10 , 30 , num_trucks ), # Each truck can carry 10–30 tons
2024 'status' : ['Idle' ] * num_trucks , # Idle = waiting for a job
2125 'assigned_load' : [None ] * num_trucks , # No load assigned yet
22- 'profit' : [0 ] * num_trucks # Track revenue earned
26+ 'profit' : [0 ] * num_trucks , # Track revenue earned
27+ 'expense' : [0 ]* num_trucks
2328 })
2429
2530 # Add city details to each truck so we know where it is
@@ -141,6 +146,19 @@ def update_trucks(self):
141146 revenue = load ['weight' ] * load ['rate_per_ton' ]
142147 self .trucks .at [idx , 'profit' ] += revenue
143148
149+ if self .enable_finance :
150+ # For simplicity, assume a fixed expense per mile
151+ origin = self .cities .iloc [load ['origin_idx' ]]
152+ distance = self .haversine (origin ['lat' ], origin ['lng' ], dest ['lat' ], dest ['lng' ])
153+ expense_per_mile = 2.0 # $2 per mile
154+ expense = distance * expense_per_mile
155+ self .trucks .at [idx , 'expense' ] += expense
156+
157+ # If finance tracking is enabled, show net profit
158+ net_profit = revenue - self .trucks .at [idx , 'expense' ] if self .enable_finance else revenue
159+ print (f"✅ Truck { truck ['truck_id' ]} delivered Load { load ['load_id' ]} at { dest ['city' ]} , { dest ['state_name' ]} | Earned: ${ revenue } | Net: ${ net_profit } " )
160+
161+
144162 print (f"✅ Truck { truck ['truck_id' ]} delivered Load { load ['load_id' ]} at { dest ['city' ]} , { dest ['state_name' ]} | Earned: ${ revenue } " )
145163
146164 # Remove load (delivered)
0 commit comments