bigbox
index
/home/gcallah/TandonDevOps/IndraABM/capital/bigbox.py

Big Box: studies under what conditions the entry of a big box store
will drive small retailers out of business.

 
Modules
       
lib.actions
lib.model
random

 
Classes
       
lib.model.Model(builtins.object)
BigBox

 
class BigBox(lib.model.Model)
    BigBox(model_nm='bigbox', props=None, grp_struct={'consumer_grp': {'mbr_creator': <function create_consumer at 0x7bbcb03775e0>, 'mbr_action': <function consumer_action at 0x7bbcb0377670>, 'num_mbrs': 45.0, 'color': 'blue'}, 'mp_grp': {'mbr_creator': <function create_mp at 0x7bbcb0377820>, 'mbr_action': <function retailer_action at 0x7bbcb0377940>, 'num_mbrs': 270.0, 'color': 'red'}, 'bb_grp': {'mbr_creator': <function create_bb at 0x7bbcb03778b0>, 'mbr_action': <function retailer_action at 0x7bbcb0377940>, 'num_mbrs': 0, 'color': 'black'}}, env_action=<function town_action at 0x7bbcb0377af0>, serial_obj=None, exec_key=None)
 
This class should just create a basic model that runs, has
some agents that move around, and allows us to test if
the system as a whole is working.
It turns out that so far, we don't really need to subclass anything!
 
 
Method resolution order:
BigBox
lib.model.Model
builtins.object

Methods defined here:
__init__(self, model_nm='bigbox', props=None, grp_struct={'consumer_grp': {'mbr_creator': <function create_consumer at 0x7bbcb03775e0>, 'mbr_action': <function consumer_action at 0x7bbcb0377670>, 'num_mbrs': 45.0, 'color': 'blue'}, 'mp_grp': {'mbr_creator': <function create_mp at 0x7bbcb0377820>, 'mbr_action': <function retailer_action at 0x7bbcb0377940>, 'num_mbrs': 270.0, 'color': 'red'}, 'bb_grp': {'mbr_creator': <function create_bb at 0x7bbcb03778b0>, 'mbr_action': <function retailer_action at 0x7bbcb0377940>, 'num_mbrs': 0, 'color': 'black'}}, env_action=<function town_action at 0x7bbcb0377af0>, serial_obj=None, exec_key=None)
Initialize self.  See help(type(self)) for accurate signature.
collect_stats(self)
collect_stats function for class BigBox to collect
statistics. Function collects statistics in variable self.stats
and passes it to the function rpt_stats() as comma separated string.
handle_props(self, props, model_dir=None)
Handle our models special properties.
Our super handles height and width.

Methods inherited from lib.model.Model:
__repr__(self)
This returns a JSON representation of the model.
__str__(self)
Return str(self).
add_child(self, group)
Put a child agent in the womb.
group: which group will add new agent
The womb should move up into model eventually.
add_switch(self, agent_nm, from_grp_nm, to_grp_nm)
Switch agent from 1 group to another.
The agent and groups should be passed by name.
bar_graph(self)
create_anew(self, model_nm, props, grp_struct, exec_key, env_action, random_placing, create_for_test=False)
Create the model for the first time.
create_env(self, env_action=None, random_placing=True)
Override this method to create a unique env...
but this one will already set the model name and add
the groups.
create_from_serial_obj(self, serial_obj)
Restore the model from its serialized version.
create_groups(self)
Override this method in your model to create all of your groups.
In general, you shouldn't need to: fill in the grp_struct instead.
create_pop_hist(self)
There are several methods that still (like in V2) reside in
Env, but which we mean to move to Model. So we provide an interface to
them here so when we move them other code won't break.
`create_pop_hist()` is such a method.
create_user(self)
This will create a user of the correct type.
from_json(self, jrep)
This method restores a model from its JSON rep.
get_locations(self)
get_periods(self)
get_pop_hist(self)
get_prop(self, prop_nm, default=None)
Have a way to get a prop through the model to hide props structure.
get_user_msgs(self)
handle_args(self)
handle_switches(self)
This will actually process the pending switches.
handle_womb(self)
This method adds new agents from the womb.
The womb should move up into model eventually.
is_api_user(self)
is_test_user(self)
line_graph(self)
pending_switches(self)
How many switches are there to execute?
rpt_census(self, acts, moves)
This is the default census report.
Right now, `acts` is not used: do we need it?
Return: a string saying what happened in a period.
rpt_stats(self)
This is a "wrap up" report on the results of a model run.
Each model can do what it wants here.
perhaps will take an iterator object?
a file?
Function takes in a CSV formatted string from function
collect_stats() and writes it to a csv file.
 
