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

This is a minimal model that inherits from model.py
and just sets up a couple of agents in two groups that
do nothing except move around randomly.

 
Modules
       
lib.actions
lib.model

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

 
class EdgeworthBox(lib.model.Model)
    EdgeworthBox(model_nm='model', props=None, grp_struct={'def_grp': {'mbr_creator': <function create_agent at 0x7bbcb03c3c10>, 'grp_action': None, 'mbr_action': <function def_action at 0x7bbcb03c3d30>, 'num_mbrs': 1, 'num_mbrs_prop': None, 'color': 'blue'}, 'red_grp': {'mbr_creator': <function create_agent at 0x7bbcb03c3c10>, 'grp_action': None, 'mbr_action': <function def_action at 0x7bbcb03c3d30>, 'num_mbrs': 1, 'num_mbrs_prop': None, 'color': 'red'}}, env_action=None, random_placing=True, serial_obj=None, exec_key=None, create_for_test=False)
 
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:
EdgeworthBox
lib.model.Model
builtins.object

Methods defined here:
create_pop_hist(self)
Set up our pop hist object to record amount traded per period.
Directly accessing self.env.pop_hist breaks encapsulation.
But that's OK since we plan to move pop_hist into model.
handle_props(self, props, model_dir=None)
A generic parameter handling method.
We get height and width here, since so many models use them.
rpt_census(self, acts, moves)
This is where we override the default census report.
Report the amount of cheese and wine of cheese_agent
update_pop_hist(self)
This is our hook into the env to record the number of trades each
period.
Directly accessing self.env.pop_hist breaks encapsulation.
But that's OK since we plan to move pop_hist into model.

Methods inherited from lib.model.Model:
__init__(self, model_nm='model', props=None, grp_struct={'def_grp': {'mbr_creator': <function create_agent at 0x7bbcb03c3c10>, 'grp_action': None, 'mbr_action': <function def_action at 0x7bbcb03c3d30>, 'num_mbrs': 1, 'num_mbrs_prop': None, 'color': 'blue'}, 'red_grp': {'mbr_creator': <function create_agent at 0x7bbcb03c3c10>, 'grp_action': None, 'mbr_action': <function def_action at 0x7bbcb03c3d30>, 'num_mbrs': 1, 'num_mbrs_prop': None, 'color': 'red'}}, env_action=None, random_placing=True, serial_obj=None, exec_key=None, create_for_test=False)
Initialize self.  See help(type(self)) for accurate signature.
__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)
collect_stats(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_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_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.

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
       
create_cheese(name, i, action=None, **kwargs)
create_model(serial_obj=None, props=None)
This is for the sake of the API server:
create_wine(name, i, action=None, **kwargs)
main()

 
Data
        AMT_AVAIL = 'amt_available'
CHEESE_AGENT = 'Cheese agent'
DEBUG = <lib.utils.Debug object>
DEF_CHEESE_MBRS = 1
DEF_NUM_CHEESE = 4
DEF_NUM_WINE = 4
DEF_WINE_MBRS = 1
GEN_UTIL_FUNC = 'gen_util_func'
GOODS = 'goods'
INCR = 'incr'
MODEL_NAME = 'edgeworthbox'
PRE_TRADE_UTIL = 'pre_trade_util'
START_CHEESE = 'start_cheese'
START_WINE = 'start_wine'
TRADE_WITH = 'trades_with'
UTIL = 'util'
UTIL_FUNC = 'util_func'
WINE_AGENT = 'Wine agent'
cheese_goods = {'cheese': {'amt_available': 4, 'incr': 0, 'util_func': 'gen_util_func'}, 'wine': {'amt_available': 0, 'incr': 0, 'util_func': 'gen_util_func'}}
edge_grps = {'cheese_grp': {'color': 'blue', 'mbr_action': <function seek_a_trade>, 'mbr_creator': <function create_cheese>, 'num_mbrs': 1}, 'wine_grp': {'color': 'red', 'mbr_action': <function seek_a_trade>, 'mbr_creator': <function create_wine>, 'num_mbrs': 1}}
wine_goods = {'cheese': {'amt_available': 0, 'incr': 0, 'util_func': 'gen_util_func'}, 'wine': {'amt_available': 4, 'incr': 0, 'util_func': 'gen_util_func'}}