Files
econ_emt/econ/agents/autoproduction.py

68 lines
1.9 KiB
Python

from .base_agent import BaseAgent
class AutoProductionAgent(BaseAgent):
"""
Automaticaly produces commodity if in business inventory
"""
def __init__(self,sim,business,worker=-1,employment_rate=0) -> None:
super().__init__(sim)
self.business=business
self.prod=business.production
self.worker=worker
self.employment_rate=employment_rate
self.employment_index=worker
self.target=0
self.prod_counter=0
def set_worker(self,workers):
if workers>1:
self.worker=workers
elif workers==-1:
self.worker=-1
else:
self.worker=1
def set_target(self,qty):
self.target=qty
def can_produce(self):
# how much can we produce
minprod=[]
for k,v in self.prod["prod"].items():
minprod.append(self.business.inventory[k]/v)
possibleProds=int(min(minprod))
return possibleProds*self.prod["amount"]
def should_produce(self):
# check if we should produce
if self.business.resource_in_possesion()>=self.target:
return 0
return self.can_produce()
def tick(self,step,epi):
can=self.should_produce()
if can==0:
return
run=True
i=self.worker
while run:
if self.should_produce()==0:
return
if i==0:
return
# remove cost from inventory
for k,cost in self.prod["prod"].items():
self.business.inventory[k]-=cost
# add commodity
self.business.inventory[self.prod['name']]+=self.prod["amount"]
self.prod_counter+=1
i-=1
def reset_qty(self):
self.prod_counter=0
def qty(self):
return self.prod_counter