modelo t-types c-types
No preview image
Model was written in NetLogo
5.3.1
•
Viewed 166 times
•
Downloaded 30 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Info tab cannot be displayed because of an encoding error
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
extensions [ ] globals [ a ; parámetro del t-type b ; parámetro de la cantidad de neighbors con el mismo c-type c ; parámetro de la cantidad de neighbors con distinto c-type tt_opciones ] patches-own [ c-type ;; crowding type c-type_old ; crowding type del período anterior t-type ;; taste type total_1 total_2 total_3 total_4 total_5 u_1 u_2 u_3 u_4 u_5 cluster clus dato_cluster ] to setup clear-all set tt_opciones ct_opciones ; para tener la misma cantidad de crowding types y de taste types if ( comport = "Pavloviano" ) [ set a 1 set b 1 set c 1 ] if ( comport = "conformista" ) [ set a 0 set b 0 set c 1 ] if ( comport = "averso_perdida" ) [ set a 1 set b 1 set c 2 ] if ( comport = "exclusivo" ) [ set a 1 set b -1 set c -1 ] ask patches [ set cluster nobody ; para contar los grupos ifelse ( c_type_valor? ) [ ; le damos un porcentaje de agentes con c-type 1 y el resto se divide aleatoriamente ifelse ( random-float 1.000 <= c-type_1 ) [ set c-type 1 ] [ set c-type ( 2 + random ((ct_opciones - 1)))] set t-type 1 + random ( tt_opciones ) ; los taste types se dividen de manera aleatoria recolor-patch ] ; en este caso, el porcentaje de crowding types también se genera de manera aleatoria [ set c-type 1 + random ( ct_opciones ) set t-type 1 + random ( tt_opciones ) recolor-patch ] ] ; en este caso, se setea el modelo para las vecindades de Moore o Von Neumann ask patches [ if ( vecindad = "Moore" ) [ set total_1 count neighbors with [ c-type = 1 ] set total_2 count neighbors with [ c-type = 2 ] set total_3 count neighbors with [ c-type = 3 ] set total_4 count neighbors with [ c-type = 4 ] set total_5 count neighbors with [ c-type = 5 ] ; ahora, para cada individuo se calcula la utilidad de cada c-type ; notar que cuando coincide el t-type con el c-type, es mayor la utilidad set u_1 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 1 ) [ 1 ] [ 0 ] ) + b * ( total_1 / count neighbors ) - c * ( count neighbors with [ c-type != 1 ] / count neighbors ) set u_2 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 2 ) [ 1 ] [ 0 ] ) + b * ( total_2 / count neighbors ) - c * ( count neighbors with [ c-type != 2 ] / count neighbors ) set u_3 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 3 ) [ 1 ] [ 0 ] ) + b * ( total_3 / count neighbors ) - c * ( count neighbors with [ c-type != 3 ] / count neighbors ) set u_4 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 4 ) [ 1 ] [ 0 ] ) + b * ( total_4 / count neighbors ) - c * ( count neighbors with [ c-type != 4 ] / count neighbors ) set u_5 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 5 ) [ 1 ] [ 0 ] ) + b * ( total_5 / count neighbors ) - c * ( count neighbors with [ c-type != 5 ] / count neighbors ) ] if (vecindad = "VN") [ set total_1 count neighbors4 with [ c-type = 1 ] set total_2 count neighbors4 with [ c-type = 2 ] set total_3 count neighbors4 with [ c-type = 3 ] set total_4 count neighbors4 with [ c-type = 4 ] set total_5 count neighbors4 with [ c-type = 5 ] set u_1 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 1 ) [ 1 ] [ 0 ] ) + b * ( total_1 / count neighbors4 ) - c * ( count neighbors with [ c-type != 1 ] / count neighbors4 ) set u_2 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 2 ) [ 1 ] [ 0 ] ) + b * ( total_2 / count neighbors4 ) - c * ( count neighbors with [ c-type != 2 ] / count neighbors4 ) set u_3 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 3 ) [ 1 ] [ 0 ] ) + b * ( total_3 / count neighbors4 ) - c * ( count neighbors with [ c-type != 3 ] / count neighbors4 ) set u_4 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 4 ) [ 1 ] [ 0 ] ) + b * ( total_4 / count neighbors4 ) - c * ( count neighbors with [ c-type != 4 ] / count neighbors4 ) set u_5 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 5 ) [ 1 ] [ 0 ] ) + b * ( total_5 / count neighbors4 ) - c * ( count neighbors with [ c-type != 5 ] / count neighbors4 ) ] ] reset-ticks end to go ; para guardar los valores anteriores ask patches [ set c-type_old c-type set cluster nobody if ( clus > 0 ) [ set dato_cluster clus ] set clus 0 ] ; con las preferencias individuales (t-types) y los c-types ask patches [ set c-type ifelse-value (( u_1 > u_2 ) and (u_1 > u_3) and (u_1 > u_4) and (u_1 > u_5)) [ 1 ][ ifelse-value ((u_2 > u_1) and (u_2 > u_3) and (u_2 > u_4) and (u_2 > u_5)) [ 2 ] [ ifelse-value ((u_3 > u_1) and (u_3 > u_2) and (u_3 > u_4) and (u_3 > u_5))[ 3 ] [ ifelse-value ((u_4 > u_1) and (u_4 > u_2) and (u_4 > u_3) and (u_4 > u_5)) [ 4 ] [ ifelse-value ((u_5 > u_1) and (u_5 > u_2) and (u_5 > u_3) and (u_5 > u_4)) [ 5 ] [ 1 + random ct_opciones ]]]]] recolor-patch ] ; mutaciones (existe una probabilidad que ocurra un cambio en las elecciones del agente) ask patches [ if ( random-float 1.000 <= prob_mut ) [ set c-type 1 + random ct_opciones ] recolor-patch ] ; Para exportar la pantalla o el gráfico ; export-interface (word "frame_23" but-first (word (100 + ticks)) ".png") ; export-plot (word ticks ".png") ; export-interface (word ticks ".png") tick ; ahora se calculan utilidades de cada opción, luego de la elección del producto ask patches [ if ( vecindad = "Moore" ) [ set total_1 count neighbors with [ c-type = 1 ] set total_2 count neighbors with [ c-type = 2 ] set total_3 count neighbors with [ c-type = 3 ] set total_4 count neighbors with [ c-type = 4 ] set total_5 count neighbors with [ c-type = 5 ] set u_1 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 1 ) [ 1 ] [ 0 ] ) + b * ( total_1 / count neighbors ) - c * ( count neighbors with [ c-type != 1 ] / count neighbors ) set u_2 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 2 ) [ 1 ] [ 0 ] ) + b * ( total_2 / count neighbors ) - c * ( count neighbors with [ c-type != 2 ] / count neighbors ) set u_3 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 3 ) [ 1 ] [ 0 ] ) + b * ( total_3 / count neighbors ) - c * ( count neighbors with [ c-type != 3 ] / count neighbors ) set u_4 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 4 ) [ 1 ] [ 0 ] ) + b * ( total_4 / count neighbors ) - c * ( count neighbors with [ c-type != 4 ] / count neighbors ) set u_5 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 5 ) [ 1 ] [ 0 ] ) + b * ( total_5 / count neighbors ) - c * ( count neighbors with [ c-type != 5 ] / count neighbors ) ] if (vecindad = "VN") [ set total_1 count neighbors4 with [ c-type = 1 ] set total_2 count neighbors4 with [ c-type = 2 ] set total_3 count neighbors4 with [ c-type = 3 ] set total_4 count neighbors4 with [ c-type = 4 ] set total_5 count neighbors4 with [ c-type = 5 ] set u_1 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 1 ) [ 1 ] [ 0 ] ) + b * ( total_1 / count neighbors4 ) - c * ( count neighbors with [ c-type != 1 ] / count neighbors4 ) set u_2 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 2 ) [ 1 ] [ 0 ] ) + b * ( total_2 / count neighbors4 ) - c * ( count neighbors with [ c-type != 2 ] / count neighbors4 ) set u_3 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 3 ) [ 1 ] [ 0 ] ) + b * ( total_3 / count neighbors4 ) - c * ( count neighbors with [ c-type != 3 ] / count neighbors4 ) set u_4 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 4 ) [ 1 ] [ 0 ] ) + b * ( total_4 / count neighbors4 ) - c * ( count neighbors with [ c-type != 4 ] / count neighbors4 ) set u_5 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 5 ) [ 1 ] [ 0 ] ) + b * ( total_5 / count neighbors4 ) - c * ( count neighbors with [ c-type != 5 ] / count neighbors4 ) ] ] if (ticks = 1 or ticks = 5 or ticks = 10 or ticks = 15 or ticks = 20 or ticks = 25 or ticks = 30 or ticks = 35 or ticks = 40 or ticks = 45 or ticks = 50 or ticks = 55 or ticks = 60) [ find-clusters ] end to go-global ; este caso sirve para mostrar el desarrollo del modelo cuando los individuos toman en cuenta la información de todos los agentes ; es igual que "GO" pero la vecindad es el conjunto de todos los individuos ask patches [ set total_1 count patches with [ c-type = 1 ] set total_2 count patches with [ c-type = 2 ] set total_3 count patches with [ c-type = 3 ] set total_4 count patches with [ c-type = 4 ] set total_5 count patches with [ c-type = 5 ] set u_1 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 1 ) [ 1 ] [ 0 ] ) + b * ( total_1 / count patches ) - c * ( count patches with [ c-type != 1 ] / count patches ) set u_2 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 2 ) [ 1 ] [ 0 ] ) + b * ( total_2 / count patches ) - c * ( count patches with [ c-type != 2 ] / count patches ) set u_3 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 3 ) [ 1 ] [ 0 ] ) + b * ( total_3 / count patches ) - c * ( count patches with [ c-type != 3 ] / count patches ) set u_4 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 4 ) [ 1 ] [ 0 ] ) + b * ( total_4 / count patches ) - c * ( count patches with [ c-type != 4 ] / count patches ) set u_5 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 5 ) [ 1 ] [ 0 ] ) + b * ( total_5 / count patches ) - c * ( count patches with [ c-type != 5 ] / count patches ) ] ask patches [ set c-type_old c-type ] ask patches [ set c-type ifelse-value (( u_1 > u_2 ) and (u_1 > u_3) and (u_1 > u_4) and (u_1 > u_5)) [ 1 ][ ifelse-value ((u_2 > u_1) and (u_2 > u_3) and (u_2 > u_4) and (u_2 > u_5)) [ 2 ] [ ifelse-value ((u_3 > u_1) and (u_3 > u_2) and (u_3 > u_4) and (u_3 > u_5))[ 3 ] [ ifelse-value ((u_4 > u_1) and (u_4 > u_2) and (u_4 > u_3) and (u_4 > u_5)) [ 4 ] [ ifelse-value ((u_5 > u_1) and (u_5 > u_2) and (u_5 > u_3) and (u_5 > u_4)) [ 5 ] [ 1 + random ct_opciones ]]]]] recolor-patch ] ; mutaciones ask patches [ if ( random-float 1.000 <= prob_mut ) [ set c-type 1 + random ct_opciones ] recolor-patch ] ; Para exportar la pantalla ; export-interface (word "frame_2" but-first (word (100000 + ticks)) ".png") ; export-plot (word ticks ".png") tick ; export-interface (word ticks ".png") ask patches [ set total_1 count patches with [ c-type = 1 ] set total_2 count patches with [ c-type = 2 ] set total_3 count patches with [ c-type = 3 ] set total_4 count patches with [ c-type = 4 ] set total_5 count patches with [ c-type = 5 ] set u_1 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 1 ) [ 1 ] [ 0 ] ) + b * ( total_1 / count patches ) - c * ( count patches with [ c-type != 1 ] / count patches ) set u_2 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 2 ) [ 1 ] [ 0 ] ) + b * ( total_2 / count patches ) - c * ( count patches with [ c-type != 2 ] / count patches ) set u_3 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 3 ) [ 1 ] [ 0 ] ) + b * ( total_3 / count patches ) - c * ( count patches with [ c-type != 3 ] / count patches ) set u_4 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 4 ) [ 1 ] [ 0 ] ) + b * ( total_4 / count patches ) - c * ( count patches with [ c-type != 4 ] / count patches ) set u_5 a * ( 1 / ct_opciones ) * ( ifelse-value (t-type = 5 ) [ 1 ] [ 0 ] ) + b * ( total_5 / count patches ) - c * ( count patches with [ c-type != 5 ] / count patches ) ] end to recolor-patch ;; colores diferentes para cada c-type ifelse c-type = 1 [ set pcolor red + 1] [ ifelse c-type = 2 [ set pcolor green + 1 ][ ifelse c-type = 3 [ set pcolor blue ][ ifelse c-type = 4 [ set pcolor yellow ] [ set pcolor magenta ] ] ] ] end ;;; para contar la cantidad de clusters to find-clusters loop [ ;; pick a random patch that isn't in a cluster yet let seed one-of patches with [cluster = nobody] ;; if we can't find one, then we're done! if seed = nobody [ show-clusters stop ] ;; otherwise, make the patch the "leader" of a new cluster ;; by assigning itself to its own cluster, then call ;; grow-cluster to find the rest of the cluster ask seed [ set cluster self grow-cluster ] ] display end to grow-cluster ;; patch procedure ask neighbors4 with [(cluster = nobody) and (pcolor = [pcolor] of myself)] [ set cluster [cluster] of myself grow-cluster ] end ;; once all the clusters have been found, this is called ;; to put numeric labels on them so the user can see ;; that the clusters were identified correctly to show-clusters let counter 1 loop [ ;; pick a random patch we haven't labeled yet let p one-of patches with [ clus = 0 ] if p = nobody [ stop ] ;; give all patches in the chosen patch's cluster ;; the same label ask p [ ask patches with [cluster = [cluster] of myself] [ set clus counter ] ] set counter counter + 1 ] end
There are 4 versions of this model.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.