Module SimEconomica.main

Expand source code
from typing import List


## Systems
from Actor import Actor
from Market import Market



## Factories
from JobPicker import RandomJobPicker
from Factories import ActorFactory
from OrderFactory import OrderFactory
from MarketFactory import MarketFactory

## Data
from Resources import RESOURCES

## Utils  
from random import random, randrange, choice
from tqdm import tqdm



SIZE_ACTOR_POOL = 100

NB_ROUNDS = 10

# def Main():
# Create markets
markets = [MarketFactory.CreateNew() for i in range(len(RESOURCES))]
# Create ActorFactory and Actors
actorFactory = ActorFactory(rangeCapital = range(100, 1000, 10))
actors = [actorFactory.CreateNew() for i in range(SIZE_ACTOR_POOL)]


# memalloc
qtt = 0
for idRound in tqdm(range(10)): # NB_ROUNDS):
    for act in actors:
        act.Produce(act.GetProductionCapacity())
    for act in actors:
        for elem in act.mCurrentRecipe.Inputs:
            qtt = act.mInventory.GetFreeSpace(elem.ResourceID)
            if qtt > 0:
                act.PostOrder_SingleMarket(act.CreateOrder(False, qtt, randrange(9, 12)), markets[elem.ResourceID])
        for elem in act.mCurrentRecipe.Outputs:
            qtt = act.mInventory.GetStock(elem.ResourceID)
            if qtt > 0:
                act.PostOrder_SingleMarket(act.CreateOrder(True, qtt, randrange(8, 11)), markets[elem.ResourceID])
    for idMarket in range(len(markets)):
        markets[idMarket].MatchOrders()
        markets[idMarket].ProcessResults(markets[idMarket].ComputeClearingPrice(), actors)
        markets[idMarket].ClearTempData()
    for idActor in range(len(actors)):
        actors[idActor].ProcessOrderResults()
        actors[idActor].ClearTempData()



'''
class Simulation(object):
    def __init__(self):
        self.mActors: List[Actor]
        self.mActorFactory: ActorFactory = ActorFactory(rangeCapital = range(100, 1000, 10))
        self.mMarkets: List[Market] = []
        self.mPriceHistory: List[List[int]] = []
        
    def Initialize(self):
        self.mActors = [self.mActorFactory.CreateNew() for i in range(SIZE_ACTOR_POOL)]
        self.mMarkets = [MarketFactory.CreateNew() for i in range(len(RESOURCES))]

    def PrepMarkets(self):
        """
            Function executed at each step to clear intermediary data from markets.
        """
        for currMarket in self.mMarkets:
            currMarket.ClearTempData()

    def PrepActors(self):
        """
            Clear intermediary data for actors
        """
        for currActor in self.mActors:
            currActor.ClearTempData()
    
    def Run(self, nbRounds: int):
        for idRound in tqdm(range(nbRounds)):
            # define production capacity of actors
            # then create orders
            # process on markets
            # update state of actors
            # check for bankruptcies
            # go next round
            pass
'''


"""
actorFactory = ActorFactory(rangeCapital = range(100, 1000, 10))

actors = [actorFactory.CreateNew() for i in range(10)]


market = MarketFactory.CreateNew()


for act in actors:
    act.GetProductionCapacity()

for act in actors:
    act.Produce(act.GetProductionCapacity())


for act in actors:
    act.GetProductionCapacity()
"""

Functions

def random()

random() -> x in the interval [0, 1).