Label Root { Son: Population Label Population { Son: Agent Label Agent { Param: Type Var: Status } Var: NRich Var: NRich0 Var: NRich1 Var: NPoor Var: NPoor0 Var: NPoor1 Param: ProbAction Var: Share0 Var: Share1 } } DATA Object: Root C 1 Object: Population C 1 Var: NRich 1 s + n n 100 Var: NRich0 1 s + n n 50 Var: NRich1 1 s + n n 50 Var: NPoor 1 s + n n 100 Var: NPoor0 1 s + n n 50 Var: NPoor1 1 s + n n 50 Param: ProbAction 0 n + n n 0.02 Var: Share0 0 s + n p Var: Share1 0 s + n p Object: Agent C 200 Param: Type 0 n + n n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Var: Status 1 n + n n 0 0 1 1 1 0 1 0 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 0 1 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0 0 1 0 0 1 1 0 0 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 0 1 SIM_NUM 1 SEED 3 MAX_STEP 2000 EQUATION fun_Fashion.cpp MODELREPORT modelreport.html DESCRIPTION Object_Root (no description available) END_DESCRIPTION Object_Population (no description available ) END_DESCRIPTION Variable_NRich (no description available) _INIT_ END_DESCRIPTION Variable_NRich0 (no description available) _INIT_ END_DESCRIPTION Variable_NRich1 (no description available) _INIT_ END_DESCRIPTION Variable_NPoor (no description available) _INIT_ END_DESCRIPTION Variable_NPoor0 (no description available) _INIT_ END_DESCRIPTION Variable_NPoor1 (no description available) _INIT_ END_DESCRIPTION Parameter_ProbAction (no description available) END_DESCRIPTION Variable_Share0 (no description available) END_DESCRIPTION Variable_Share1 (no description available) END_DESCRIPTION Object_Agent (no description available ) END_DESCRIPTION Parameter_Type (no description available) _INIT_ All 200 instances equal to 0. Instances from 101 to 200 equal to 1. END_DESCRIPTION Variable_Status (no description available) _INIT_ All 200 instances set to integer random values drawn from a uniform in the range [0,1]. END_DESCRIPTION DOCUOBSERVE END_DOCUOBSERVE DOCUINITIAL END_DOCUINITIAL EQ_FILE #include "fun_head.h" MODELBEGIN EQUATION("Status") /* Determine the status of this agent */ v[0]=VS(p->up, "ProbAction"); if(RND>v[0]) v[1]=VL("Status",1); //don’t change else {//do change, if you want v[2]=VL("NRich",1); v[3]=VL("NRich0",1); v[4]=VL("NRich1",1); v[5]=VL("NPoor",1); v[6]=VL("NPoor0",1); v[7]=VL("NPoor1",1); //collect data v[10]=V("Type"); //type of the agent if(v[10]==0) {//type RICH v[8]=(v[3]-v[4])/v[2]; //share of rich having 0 v[9]=(v[6]-v[7])/v[5]; //share of poor having 0 } else {//type POOR v[8]=v[3]; //number of rich having 0 v[9]=v[4]; //number of rich having 1 } if(v[8]>v[9]) v[1]=0; else v[1]=1; if(v[8]==v[9]) //in a tie, choose randomly { if(RND<0.5) v[1]=0; else v[1]=1; } } RESULT( v[1] ) EQUATION("NRich") /* Number of rich people */ v[0]=0; CYCLE(cur, "Agent") { v[2]=VS(cur,"Type"); v[3]=VS(cur,"Status"); if(v[2]==0) //if it is a rich agent v[0]++; } RESULT( v[0] ) EQUATION("NRich0") /* Number of rich people with status 0 */ v[0]=0; CYCLE(cur, "Agent") { v[2]=VS(cur,"Type"); v[3]=VS(cur,"Status"); if(v[2]==0 && v[3]==0) //if it is a rich agent and the status is 0 v[0]++; } RESULT( v[0] ) EQUATION("NRich1") /* Number of rich people with status 1 */ v[0]=0; CYCLE(cur, "Agent") { v[2]=VS(cur,"Type"); v[3]=VS(cur,"Status"); if(v[2]==0 && v[3]==1) //if it is a rich agent and the status is 1 v[0]++; } RESULT( v[0] ) EQUATION("NPoor") /* Number of poor people */ v[0]=0; CYCLE(cur, "Agent") { v[2]=VS(cur,"Type"); v[3]=VS(cur,"Status"); if(v[2]==1) //if it is a poor agent v[0]++; } RESULT( v[0] ) EQUATION("NPoor0") /* Number of poor people with status 0 */ v[0]=0; CYCLE(cur, "Agent") { v[2]=VS(cur,"Type"); v[3]=VS(cur,"Status"); if(v[2]==1 && v[3]==0) //if it is a poor agent and the status is 0 v[0]++; } RESULT( v[0] ) EQUATION("NPoor1") /* Number of poor people with status 1 */ v[0]=0; CYCLE(cur, "Agent") { v[2]=VS(cur,"Type"); v[3]=VS(cur,"Status"); if(v[2]==1 && v[3]==1) //if it is a poor agent and the status is 1 v[0]++; } RESULT( v[0] ) EQUATION("Share0") /* Share of agents with status 0 */ v[0]=V("NRich0"); v[1]=V("NRich"); v[3]=V("NPoor0"); v[4]=V("NPoor"); RESULT((v[0]+v[3])/(v[1]+v[4]) ) EQUATION("Share1") /* Share of agents with status 1 */ v[0]=V("NRich1"); v[1]=V("NRich"); v[3]=V("NPoor1"); v[4]=V("NPoor"); RESULT((v[0]+v[3])/(v[1]+v[4]) ) MODELEND void close_sim(void) { } END_EQ_FILE