fashion
index
/home/gcallah/TandonDevOps/IndraABM/models/fashion.py

This is the Adam Smith fashion model.

 
Modules
       
lib.actions
math
lib.model
numpy

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

 
class Fashion(lib.model.Model)
    Fashion(model_nm='model', props=None, grp_struct={'def_grp': {'mbr_creator': <function create_agent at 0x7c8bb5aeb790>, 'grp_action': None, 'mbr_action': <function def_action at 0x7c8bb5aeb8b0>, 'num_mbrs': 1, 'num_mbrs_prop': None, 'color': 'blue'}, 'red_grp': {'mbr_creator': <function create_agent at 0x7c8bb5aeb790>, 'grp_action': None, 'mbr_action': <function def_action at 0x7c8bb5aeb8b0>, '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)
 
Perhaps the fashion model does not need to override anything from Model?
 
 
Method resolution order:
Fashion
lib.model.Model
builtins.object

Methods inherited from lib.model.Model:
__init__(self, model_nm='model', props=None, grp_struct={'def_grp': {'mbr_creator': <function create_agent at 0x7c8bb5aeb790>, 'grp_action': None, 'mbr_action': <function def_action at 0x7c8bb5aeb8b0>, 'num_mbrs': 1, 'num_mbrs_prop': None, 'color': 'blue'}, 'red_grp': {'mbr_creator': <function create_agent at 0x7c8bb5aeb790>, 'grp_action': None, 'mbr_action': <function def_action at 0x7c8bb5aeb8b0>, '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_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_props(self, props, model_dir=None)
A generic parameter handling method.
We get height and width here, since so many models use them.
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
       
change_color(agent, opp_group)
change agent's DISPLAY_COLOR to its opposite color
common_action(agent, others_red, others_blue, op1, op2, **kwargs)
Common action for both followers and trend setters, different only based on
what op1 and op2 are.
create_follower(name, i, props=None, color=0.0, action=None, exec_key=0)
Create a follower: all BLUE to start.
create_model(serial_obj=None, props=None)
This `if` is for the sake of the API server:
create_tsetter(name, i, props=None, color=1.0, action=None, exec_key=0)
Create a trendsetter: all RED to start.
dont_like_things(my_color, my_pref, op1, op2)
follower_action(agent, **kwargs)
Action for followers
gt(a, b, /)
Same as a > b.
lt(a, b, /)
Same as a < b.
main()
new_color_pref(old_pref, env_color)
Calculate new color pref with the formula below:
new_color = sin(avg(asin(old_pref) + asin(env_color)))
tsetter_action(agent, **kwargs)
Action for trend setters

 
Data
        BIG_ENOUGH = 0.03
BLUE_FOLLOWERS = 'Blue Followers'
BLUE_SIN = 0.0
BLUE_TSETTERS = 'Blue Trendsetters'
COLOR_PREF = 'color_pref'
DEF_NUM_FOLLOWERS = 55
DEF_NUM_TSETTERS = 5
DISPLAY_COLOR = 'display_color'
ENV_WEIGHT = 0.6
FOLLOWER_PRENM = 'follower'
HOOD_SIZE = 4
MODEL_NAME = 'fashion'
NEUTRAL = 0.7071068
OPP_GROUP = 'opp_group'
RED_FOLLOWERS = 'Red Followers'
RED_SIN = 1.0
RED_TSETTERS = 'Red Trendsetters'
TOO_SMALL = 0.01
TSETTER_PRENM = 'tsetter'
fashion_grps = {'Blue Followers': {'color': 'blue', 'mbr_action': <function follower_action>, 'mbr_creator': <function create_follower>, 'num_mbrs': 55, 'num_mbrs_prop': 'num_followers'}, 'Blue Trendsetters': {'color': 'navy', 'mbr_action': <function tsetter_action>, 'mbr_creator': <function create_tsetter>, 'num_mbrs': 0}, 'Red Followers': {'color': 'red', 'mbr_action': <function follower_action>, 'mbr_creator': <function create_follower>, 'num_mbrs': 0}, 'Red Trendsetters': {'color': 'darkred', 'mbr_action': <function tsetter_action>, 'mbr_creator': <function create_tsetter>, 'num_mbrs': 5, 'num_mbrs_prop': 'num_tsetters'}}
opp_group = {'Blue Followers': 'Red Followers', 'Blue Trendsetters': 'Red Trendsetters', 'Red Followers': 'Blue Followers', 'Red Trendsetters': 'Blue Trendsetters'}
weightings = [1.0, 0.6]