The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Oracle's Java site.
powered by NetLogo
view/download model file: aiesec_flows.nlogo
AIESEC is an international non-profit organization that provides services for university students and most of all offer internships in an international playground. The following project focuses on the analysis of the internship system and the migration flows, generated by individuals who want to find an internship abroad. These flows will be based on the combination of both endogenous characteristics of the agents and exogenous variables of the countries in which the AIESEC offices are based. Moreover the study will be extended to the expansion of the offices represented by their increased or reduced capacity of providing available positions, depending on their own efficiency and the results reached
The first step of our program is representing the AIESEC advertising campaign, during which the organization will try to convince people to apply for the internships offered, the rate of success will be set by the user through a slider on the interface. An additional task of the offices is generating available positions. Indeed, each division will provide a number of available places for individuals coming from each block of origin, these values will have to be set by the user.
The second step lies in the feedback influence. Indeed, a percentage of the workers at the end of the internship will provide its own feedback about the country in which it has done the experience and this will modify the preferences on that particular country of the new applying agents. This interaction of individuals who have already left and new potentially applying will condition the decision of each candidate about his or her destination. On the basis of this new modified endogenous variable, the candidates will go to the local AIESEC office and apply for an internship and the reiteration of this process will represent the migration flows.
Through the slider “population” the user decides the amount of the overall population.
The world is divided into four blocks.The inputs “europa”, “america” and “asia” set how many individuals will be born in each of the blocks. The monitor “asia” refers the percentage of people born in the asian block. The sum of this 4 objects has to be 1 and the monitor asia is automatically set to asjust the sum to 1, but still this inputs have to be set with numbers between 0 and 1.
Through the slider applying rate, the user decides which percentage of the population will decide to apply for an internship abroad.
Through the slider feedback the user can decide which percentage of the individuals who have been doing the internship will come back and provide their feedback.
The inputs on the left side of the interface are the number of available positions on each block for iinterns coming from each of the blocks.
eaf_places= places for Europeans in Africa
uaf_places= places for Americans in Africa
caf_places= places for Asians in Africa
cusa_places= places for Asians in America
eusa_places= places for Europeans in America
ausa_places= places for African in America
eas_places= places for Europeans in Asia
uas_places= places for Americans in Asia
aas_places= places for Africans in Asia
aeu_places= places for Africans in Europe
ueu_places= places for Americans in Europe
ceu_places= places for Asians in Europe
Moreover on the interface there are three figures. The past destinations graph shows the number of interns working in each of the four blocks.The quality rate graph shows the trend of the evolution of the variable quality with reference to each of the four blocks.
The happiness graph shows the sum of the happiness of the individuals who wanted to do an internship for each of the four blocks.
To make it clearer for the user to see the migration flows, first the AIESEC advertising campaign is underlined. Indeed all the individuals convinced by the organization to apply for an internship set color white. Secondly, the candidates will move to the respective office and look for a job abroad. If they find an available position they move to the block in which they have found a job and they set as color the one of their belonging country, in this way is easier to understand where do the people doing an internship somewhere come from. Finally at the moment of providing the feedback, the selected interns come back to their countries and they set the color red and a label in which is written the value of their updated variable quality.
Test 1 Abundance and scarcity of feedbacks: with all the other variables fixed, try to modify the feedback rate. (suggested values to notice the difference: 0, 0.5 and 1).
Test 2 Abundance and scarcity of availble internship positions: with all the other variables fixed, try to modify the overall available positions in order for them to be largerly above or below the number of applying interns.
Test 3 Rate of applying: with all the other variables fixed, try to modify the percentage of applying individuals (suggested values to notice the difference: 0, 0.5 and 1).
Test 4 Unequal distribution of the population: with all the other variables fixed, try to modify the distribution of the population around the world ( interesting the cases where one block is unpopulated, where two blocks are unpopulated, where one block is largerly overcrowded)
Test 5 Unequal distribution of the internship positions: with all the other variables fixed, try to see what happens under an unequal distribution of the available job positions ( interesting cases if only one block has availabl positions, if all the blocks but one offer available positions)
Test 6 Racism: what happens if no block is willing to offer an internship to any intern coming from a specific block.
Interesting features that could be added to this program to make it more realistic are for example the capability of the individuals to communicate between them. Moreover it could be added the capability of offices of making previsions on the future best destinations and also of analyzing the past experiences.
An interesting feature of this model is how the endogenous procedure “feedback” affects the probability, that initially is random, of a candidate to apply in a specific block rather than another.
Minority Model
El Farol Model
globals [ EuropeanBlock AmericanBlock AsianBlock AfricanBlock free_aeu_places free_aas_places free_ausa_places free_ueu_places free_uas_places free_uaf_places free_caf_places free_ceu_places free_cusa_places free_eaf_places free_eusa_places free_eas_places x y z a b c l m n p q r asiarate americarate europerate africarate qualityinEurope qualityinAmerica qualityinAfrica qualityinAsia africans_back europeans_back americans_back asians_back Internspastdestination1 Internspastdestination2 Internspastdestination3 Internspastdestination4 happinessafrica happinesseurope happinessamerica happinessasia happyrateafrica happyrateeurope happyrateamerica happyrateasia americanscontacted asianscontacted africanscontacted europeanscontacted] breed [ europeans european ] breed [ africans african ] breed [ asians asian ] breed [ americans american] breed [ offices office] offices-own [ name ] turtles-own [ convinced destination stage quality pastdestination ] to setup clear-all reset-ticks create-offices 4 ask offices [ set shape "house" ] ask office 0 [ set name "officeurope" set xcor 15 set ycor 15 ] ask office 1 [ set name "officeafrica" set xcor 15 set ycor -15 ] ask office 2 [ set name "officeamerica" set xcor -15 set ycor 15 ] ask office 3 [ set name "officeasia" set xcor -15 set ycor -15 ] generate world distribute ask turtles [ set color black ] ask offices [set color red] set x 30 set y 30 set z 30 set a 30 set b 30 set c 30 set l 30 set m 30 set n 30 set p 30 set q 30 set r 30 set europerate 1 set africarate 1 set asiarate 1 set americarate 1 end to generate ; according to the inputs on the interface let asia 1 - (europa + africa + america) create-europeans population * europa create-africans population * africa create-americans population * america create-asians population * asia ask europeans [ set shape "person"] ask africans [ set shape "person"] ask americans [ set shape "person"] ask asians [ set shape "person"] end to world ; divide the world into 4 blocks set EuropeanBlock patches with [pxcor >= 0 and pycor > 0 ] ask EuropeanBlock [ set pcolor green ] set AfricanBlock patches with [ pxcor >= 0 and pycor <= 0 ] ask AfricanBlock [ set pcolor brown ] set AmericanBlock patches with [ pxcor < 0 and pycor > 0 ] ask AmericanBlock [ set pcolor cyan] set AsianBlock patches with [ pxcor < 0 and pycor <= 0 ] ask AsianBlock [ set pcolor yellow ] end to distribute ; distribute the population in the blocks ask europeans [ move-to one-of EuropeanBlock] ask africans [ move-to one-of AfricanBlock ] ask asians [ move-to one-of AsianBlock ] ask americans [ move-to one-of AmericanBlock ] end to contact ; AIESEC offices convince a certain percentage of population, given by a slider on the interface to apply set europeanscontacted round ( applying * count europeans) set africanscontacted round ( applying * count africans) set asianscontacted round ( applying * count asians) set americanscontacted round ( applying * count americans) ask n-of europeanscontacted europeans [ set label "" set convinced 1 set quality 100] ask n-of africanscontacted africans [ set label "" set convinced 1 set quality 100] ask n-of asianscontacted asians [ set label "" set convinced 1 set quality 100] ask n-of americanscontacted americans [ set label "" set convinced 1 set quality 100] ask turtles [ if ( convinced = 1) [ set color white ] ] end to internship ;This is the endogenous part of our program, since according to the feedback rate, ;the population changes its endogenous preferences about the destination contact wait 0.5 let Eu ( x * africarate + y * americarate + z * asiarate ) let Af ( a * europerate + b * americarate + c * asiarate ) let Am ( l * europerate + m * asiarate + n * africarate ) let As ( p * europerate + q * americarate + r * africarate ) ; First we move the applying interns to their local office ; Secondly they take their decision according to the evolution of the preferences ask europeans [ if (convinced = 1 ) [ move-to office 0 set color green ] ] ask europeans with [convinced = 1] [ set destination random-float Eu abroad_e] ask africans [ if (convinced = 1 ) [ move-to office 1 set color brown ] ] ask africans with [convinced = 1] [ set destination random-float Af abroad_a] ask americans [ if (convinced = 1 ) [ move-to office 2 set color cyan ] ] ask americans with [convinced = 1] [ set destination random-float Am abroad_u] ask asians [ if (convinced = 1 ) [ move-to office 3 set color yellow ] ] ask asians with [convinced = 1] [ set destination random-float As abroad_c] end to abroad_e if (destination <= x * africarate ) [move-to office 1] if (destination >= ( x * africarate + y * Americarate ) ) [move-to office 3] if (destination > x * africarate and destination < ( x * africarate + y * Americarate ) ) [move-to office 2] end to abroad_a if (destination <= a * Europerate ) [move-to office 0] if (destination >= ( a * Europerate + b * Americarate ) ) [move-to office 1] if (destination > a * Europerate and destination < ( a * Europerate + b * Americarate ) ) [move-to office 2] end to abroad_u if (destination <= l * europerate ) [move-to office 0] if (destination >= ( l * europerate + m * Asiarate ) ) [move-to office 1] if (destination > l * europerate and destination < ( l * europerate + m * asiarate ) ) [move-to office 3] end to abroad_c if (destination <= p * Europerate ) [move-to office 0] if (destination >= ( p * Europerate + q * Americarate ) ) [move-to office 1] if (destination > p * Europerate and destination < ( p * Europerate + q * Americarate ) ) [move-to office 2] end to select ; In this section the interns that did not find a free position in their first preference ; try to find another available position in another destination ;AfricanBlock: free places in Africa after the first selection let europeans_in_africa count europeans with [convinced = 1 and destination <= x * africarate ] if (europeans_in_africa > eaf_places) [ ask n-of eaf_places europeans with [convinced = 1 and destination <= x * africarate ] [ move-to one-of AfricanBlock set pastdestination 2 set happinesseurope happinesseurope + 2 set stage 1 set free_eaf_places 0 ] ] if (europeans_in_africa <= eaf_places ) [ ask n-of europeans_in_africa europeans with [convinced = 1 and destination <= x * africarate ] [ move-to one-of AfricanBlock set pastdestination 2 set stage 1 set happinesseurope happinesseurope + 2 set free_eaf_places eaf_places - europeans_in_africa ]] let americans_in_africa count americans with [ convinced = 1 and destination >= ( l * europerate + m * asiarate ) ] if (americans_in_africa > uaf_places) [ ask n-of uaf_places americans with [convinced = 1 and destination >= ( l * europerate + m * asiarate ) ] [ move-to one-of AfricanBlock set pastdestination 2 set happinessamerica happinessamerica + 2 set stage 1 set free_uaf_places 0 ] ] if (americans_in_africa <= uaf_places ) [ ask n-of americans_in_africa americans with [convinced = 1 and destination >= ( l * europerate + m * asiarate )][ move-to one-of AfricanBlock set pastdestination 2 set happinessamerica happinessamerica + 2 set stage 1 set free_uaf_places uaf_places - americans_in_africa ]] let asians_in_africa count asians with [convinced = 1 and destination >= ( p * Europerate + q * americarate )] if (asians_in_africa > caf_places )[ ask n-of caf_places asians with [ convinced = 1 and destination >= ( p * Europerate + q * americarate ) ] [ move-to one-of AfricanBlock set pastdestination 2 set happinessasia happinessasia + 2 set stage 1 set free_caf_places 0 ] ] if (asians_in_africa <= caf_places) [ ask n-of asians_in_africa asians with [ convinced = 1 and destination >= ( p * Europerate + q * americarate ) ] [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set happinessasia happinessasia + 2 set free_caf_places caf_places - asians_in_africa]] wait 0.5 ;EuropeanBlock let africans_in_europe count africans with [convinced = 1 and destination <= a * europerate] if (africans_in_europe > aeu_places)[ ask n-of aeu_places africans with [convinced = 1 and destination <= a * europerate ] [move-to one-of EuropeanBlock set pastdestination 1 set happinessafrica happinessafrica + 2 set stage 1 set free_aeu_places 0 ] ] if (africans_in_europe <= aeu_places)[ask n-of africans_in_europe africans with [convinced = 1 and destination <= a * europerate ] [ move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set happinessafrica happinessafrica + 2 set free_aeu_places aeu_places - africans_in_europe ]] let americans_in_europe count americans with [ convinced = 1 and destination <= l * europerate ] if (americans_in_europe > ueu_places)[ ask n-of ueu_places americans with [convinced = 1 and destination <= l * europerate ] [ move-to one-of EuropeanBlock set pastdestination 1 set happinessamerica happinessamerica + 2 set stage 1 set free_ueu_places 0 ] ] if (americans_in_europe <= ueu_places) [ ask n-of americans_in_europe americans with [convinced = 1 and destination <= l * europerate ] [ move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set happinessamerica happinessamerica + 2 set free_ueu_places ueu_places - americans_in_europe]] let asians_in_europe count asians with [convinced = 1 and destination <= p * europerate ] if (asians_in_europe > ceu_places)[ ask n-of ceu_places asians with [convinced = 1 and destination <= p * europerate ] [ move-to one-of EuropeanBlock set pastdestination 1 set happinessasia happinessasia + 2 set stage 1 set free_ceu_places 0 ] ] if (asians_in_europe <= ceu_places) [ ask n-of asians_in_europe asians with [convinced = 1 and destination <= p * europerate ] [ move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set happinessasia happinessasia + 2 set free_ceu_places ceu_places - asians_in_europe]] wait 0.5 ;AmericanBlock let europeans_in_america count europeans with [convinced = 1 and stage != 1 and destination > x * africarate and destination < ( x * africarate + y * americarate )] if (europeans_in_america > eusa_places )[ ask n-of eusa_places europeans with [ convinced = 1 and stage != 1 and destination > x * africarate and destination < ( x * africarate + y * americarate )] [ move-to one-of AmericanBlock set pastdestination 3 set happinesseurope happinesseurope + 2 set stage 1 set free_eusa_places 0 ] ] if (europeans_in_america <= eusa_places )[ ask n-of europeans_in_america europeans with [convinced = 1 and stage != 1 and destination > x * africarate and destination < ( x * africarate + y * americarate )] [ move-to one-of AmericanBlock set pastdestination 3 set stage 1 set happinesseurope happinesseurope + 2 set free_eusa_places eusa_places - europeans_in_america]] let africans_in_america count africans with [convinced = 1 and destination > a * europerate and destination < ( a * europerate + b * americarate )] if (africans_in_america > ausa_places )[ ask n-of ausa_places africans with [ convinced = 1 and destination > a * europerate and destination < ( a * europerate + b * americarate )] [ move-to one-of AmericanBlock set pastdestination 3 set happinessafrica happinessafrica + 2 set stage 1 set free_ausa_places 0 ] ] if (africans_in_america <= ausa_places)[ ask n-of africans_in_america africans with [ convinced = 1 and destination > a * europerate and destination < ( a * europerate + b * americarate ) ] [ move-to one-of AmericanBlock set pastdestination 3 set stage 1 set happinessafrica happinessafrica + 2 set free_ausa_places ausa_places - africans_in_america]] let asians_in_america count asians with [convinced = 1 and destination > p * europerate and destination < ( p * europerate + q * americarate )] if (asians_in_america > cusa_places )[ ask n-of cusa_places asians with [convinced = 1 and destination > p * europerate and destination < ( p * europerate + q * americarate )] [ move-to one-of AmericanBlock set pastdestination 3 set happinessasia happinessasia + 2 set stage 1 set free_cusa_places 0 ] ] if (asians_in_america <= cusa_places)[ ask n-of asians_in_america asians with [ convinced = 1 and destination > p * europerate and destination < ( p * europerate + q * americarate ) ] [ move-to one-of AmericanBlock set pastdestination 3 set happinessasia happinessasia + 2 set stage 1 set free_cusa_places cusa_places - asians_in_america ]] wait 0.5 ;AsianBlock let europeans_in_asia count europeans with [ convinced = 1 and destination >= (x * africarate + y * americarate )] if (europeans_in_asia > eas_places)[ ask n-of eas_places europeans with [convinced = 1 and destination >= (x * africarate + y * americarate ) ] [ move-to one-of AsianBlock set pastdestination 4 set happinesseurope happinesseurope + 2 set stage 1 set free_eas_places 0 ]] if (europeans_in_asia <= eas_places)[ ask n-of europeans_in_asia europeans with [ convinced = 1 and destination >= (x * africarate + y * americarate ) ] [ move-to one-of AsianBlock set pastdestination 4 set stage 1 set happinesseurope happinesseurope + 2 set free_eas_places eas_places - europeans_in_asia]] let africans_in_asia count africans with [convinced = 1 and destination >= ( a * europerate + b * americarate )] if (africans_in_asia > aas_places)[ ask n-of aas_places africans with [convinced = 1 and destination >= ( a * europerate + b * americarate ) ] [ move-to one-of AsianBlock set pastdestination 4 set happinessafrica happinessafrica + 2 set stage 1 set free_aas_places 0 ]] if (africans_in_asia <= aas_places)[ ask n-of africans_in_asia africans with [ convinced = 1 and destination >= ( a * europerate + b * americarate ) ] [ move-to one-of AsianBlock set pastdestination 4 set happinessafrica happinessafrica + 2 set stage 1 set free_aas_places aas_places - africans_in_asia]] let americans_in_asia count americans with [convinced = 1 and destination > l * europerate and destination < ( l * europerate + m * asiarate )] if (americans_in_asia > uas_places)[ ask n-of uas_places americans with [ convinced = 1 and destination > l * europerate and destination < ( l * europerate + m * asiarate )] [ move-to one-of AsianBlock set pastdestination 4 set happinessamerica happinessamerica + 2 set stage 1 set free_uas_places 0 ]] if (americans_in_asia <= uas_places)[ ask n-of americans_in_asia americans with [convinced = 1 and destination > l * europerate and destination < ( l * europerate + m * asiarate ) ] [ move-to one-of AsianBlock set pastdestination 4 set happinessamerica happinessamerica + 2 set stage 1 set free_uas_places uas_places - americans_in_asia]] wait 0.5 return-home look-for-another-place ask europeans with [stage != 1] [die] ask africans with [stage != 1] [die] ask asians with [stage != 1] [die] ask americans with [stage != 1] [die] set Internspastdestination1 count turtles with [ pastdestination = 1] set Internspastdestination2 count turtles with [ pastdestination = 2] set Internspastdestination3 count turtles with [ pastdestination = 3] set Internspastdestination4 count turtles with [ pastdestination = 4] ; we select a percentage of population that comes back to its origin and provides a feedback let europeansfeedback round ( feedback-rate * count europeans) ask n-of europeansfeedback europeans [ move-to one-of EuropeanBlock set color red] ask europeans with [color = green ] [die] let americansfeedback round ( feedback-rate * count americans) ask n-of americansfeedback americans [ move-to one-of AmericanBlock set color red] ask americans with [color = cyan ] [die] let asiansfeedback round ( feedback-rate * count asians) ask n-of asiansfeedback asians [ move-to one-of AsianBlock set color red] ask asians with [color = yellow ] [die] let africansfeedback round ( feedback-rate * count africans) ask n-of africansfeedback africans [ move-to one-of AfricanBlock set color red] ask africans with [color = brown ] [die] wait 0.5 generate distribute ask turtles with [ convinced = 0 and stage != 1 ][set color black] ask offices [set color red] feedback elfarol ifelse africanscontacted != 0 [set happyrateafrica happinessafrica / africanscontacted] [ set happyrateafrica 1] ifelse europeanscontacted != 0 [set happyrateeurope happinesseurope / europeanscontacted] [ set happyrateeurope 1] ifelse asianscontacted != 0 [set happyrateasia happinessasia / asianscontacted] [ set happyrateasia 1] ifelse americanscontacted != 0 [ set happyrateamerica happinessamerica / americanscontacted] [ set happyrateamerica 1] end to return-home ask europeans with [convinced = 1 and stage != 1] [move-to office 0] ask africans with [convinced = 1 and stage != 1] [move-to office 1] ask americans with [convinced = 1 and stage != 1] [move-to office 2] ask asians with [convinced = 1 and stage != 1] [move-to office 3] end to look-for-another-place ;african people and free places set africans_back count africans with [convinced = 1 and stage != 1] let available_placesAF (free_aas_places + free_aeu_places + free_ausa_places) ask africans with [convinced = 1 and stage != 1] [ ; if (free_aeu_places != 0 and free_aas_places != 0 and free_ausa_places != 0) [ set destination random int ( a * Europerate + b * americarate + c * asiarate ) retry-abroadA4] if (free_aeu_places != 0 and free_aas_places != 0 and free_ausa_places = 0 ) [ set destination random-float ( a * europerate + c * asiarate ) retry-abroadA1] if (free_aeu_places != 0 and free_aas_places = 0 and free_ausa_places != 0) [ set destination random-float ( a * europerate + b * americarate ) retry-abroadA2] if (free_aeu_places = 0 and free_aas_places != 0 and free_ausa_places != 0) [ set destination random-float ( b * americarate + c * asiarate ) retry-abroadA3] if (free_aeu_places = 0 and free_aas_places = 0 and free_ausa_places != 0 ) [move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_ausa_places free_ausa_places - 1 set happinessafrica happinessafrica + 1] if (free_aeu_places = 0 and free_aas_places != 0 and free_ausa_places = 0 ) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_aas_places free_aas_places - 1 set happinessafrica happinessafrica + 1] if (free_aeu_places != 0 and free_aas_places = 0 and free_ausa_places = 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_aeu_places free_aeu_places - 1 set happinessafrica happinessafrica + 1]] if (free_aeu_places = 0 and free_aas_places = 0 and free_ausa_places = 0) [ask africans with [convinced = 1 and stage != 1][set happinessafrica happinessafrica - 1 die]] ;american people and free places set americans_back count americans with [convinced = 1 and stage != 1] let available_placesAM (free_uas_places + free_ueu_places + free_uaf_places) ask americans with [convinced = 1 and stage != 1][ ;if (free_ueu_places != 0 and free_uas_places != 0 and free_uaf_places != 0) [ set destination random int ( l * europerate + m * asiarate + n * africarate ) retry-abroadA4AM] if (free_ueu_places != 0 and free_uas_places = 0 and free_uaf_places != 0) [ set destination random-float ( l * europerate + n * africarate ) retry-abroadA2AM] if (free_ueu_places = 0 and free_uas_places != 0 and free_uaf_places != 0) [ set destination random-float ( m * asiarate + n * africarate ) retry-abroadA3AM] if (free_ueu_places != 0 and free_uas_places != 0 and free_uaf_places = 0 ) [ set destination random-float ( l * europerate + m * asiarate ) retry-abroadA1AM] if (free_ueu_places != 0 and free_uas_places = 0 and free_uaf_places = 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_ueu_places free_ueu_places - 1 set happinessamerica happinessamerica + 1] if (free_ueu_places = 0 and free_uas_places != 0 and free_uaf_places = 0 ) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_uas_places free_uas_places - 1 set happinessamerica happinessamerica + 1] if (free_ueu_places = 0 and free_uas_places = 0 and free_uaf_places != 0 )[move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_uaf_places free_uaf_places - 1 set happinessamerica happinessamerica + 1]] if (free_ueu_places = 0 and free_uas_places = 0 and free_uaf_places = 0) [ask americans with [convinced = 1 and stage != 1][set happinessamerica happinessamerica - 1 die]] ; asian people and free places set asians_back count asians with [convinced = 1 and stage != 1] let available_placesAS (free_cusa_places + free_ceu_places + free_caf_places) ask asians with [ convinced = 1 and stage != 1][ ;if (free_ceu_places > 0 and free_cusa_places > 0 and free_caf_places > 0) [ set destination random int ( p * europerate + q * americarate + r * africarate ) retry-abroadA4AS] if (free_ceu_places != 0 and free_cusa_places != 0 and free_caf_places = 0 ) [ set destination random-float ( p * europerate + q * americarate ) retry-abroadA1AS] if (free_ceu_places != 0 and free_cusa_places = 0 and free_caf_places != 0 ) [ set destination random-float ( p * europerate + r * africarate ) retry-abroadA2AS] if (free_ceu_places = 0 and free_cusa_places != 0 and free_caf_places != 0) [ set destination random-float ( q * americarate + r * africarate ) retry-abroadA3AS] if (free_ceu_places != 0 and free_cusa_places = 0 and free_caf_places = 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_ceu_places free_ceu_places - 1 set happinessasia happinessasia + 1 ] if (free_ceu_places = 0 and free_cusa_places != 0 and free_caf_places = 0 ) [move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_cusa_places free_cusa_places - 1 set happinessasia happinessasia + 1 ] if (free_ceu_places = 0 and free_cusa_places = 0 and free_caf_places != 0) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_caf_places free_caf_places - 1 set happinessasia happinessasia + 1 ] ] if (free_ceu_places = 0 and free_cusa_places = 0 and free_caf_places = 0) [ask asians with [convinced = 1 and stage != 1][set happinessasia happinessasia - 1 die]] ; european people and free places set europeans_back count europeans with [convinced = 1 and stage != 1] let available_placesEU (free_eas_places + free_eusa_places + free_eaf_places) ask europeans with [convinced = 1 and stage != 1][ ;if (free_eas_places > 0 and free_eusa_places > 0 and free_eaf_places > 0) [ set destination random int ( x * africarate + y * americarate + z * asiarate ) retry-abroadA4EU] if (free_eas_places != 0 and free_eusa_places != 0 and free_eaf_places = 0 )[ set destination random-float ( y * americarate + z * asiarate ) retry-abroadA1EU] if (free_eas_places > 0 and free_eusa_places = 0 and free_eaf_places > 0) [ set destination random-float ( x * africarate + y * americarate ) retry-abroadA2EU] if (free_eas_places = 0 and free_eusa_places > 0 and free_eaf_places > 0) [ set destination random-float ( x * africarate + z * asiarate ) retry-abroadA3EU] if (free_eas_places != 0 and free_eusa_places = 0 and free_eaf_places = 0) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_eas_places free_eas_places - 1 set happinesseurope happinesseurope + 1] if (free_eas_places = 0 and free_eusa_places != 0 and free_eaf_places = 0)[move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_eusa_places free_eusa_places - 1 set happinesseurope happinesseurope + 1] if (free_eas_places = 0 and free_eusa_places = 0 and free_eaf_places != 0) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_eaf_places free_eaf_places - 1 set happinesseurope happinesseurope + 1]] if (free_eas_places = 0 and free_eusa_places = 0 and free_eaf_places = 0) [ask europeans with [convinced = 1 and stage != 1][set happinesseurope happinesseurope - 1 die]] end ;retry-abroad africa to retry-abroadA1 ;set africans_back count africans with [convinced = 1 and stage != 1] if (destination <= a * europerate and free_aeu_places > 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_aeu_places free_aeu_places - 1 set happinessafrica happinessafrica + 1 ] if (destination > a * europerate and free_aas_places > 0) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_aas_places free_aas_places - 1 set happinessafrica happinessafrica + 1 ] end to retry-abroadA2 ; set africans_back count africans with [convinced = 1 and stage != 1] if (destination <= a * europerate and free_aeu_places > 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_aeu_places free_aeu_places - 1 set happinessafrica happinessafrica + 1] if (destination > a * europerate and free_ausa_places > 0 ) [move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_ausa_places free_ausa_places - 1 set happinessafrica happinessafrica + 1 ] end to retry-abroadA3 ; set africans_back count africans with [convinced = 1 and stage != 1] if (destination <= b * americarate and free_ausa_places > 0 )[move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_ausa_places free_ausa_places - 1 set happinessafrica happinessafrica + 1] if (destination > b * americarate and free_aas_places > 0 ) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_aas_places free_aas_places - 1 set happinessafrica happinessafrica + 1 ] end ; retry-abroad america to retry-abroadA1AM ; set americans_back count americans with [convinced = 1 and stage != 1] if (destination <= l * europerate and free_ueu_places > 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_ueu_places free_ueu_places - 1 set happinessamerica happinessamerica + 1] if (destination > l * europerate and free_uas_places > 0 ) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_uas_places free_uas_places - 1 set happinessamerica happinessamerica + 1] end to retry-abroadA2AM ;set americans_back count americans with [convinced = 1 and stage != 1] if (destination <= l * europerate and free_ueu_places > 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_ueu_places free_ueu_places - 1 set happinessamerica happinessamerica + 1 ] if (destination > l * europerate and free_uaf_places > 0 ) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_uaf_places free_uaf_places - 1 set happinessamerica happinessamerica + 1] end to retry-abroadA3AM ;set americans_back count americans with [convinced = 1 and stage != 1] if (destination <= m * asiarate and free_uas_places > 0 ) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_uas_places free_uas_places - 1 set happinessamerica happinessamerica + 1] if (destination > m * asiarate and free_uaf_places > 0 ) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_uaf_places free_uaf_places - 1 set happinessamerica happinessamerica + 1] end ; retry-abroad asia to retry-abroadA1AS ;set asians_back count asians with [convinced = 1 and stage != 1] if (destination <= p * europerate and free_ceu_places > 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_ceu_places free_ceu_places - 1 set happinessasia happinessasia + 1] if (destination > p * europerate and free_cusa_places > 0 ) [move-to one-of AmericanBlock set pastdestination 3 set stage 1 set stage 1 set free_cusa_places free_cusa_places - 1 set happinessasia happinessasia + 1] end to retry-abroadA2AS ;set asians_back count asians with [convinced = 1 and stage != 1] if (destination <= p * europerate and free_ceu_places > 0 ) [move-to one-of EuropeanBlock set pastdestination 1 set stage 1 set free_ceu_places free_ceu_places - 1 set happinessasia happinessasia + 1 ] if (destination > p * europerate and free_caf_places > 0 ) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_caf_places free_caf_places - 1 set happinessasia happinessasia + 1] end to retry-abroadA3AS ;set asians_back count asians with [convinced = 1 and stage != 1] if (destination <= q * americarate and free_caf_places > 0 ) [move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_caf_places free_caf_places - 1 set happinessasia happinessasia + 1] if (destination > q * americarate and free_cusa_places > 0 ) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set stage 1 set free_cusa_places free_cusa_places - 1 set happinessasia happinessasia + 1] end ; retry-abroad europe to retry-abroadA1EU ;set europeans_back count europeans with [convinced = 1 and stage != 1] if (destination <= y * americarate and free_eusa_places > 0 ) [move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_eusa_places free_eusa_places - 1 set happinesseurope happinesseurope + 1] if (destination > y * americarate and free_eas_places > 0 ) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_eas_places free_eas_places - 1 set happinesseurope happinesseurope + 1] end to retry-abroadA2EU ;set europeans_back count europeans with [convinced = 1 and stage != 1] if (destination <= x * africarate and free_eaf_places > 0 ) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_eaf_places free_eaf_places - 1 set happinesseurope happinesseurope + 1] if (destination > x * asiarate and free_eas_places > 0 ) [move-to one-of AsianBlock set pastdestination 4 set stage 1 set free_eas_places free_eas_places - 1 set happinesseurope happinesseurope + 1] end to retry-abroadA3EU ;set europeans_back count europeans with [convinced = 1 and stage != 1] if (destination <= x * africarate and free_eaf_places > 0 ) [move-to one-of AfricanBlock set pastdestination 2 set stage 1 set free_eaf_places free_eaf_places - 1 set happinesseurope happinesseurope + 1] if (destination > x * africarate and free_eusa_places > 0 ) [move-to one-of AmericanBlock set pastdestination 3 set stage 1 set free_eusa_places free_eusa_places - 1 set happinesseurope happinesseurope + 1] end to feedback ; we randomly modify the variable " quality" in a range of 40 around 100 ask turtles with [ pastdestination != 0 and stage = 1 ][ ifelse random-float 1 > 0.5 [set quality quality + random -40] [set quality quality + random 40] ] ask turtles with [ pastdestination != 0 ] [ set label quality set label-color white ] ;; Europe quality ;; we sum the quality of the interns that have been in Europe set qualityinEurope sum [quality] of asians with [ pastdestination = 1 ] + sum [quality] of americans with [ pastdestination = 1 ] + sum [quality] of africans with [ pastdestination = 1 ] ;; America quality set qualityinAmerica sum [quality] of asians with [ pastdestination = 3 ] + sum [quality] of europeans with [ pastdestination = 3 ] + sum [quality] of africans with [ pastdestination = 3 ] ;; Africa quality set qualityinAfrica sum [quality] of asians with [ pastdestination = 2 ] + sum [quality] of americans with [ pastdestination = 2 ] + sum [quality] of Europeans with [ pastdestination = 2 ] ;; Asia quality set qualityinAsia sum [quality] of europeans with [ pastdestination = 4 ] + sum [quality] of americans with [ pastdestination = 4 ] + sum [quality] of africans with [ pastdestination = 4 ] ;;;;; Is just the sum of the quality after the internship in each country ;; According to the feedback rate ;; How many interns have been in europe? let pastpersoninEurope count asians with [ pastdestination = 1 ] + count americans with [ pastdestination = 1 ] + count africans with [ pastdestination = 1 ] ;; How many interns have been in america? let pastpersoninAmerica count asians with [ pastdestination = 3 ] + count europeans with [ pastdestination = 3 ] + count africans with [ pastdestination = 3 ] ;; How many interns have been in asia? let pastpersoninAsia count europeans with [ pastdestination = 4 ] + count americans with [ pastdestination = 4 ] + count africans with [ pastdestination = 4 ] ;; How many interns have been in africa? let pastpersoninAfrica count asians with [ pastdestination = 2 ] + count americans with [ pastdestination = 2 ] + count europeans with [ pastdestination = 2 ] ;; qualityrate is the rate calculated with: quality in america for the past generation that made the internship / sum of the standard quality before of the internship ;; As example Europebase is 300 if in the past only 3 person did the internship in Europe, according to the fact that when the people leave their country their expectation is the mean 100 ifelse pastpersoninEurope != 0 [ let Europebase pastpersoninEurope * 100 set Europerate qualityinEurope / Europebase ] [ set Europerate 1 ] ;; we set up this ifelse because is possible that no one has done an internship in a particular country when we decrease the number of places and/or the population or if the feedback rate is really low! ifelse pastpersoninAmerica != 0 [ let Americabase pastpersoninAmerica * 100 set Americarate qualityinAmerica / Americabase ] [ set Americarate 1 ] ifelse pastpersoninAsia != 0 [ let Asiabase pastpersoninAsia * 100 set Asiarate qualityinAsia / Asiabase ] [ set Asiarate 1 ] ifelse pastpersoninAfrica != 0 [ let Africabase pastpersoninAfrica * 100 set Africarate qualityinAfrica / Africabase ] [ set Africarate 1 ] end to elfarol ;; 4 country with places let lostinformation random-float 1 if ( internspastdestination1 != 0 and internspastdestination2 != 0 and internspastdestination3 != 0 and internspastdestination4 != 0 and lostinformation < 0.7 ) [ if (internspastdestination1 > 0.30 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set europerate europerate - 0.05 ] if (internspastdestination2 > 0.30 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set africarate africarate - 0.05 ] if (internspastdestination3 > 0.30 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set americarate americarate - 0.05 ] if (internspastdestination4 > 0.30 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set asiarate asiarate - 0.05 ]] ; 3 country with places if ( internspastdestination1 = 0 or internspastdestination2 = 0 or internspastdestination3 = 0 or internspastdestination4 = 0 and lostinformation < 0.7 ) [ if (internspastdestination1 > 0.40 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set europerate europerate - 0.05 ] if (internspastdestination2 > 0.40 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set africarate africarate - 0.05 ] if (internspastdestination3 > 0.40 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set americarate americarate - 0.05 ] if (internspastdestination4 > 0.40 * ( internspastdestination1 + internspastdestination2 + internspastdestination3 + internspastdestination4 ) ) [set asiarate asiarate - 0.05 ]] end to go ask turtles with [ pastdestination != 0 ] [die] internship select wait 1 tick end