Note: added logic so func will not write to stdout
rpt_switches(self)
Generate a string to report our switches.
run(self, periods=None)
This method runs the model. If `periods` is not None,
it will run it for that many periods. Otherwise, on
a terminal, it will display the menu.
Return: 0 if run was fine.
runN(self, periods=10)
Run our model for N periods.
Return the total number of actions taken.
run_batch(self, runs, steps)
Run our model for N periods X steps.
Writes the period specific model statistics to a CSV file.
Files are saved as input filename-[integer-counter].csv
Returns the total number of actions taken.
scatter_plot(self)
to_json(self)
This method generates the JSON representation for this model.
update_pop_hist(self)
This method records our populations each period.

Data descriptors inherited from lib.model.Model:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
Functions
       
choose_store(consumer, sellers)
The Consumer determines who, of those who sell the good he desires,
he will buy from.
Args:
    sellers: a list of tuples of seller (name, agent)
        with type (str, Agent)
    consumer: who shops for good
Returns:
    a top store (with max util) selling that good
consumer_action(consumer, **kwargs)
Check shops near consumer and
consumer decide where to shop at.
create_bb(name, mbr_id, bb_capital, action=None, **kwargs)
Create a big box store.
create_consumer(name, i, action=None, **kwargs)
Create consumers
create_model(serial_obj=None, props=None)
This is for the sake of the API server:
create_mp(store_grp, i, action=None, **kwargs)
Create a mom and pop store.
debug_retailer(grp)
get_rand_good()
Randomly select consumer's item needed
after each run.
main()
retailer_action(store)
Common action to deduct expenses and
check whether the entity goes out of business
sells_good(store)
Return True if store sells the good the consumer needs
    Bigbox: always sells item needed, thus return True
    Consumer: does not sell, thus return False
    MP store: needs to check if it sells item needed
town_action(town)
Create big box store at appropriate turn.
transaction(store, consumer)
Add money to the store's capital from consumer.
utils_from_good(store, good)
Return util for each choice of retailers
with preference for mom-and-pop

 
Data
        AVG_MP_INIT_CAP = 100
BIG_BOX = 'bb_grp'
CAPITAL = 'capital'
CONSUMER = 'consumer_grp'
CONSUMERS_DENSITY = 0.05
DEBUG = True
DEF_BB_PERIOD = 7
DEF_DIM = 30
DEF_HOOD_SIZE = 2
DEF_MP_PREF = 0.1
DEF_NUM_AGENTS = 900
EXPENSE = 'expense'
GOODS_SOLD = 'goods_sold'
INIT_CAPITAL = 'init_capital'
ITEM_NEEDED = 'item_needed'
LAST_UTIL = 'last_util'
MAX_CONSUMER_SPENDING = 70
MIN_CONSUMER_SPENDING = 50
MODEL_NAME = 'bigbox'
MP_DENSITY = 0.3
MP_STORE = 'mp_grp'
MULTIPLIER = 10
NOT_AVAIL = -1.0
NOT_DEBUG = False
NO_PREF = 0.0
NUM_OF_CONSUMERS = 45.0
NUM_OF_MP = 270.0
PERIOD = 'period'
PER_EXPENSE = 'per_expense'
SPENDING_POWER = 'spending_power'
UTIL_ADJ = 'util_adj'
bb_capital = 1000
bb_expense = 100
bigbox_grps = {'bb_grp': {'color': 'black', 'mbr_action': <function retailer_action>, 'mbr_creator': <function create_bb>, 'num_mbrs': 0}, 'consumer_grp': {'color': 'blue', 'mbr_action': <function consumer_action>, 'mbr_creator': <function create_consumer>, 'num_mbrs': 45.0}, 'mp_grp': {'color': 'red', 'mbr_action': <function retailer_action>, 'mbr_creator': <function create_mp>, 'num_mbrs': 270.0}}
cons_goods = ['books', 'coffee', 'groceries', 'hardware', 'meals']
item_needed = None
mp_stores = {'Bookshop': {'color': 'orange', 'goods_sold': ['books'], 'init_capital': 90, 'per_expense': 20, 'util_adj': 0.1}, 'Coffeeshop': {'color': 'black', 'goods_sold': ['coffee'], 'init_capital': 100, 'per_expense': 22, 'util_adj': 0.2}, 'Grocery store': {'color': 'green', 'goods_sold': ['groceries'], 'init_capital': 100, 'per_expense': 23, 'util_adj': 0.3}, 'Hardware': {'color': 'red', 'goods_sold': ['hardware'], 'init_capital': 110, 'per_expense': 18, 'util_adj': 0.4}, 'Restaurant': {'color': 'purple', 'goods_sold': ['meals'], 'init_capital': 100, 'per_expense': 25, 'util_adj': 0.5}}
mp_stores_type = ['Bookshop', 'Coffeeshop', 'Grocery store', 'Hardware', 'Restaurant']