;------------------------------------------Variables Globales del sistema----------------------------------------------------------- globals[ Numero_datos_entrada; -------------------------------- Valores_entradas ; Valor_para_endoso Nombre_Endoso_Agente Valor_endosos_Agente base_endoso proporcion_Mutacion numero_ciclos_recomend parar_simulación Dias_cambio Agentes_Activos Ac_Bueno Ac_Malo Agentes_Pasivos Pa_Bueno Pa_Malo Ap_Bueno Ap_Malo numero-agente Numero_item_mira_agente numero_agentes_que_ve probabilidad_interaccion_con_sist_recomen memoria_Agentes memoria_endoso_item memoria_endoso_Agente numero_items seleccion_items Elector_de_respuesta Numero_para_respuesta Tipo_cambio_estructural entrada posibles_entradas ; vector con entrada al sistema vector_entradas ; Vector que contiene los subvectores con las opciones que puede tener una entrada Vector_numero ; Muestra conteo de los vectores que han sido cerrados numero_vector_entrada ;Lleva el conteo de los vectores para ingresar información de entrada entradas_ingresadas ; vector para mostrar la cantidad de entadas ingresadas Cerrar_entrada ; Variable para indicar que un vector para la entradas ha sido cerrado y no se puede ingresar mas datos para entrada en este vector inicialEnt vector_respuestas_items ; % ; Vector que guarda las respuestas dadas por cada item probabilidad_items ; % ; Vector que guarda las probabilidades de error que posee cada item Nombre_endosos ; Vector con el nombre de las etiquetas para el endoso de los items presentes en el modelo Valor_endosos ; Vector con el valor de cada etiqueta presente en el modelo Vector_Nombres_endosos_Agente ; Vector con el nombre de las etiquetas para el endoso de los agentes presentes en el modelo Vector_Valores_endosos_Agente ; Vector con el valor de cada etiqueta para el endoso de los agentes presentes en el modelo Vector_Nombres_endosos_Items Vector_Valores_endosos_Items respuesta ; % sistema_recomendado ; % Llenar_valores_iniciales ; vaiable que indica si los valores iniciales fueron establecidos o no para que no se establezcan mas de una vez inicial ; % Agentes_Aprendizaje error1 ; % Ac_Regular Pa_Regular Ap_Regular cont_IIParte ; % Buenos_resul_actual ; % Malos_resul_actual ; % inicialmente_grafico ; % Num_dias ; % cambio ; % proporcion ; % dias ; % inicio_grafica2 vector_resultados_actual ; % promedio ; % resp_consul ; % porcentaje_buenos_modelo ; % No_interacciones ; vector que contiene la cantidad de agentes Activos que no interactuaron por Día. promedio_no_interaccion ; promedio de no interacciones durante la simulación contador_no_Interaccion ] ;---------------------------------------------------Caracteristicas de los agentes--------------------------------------------------- turtles-own[ Nomb_item_Ve_Ag Etiquetas_item_entrada ; vector que guarda las respuestas dada por cada item que posee guardado el agente Etiquetas_Agente_entrada ; vector que guarda las respuestas dada por cada agente guardado que posee guardado los agentes del tipo aprendizaje Respuestas_enviadas_items_Ag ; vector que agrupa todas las respuestas dadas por todos los items guardados para proorcionar la respuesta del agente segun las que mas ser repitan Respuesta_agente Endosos_a_item_X_respuesta ; vector que almacena si los endosos que indican si el item le esta dando respuestas buenas o malas endosos_item ;Vector que guarda el valor de los endosos de los items que poseen los agentes endosos_agentes ; Vector que guarda el valor de los endosos de los agentes que guardan Agentes del tipo aprendizaje item_interactua item_probabilidad agentes_en_probabilidad Forma_Interaccion_Ag Forma_enviar_SistRecomen agentes_que_ve_aprendizaje vector_etiquetas_por_entrada_Agente memoria ; cantidad de agentes que guarda para interactuar los agentes en aprendizaje memoria_endosos_items ; vector con los ultimos n endosos por item memoria_endosos_Agentes ; vector con los ultimos n endosos por item ] ;----------------------------------------------------funcion para generar nueva cantidad de items con sus probabilidades------------- to generar_items let Items_con_prob_1 0 let Items_con_prob_0 0 let Items_con_prob_0.5 0 let suma 0 let suma_verificar 0 let aleator 0 let cont 0 set probabilidad_items [ ] ifelse (seleccion_items = "New")[ ifelse(suma <= 1)[ while[ cont < numero_items ][ set aleator random-float 1.001 if aleator < 0.33 [ set probabilidad_items lput 1 probabilidad_items ] if (aleator >= 0.33) and (aleator < 0.66)[ set probabilidad_items lput 0 probabilidad_items ] if aleator > 0.66[ set probabilidad_items lput 0.5 probabilidad_items ] set cont cont + 1 ] ][ SHOW "ERROR Verifique datos items" ] ][ set Items_con_prob_1 items_prob_1 set Items_con_prob_0 items_prob_0 set suma Items_con_prob_1 + Items_con_prob_0 set Items_con_prob_0.5 numero_items - suma set suma_verificar (Items_con_prob_1 + Items_con_prob_0 + Items_con_prob_0.5) ifelse (Items_con_prob_0.5 >= 0 )[ while [ Items_con_prob_1 > 0] [ set probabilidad_items lput 1 probabilidad_items set Items_con_prob_1 Items_con_prob_1 - 1 ] while [ Items_con_prob_0 > 0] [ set probabilidad_items lput 0 probabilidad_items set Items_con_prob_0 Items_con_prob_0 - 1 ] while [ Items_con_prob_0.5 > 0] [ set probabilidad_items lput 0.5 probabilidad_items set Items_con_prob_0.5 Items_con_prob_0.5 - 1 ] ][ SHOW "ERROR Verifique datos items" ] ] show probabilidad_items end ; -----------------funcion para generar respuestas de items a partir de una entrada y la misma cantidad y probabilidades ---------------- to Respuestas_Items let longitud 0 let longitud2 0 let Vect_sin_cero [ ] let Vect_transicion [ ] let transicion 0 let item_elegir 0 let aleatorio_elegir 0 let vector_usados [ ] let longitud_Res_item 0 let longitud_Ent 0 let longitud_vect_Ent 0 let cont 0 let cont2 0 let cont3 0 let aleatorio 0 let aleator 0 let vector_ent [ ] let probablidad 0 let Respuesta_del_item [ ] let Respuesta_individual 0 set longitud length probabilidad_items set vector_respuestas_items 0 if vector_respuestas_items = 0 [ set vector_respuestas_items [ ] ] ifelse (Numero_datos_entrada < 2)[ while [ cont < longitud][ set probablidad item cont probabilidad_items if probablidad = 0[ set Respuesta_del_item Entrada ] if probablidad = 1 [ set longitud_Ent length Entrada while [ cont2 < longitud_Ent][ set vector_ent item cont2 vector_entradas set longitud_vect_Ent length vector_ent set aleator random longitud_vect_Ent set Respuesta_individual item aleator vector_ent while [Respuesta_individual = item cont2 Entrada][ set aleator random longitud_vect_Ent set Respuesta_individual item aleator vector_ent ] set Respuesta_del_item lput Respuesta_individual Respuesta_del_item set cont2 cont2 + 1 ] set cont2 0 ] if probablidad = 0.5[ set longitud_Ent length Entrada while [ cont2 < longitud_Ent][ set vector_ent item cont2 vector_entradas set longitud_vect_Ent length vector_ent set aleator random longitud_vect_Ent set Respuesta_individual item aleator vector_ent set Respuesta_del_item lput Respuesta_individual Respuesta_del_item set cont2 cont2 + 1 ] set cont2 0 ] set cont cont + 1 set vector_respuestas_items lput Respuesta_del_item vector_respuestas_items set Respuesta_del_item [] ] set cont cont + 1 ][ while [ cont < longitud ][ set Vect_sin_cero numeros_sinCero Numero_datos_entrada set longitud2 length Vect_sin_cero set aleatorio random longitud2 set item_elegir item aleatorio Vect_sin_cero set probablidad item cont probabilidad_items if probablidad = 0 [ while [ cont3 < item_elegir][ set transicion item cont3 Entrada set Vect_transicion lput transicion Vect_transicion set cont3 cont3 + 1 ] set Respuesta_del_item Vect_transicion set Vect_transicion [ ] set cont3 0 ] if probablidad = 1[ set longitud_Ent length Entrada set longitud_Res_item length Respuesta_del_item while [ longitud_Res_item < item_elegir][ ifelse (vector_usados = [ ])[ set aleatorio_elegir random longitud_Ent set vector_usados lput aleatorio_elegir vector_usados ][ set aleatorio_elegir vector_selector vector_usados longitud_Ent set vector_usados lput aleatorio_elegir vector_usados ] set vector_ent item aleatorio_elegir vector_entradas set longitud_vect_Ent length vector_ent set aleator random longitud_vect_Ent set Respuesta_individual item aleator vector_ent while [Respuesta_individual = item aleatorio_elegir Entrada][ set aleator random longitud_vect_Ent set Respuesta_individual item aleator vector_ent ] set Respuesta_del_item lput Respuesta_individual Respuesta_del_item set longitud_Res_item length Respuesta_del_item ] ] if probablidad = 0.5[ set longitud_Ent length Entrada set longitud_Res_item length Respuesta_del_item while [ longitud_Res_item < item_elegir][ ifelse (vector_usados = [ ])[ set aleatorio_elegir random longitud_Ent set vector_usados lput aleatorio_elegir vector_usados ][ set aleatorio_elegir vector_selector vector_usados longitud_Ent set vector_usados lput aleatorio_elegir vector_usados ] set vector_ent item aleatorio_elegir vector_entradas set longitud_vect_Ent length vector_ent set aleator random longitud_vect_Ent set Respuesta_individual item aleator vector_ent set Respuesta_del_item lput Respuesta_individual Respuesta_del_item set longitud_Res_item length Respuesta_del_item ] ] set vector_usados [ ] set vector_respuestas_items lput Respuesta_del_item vector_respuestas_items set Respuesta_del_item [ ] set cont cont + 1 ] ] show vector_respuestas_items end to-report vector_selector [ vect num ] let vect1 [ ] let item_intro 0 let cont 0 let longitud 0 let aleator 0 let item_select 0 while [ cont < num][ if member? item_intro vect = false [ set vect1 lput item_intro vect1 ] set item_intro item_intro + 1 set cont cont + 1 ] set longitud length vect1 set aleator random longitud set item_select item aleator vect1 report item_select end to-report numeros_sinCero [ num] let vector [ ] let ini 0 let cont 0 while [ cont < num ][ set ini ini + 1 set vector lput ini vector set cont cont + 1 ] report vector end ;------------------------------------Funciones para generar entrada aleatoria ------------------------------------------------------------------------ to enviar_Entrada llenar_entrada end to Vector_listo ifelse (Vector_numero = Numero_datos_entrada)[ set Cerrar_entrada 1 ][ set Vector_numero Vector_numero + 1 ifelse (Cerrar_entrada = 0)[ ifelse (numero_vector_entrada = Numero_datos_entrada)[ set Cerrar_entrada 1 ][ set numero_vector_entrada numero_vector_entrada + 1 ] ][ show "ERROR Numero de entrada full" ] ] end to llenar_entrada let cont 0 if Vector_numero = 0[ set Vector_numero 1 ] if vector_entradas = 0[ set vector_entradas [ ] ] if entradas_ingresadas = 0 [ set entradas_ingresadas [ ] ] if Numero_datos_entrada > 0 and inicialEnt = 0 [ while [cont < Numero_datos_entrada][ set vector_entradas lput [ ] vector_entradas set cont cont + 1 ] set inicialEnt 1 ] show vector_entradas ifelse (Cerrar_entrada = 0)[ ifelse ( member? Valores_entradas entradas_ingresadas = true)[ show "ERROR: Nombre Repetido" ][ ingresar numero_vector_entrada Valores_entradas set entradas_ingresadas lput Valores_entradas entradas_ingresadas ] ][ show "Entradas FULL" ] end to ingresar [ n m ] let respaldo [ ] set respaldo item n vector_entradas set respaldo lput m respaldo set vector_entradas (replace-item n vector_entradas respaldo) show vector_entradas end to generar_entrada let longitud 0 let longitud2 0 let cont 0 let aleator 0 let vector_transicion [ ] let valor_entrada 0 set Entrada [ ] set longitud length vector_entradas while [ cont < longitud ][ set vector_transicion item cont vector_entradas set longitud2 length vector_transicion set aleator random longitud2 set valor_entrada item aleator vector_transicion set Entrada lput valor_entrada Entrada set cont cont + 1 ] show entrada end ; funcion para Borrar los datos de entrada to Borrar_Datos_de_entrada set vector_entradas 0 set Vector_numero 0 set entradas_ingresadas 0 set numero_vector_entrada 0 set Cerrar_entrada 0 set inicialEnt 0 end ;--------------------------------Funcion para iniciar la simulación -------------------------------------------------------------- to iniciar let aleator 0 set sistema_recomendado 0 verificacion_agentes if inicialmente_grafico = 0 [ set inicialmente_grafico 1 grafica ] ifelse(error1 = 0)[ show "-----------------Nueva entrada al modelo---------------------" generar_entrada ifelse (inicial = 0)[ generar_items Respuestas_Items set cont_IIParte cont_IIParte + 1 set inicial 1 ][ Respuestas_Items set cont_IIParte cont_IIParte + 1 ] RespuestaEtiquetas_itemsAgente_a_partir_entrada RespuestaEtiquetas_AgentesGuardados_a_partir_entrada endosos_A_items calcular_endosos_items_guardados calcular_endosos_Agentes_guardados Funcion_respuestas_agentes Respuesta_de_la_organizacion ][ show "Error: verifique los datos de entrada de los agentes" ] if cont_IIParte = numero_ciclos_recomend [ ; stop set aleator random-float 1.01 ConQuieninteractua filtro probabilidad_de_interaccion enviar_a_recomendados interaccion resultados_graficar set cont_IIParte 0 if Tipo_cambio_estructural = "Automatic"[ set Num_dias Num_dias + 1 if Num_dias = Dias_cambio[ cambio_estructural set cambio numero-agente set Num_dias 0 ] ] set dias dias + 1 grafica set cambio 0 if aleator < proporcion_Mutacion [ incluir_items_descartados ] if vector_resultados_actual = 0[ set vector_resultados_actual [ ] ] set vector_resultados_actual lput Buenos_resul_actual vector_resultados_actual if dias = parar_simulación [ stop ] ] end ; ----------------------------------------------funcion verificacion------------------------------------------------------- to verificacion_agentes let suma 0 set suma Agentes_Activos + Agentes_Pasivos if suma > numero-agente[ set error1 1 ] end ; -----------------------------Funcion para cargar los valores iniciales------------------------------------------------------ to inicializar set base_endoso endorsement_base set proporcion_Mutacion frequency_mutation set numero_ciclos_recomend number_problems_per_day set parar_simulación days_of_simulation set Dias_cambio Days_SC set Agentes_Activos Number_Active_Agents set Agentes_Pasivos Number_Pasive_Agents set Ac_Bueno Ac_Good set Ac_Malo Ac_Bad set Pa_Bueno Pa_Good set Pa_Malo Pa_Bad set Ap_Bueno Ap_Good set Ap_Malo Ap_Bad set numero-agente Total_Number_Agents set Numero_item_mira_agente Number_observed_Items set numero_agentes_que_ve Number_observed_Agents set probabilidad_interaccion_con_sist_recomen probability_using_RS set memoria_Agentes Time_memory set memoria_endoso_item memory_endorsement_item set memoria_endoso_Agente memory_endorsement_Agent set numero_items total_number_ii set seleccion_items random_method_Sel_ii set Elector_de_respuesta form_to_choice_answer set Numero_para_respuesta number_items_to_give_answer set Tipo_cambio_estructural form_introduction_SC end to setup let vect [ ] crt numero-agente llenar_caracteristicas_agente llenar_caracteristicas_formaDeRecomendar mostrar_inicial funcion_elegir_agente_aleatorio mostrar_agentes_ve Agregar_items_iniciales_agentes set resp_consul "No ha ingresado ningún día para consulta " set Llenar_valores_iniciales 1 end to mostrar_inicial let cont 0 let vect [ ] while [cont < numero-agente][ ask turtle cont [ set vect lput Forma_Interaccion_Ag vect set vect lput Forma_enviar_SistRecomen vect set label vect ] set cont cont + 1 set vect [ ] ] end to llenar_caracteristicas_agente let cont 0 let suma 0 let resta 0 let registro 0 set suma Agentes_Activos + Agentes_Pasivos ifelse (suma <= numero-agente)[ set resta numero-agente - suma set Agentes_Aprendizaje resta while [ cont < Agentes_Activos][ ask turtle registro [set Forma_Interaccion_Ag "Activo" ] set cont cont + 1 set registro registro + 1 ] set cont 0 while [ cont < Agentes_pasivos ][ ask turtle registro [ set Forma_Interaccion_Ag "Pasivo"] set cont cont + 1 set registro registro + 1 ] set cont 0 While [cont < Agentes_Aprendizaje ][ ask turtle registro [ set Forma_Interaccion_Ag "Aprendizaje"] set cont cont + 1 set registro registro + 1 ] ][ set error1 1 while [error1 = 1][ Show "Error: El numero de agentes no puede ser menor que la suma de agentes pasivos y activos verifique sus datos " set error1 0 ] ] end to llenar_caracteristicas_formaDeRecomendar let contBuAc 0 let contMaAc 0 let contReAc 0 let contBuPa 0 let contMaPa 0 let contRePa 0 let contBuAp 0 let contMaAp 0 let contReAp 0 let cont 0 let restaAc 0 let restaPa 0 let restaAp 0 let sumaAc 0 let sumaPa 0 let sumaAp 0 set sumaAc Ac_Bueno + Ac_Malo set sumaPa Pa_Bueno + Pa_Malo set sumaAp Ap_Bueno + Ap_Malo ifelse( ( sumaAc <= Agentes_Activos ) and ( sumaPa <= Agentes_Pasivos ) and ( sumaAp <= Agentes_Aprendizaje ) )[ set restaAc Agentes_Activos - sumaAc set Ac_Regular restaAc set restaPa Agentes_Pasivos - sumaPa set Pa_Regular restaPa set restaAp Agentes_Aprendizaje - sumaAp set Ap_Regular restaAp While [contBuAc < Ac_Bueno ][ ask turtle cont [ set Forma_enviar_SistRecomen "Bueno" ] set contBuAc contBuAc + 1 set cont cont + 1 ] while [contMaAc < Ac_Malo ][ ask turtle cont [set Forma_enviar_SistRecomen "Malo" ] set contMaAc contMaAc + 1 set cont cont + 1 ] while [contReAc < Ac_Regular ][ ask turtle cont [set Forma_enviar_SistRecomen "Regular" ] set contReAc contReAc + 1 set cont cont + 1 ] While [contBuPa < Pa_Bueno ][ ask turtle cont [ set Forma_enviar_SistRecomen "Bueno" ] set contBuPa contBuPa + 1 set cont cont + 1 ] while [contMaPa < Pa_Malo ][ ask turtle cont [set Forma_enviar_SistRecomen "Malo" ] set contMaPa contMaPa + 1 set cont cont + 1 ] while [contRePa < Pa_Regular ][ ask turtle cont [set Forma_enviar_SistRecomen "Regular" ] set contRePa contRePa + 1 set cont cont + 1 ] While [contBuAp < Ap_Bueno ][ ask turtle cont [ set Forma_enviar_SistRecomen "Bueno"] set contBuAp contBuAp + 1 set cont cont + 1 ] while [contMaAp < Ap_Malo ][ ask turtle cont [set Forma_enviar_SistRecomen "Malo" ] set contMaAp contMaAp + 1 set cont cont + 1 ] while [contReAp < Ap_Regular ][ ask turtle cont [set Forma_enviar_SistRecomen "Regular" ] set contReAp contReAp + 1 set cont cont + 1 ] ][ show "Error: Verifique los datos de entrada " ] end ;----------------------------------------- Funcion para agregar items iniciales a los agentes------------------------------- to Agregar_items_iniciales_agentes let cont 0 let cont2 0 let aleator 0 while[ cont < numero-agente][ ask turtle cont [ set Nomb_item_Ve_Ag [ ] while [ cont2 < Numero_item_mira_agente][ set aleator random numero_items while [member? aleator Nomb_item_Ve_Ag = true ][ set aleator random numero_items ] set Nomb_item_Ve_Ag lput aleator Nomb_item_Ve_Ag set cont2 cont2 + 1 ] set cont2 0 show (Word "Items que ve Agente "cont" ") show Nomb_item_Ve_Ag ] set cont cont + 1 ] end ;-------------------------------------------------------funcion colocar etiquetas a valor a las respuestas de los items guardado por cada agente agentes--------------------------------------------------------- to RespuestaEtiquetas_itemsAgente_a_partir_entrada let cont 0 let cont2 0 let cont3 0 let cont4 0 let cont5 0 let cont6 0 let longitud 0 let longitud2 0 let item_ve_agente 0 let Respuesta_item_ve 0 let vector_respuesta_item_agente [ ] let nom_etiqueta 0 let respaldo [] let respaldo2 [ ] let longitud_etiquetas_vector 0 let longitud_etiquetas_X_item 0 let Vector_etiquetaXitem [ ] let vectorEtiquetasProvisional [ ] while [ cont < numero-agente][ ask turtle cont [ set longitud length Nomb_item_Ve_Ag if Etiquetas_item_entrada = 0 [ set Etiquetas_item_entrada [ ] while [ cont3 < longitud ][ set Etiquetas_item_entrada lput [ ] Etiquetas_item_entrada set cont3 cont3 + 1 ] set cont3 0 ] while [ cont2 < longitud][ set item_ve_agente item cont2 Nomb_item_Ve_Ag set vector_respuesta_item_agente item item_ve_agente vector_respuestas_items set longitud2 length vector_respuesta_item_agente while [ cont4 < longitud2][ set nom_etiqueta item cont4 vector_respuesta_item_agente set respaldo lput nom_etiqueta respaldo set cont4 cont4 + 1 ] set cont4 0 set respaldo2 sentence item cont2 Etiquetas_item_entrada respaldo set Etiquetas_item_entrada (replace-item cont2 Etiquetas_item_entrada respaldo2 ) set respaldo [ ] set cont2 cont2 + 1 ] set cont2 0 set longitud_etiquetas_vector length Etiquetas_item_entrada while [ cont5 < longitud_etiquetas_vector ][ set Vector_etiquetaXitem item cont5 Etiquetas_item_entrada set longitud_etiquetas_X_item length Vector_etiquetaXitem ifelse (longitud_etiquetas_X_item > memoria_endoso_item * Numero_datos_entrada)[ while [ cont6 < Numero_datos_entrada][ set Vector_etiquetaXitem remove-item 0 Vector_etiquetaXitem set cont6 cont6 + 1 ] set cont6 0 set vectorEtiquetasProvisional lput Vector_etiquetaXitem vectorEtiquetasProvisional ][ set vectorEtiquetasProvisional lput Vector_etiquetaXitem vectorEtiquetasProvisional ] set cont5 cont5 + 1 ] set cont5 0 set Etiquetas_item_entrada vectorEtiquetasProvisional set vectorEtiquetasProvisional [ ] show (Word "Valores de items que ve el agente " cont) show Etiquetas_item_entrada ] set cont cont + 1 ] end ; ----------------------------------------Función para endosar si los items segun las respuestas que estos dan --------------------------------------------- to endosos_A_items let cont1 0 let cont2 0 let cont3 0 let longitud 0 let longitud2 0 let longitud3 0 let item_ver 0 let respuesta_item_comp 0 let transicion [ ] let iguales_O_diferentes 0 while [ cont1 < numero-agente ][ ask turtle cont1 [ set longitud length Nomb_item_Ve_Ag if Endosos_a_item_X_respuesta = 0 [ set Endosos_a_item_X_respuesta [] ] set longitud2 length Endosos_a_item_X_respuesta if longitud2 = 0 [ while [cont3 < longitud][ set Endosos_a_item_X_respuesta lput [ ] Endosos_a_item_X_respuesta set cont3 cont3 + 1 ] set cont3 0 show Endosos_a_item_X_respuesta ] while [cont2 < longitud][ set item_ver item cont2 Nomb_item_Ve_Ag set respuesta_item_comp item item_ver vector_respuestas_items set iguales_O_diferentes comparar_elementos_vectores respuesta_item_comp entrada ifelse (iguales_O_diferentes = "iguales")[ set transicion item cont2 Endosos_a_item_X_respuesta set transicion lput "Good Item" transicion set longitud3 length transicion if longitud3 > memoria_endoso_item [ set transicion remove-item 0 transicion ] set Endosos_a_item_X_respuesta replace-item cont2 Endosos_a_item_X_respuesta transicion ] [ set transicion item cont2 Endosos_a_item_X_respuesta set transicion lput "Bad Item" transicion set longitud3 length transicion if longitud3 > memoria_endoso_item [ set transicion remove-item 0 transicion ] set Endosos_a_item_X_respuesta replace-item cont2 Endosos_a_item_X_respuesta transicion ] set cont2 cont2 + 1 set transicion [ ] ] set cont2 0 ] set cont1 cont1 + 1 ] end ; dado dos vectores ver si uno de ellos posee los elementos del otro to-report comparar_elementos_vectores [vect1 vectcompa] let longitud 0 let cont 0 let cont_iguales 0 let elemento_compa 0 let respuesta_compa 0 set longitud length vect1 while [ cont < longitud][ set elemento_compa item cont vect1 ifelse (member? elemento_compa vectcompa)[ set cont_iguales cont_iguales + 1 set cont cont + 1 ][ set cont cont + 1 ] ] ifelse (cont_iguales = longitud)[ set respuesta_compa "iguales" ][ set respuesta_compa "Diferentes" ] report respuesta_compa end to RespuestaEtiquetas_AgentesGuardados_a_partir_entrada let cont1 0 let cont2 0 let cont3 0 let longitud1 0 let longitud2 0 let Respuesta_comparar [ ] let Agente_guardado 0 let respuesta_Agente_guardado [ ] let vector_respaldo [ ] while [cont1 < numero-agente][ ask turtle cont1 [ ifelse(Forma_Interaccion_Ag = "Aprendizaje")[ set Respuesta_comparar agentes_que_ve_aprendizaje set longitud1 length Respuesta_comparar if Etiquetas_Agente_entrada = 0 [ set Etiquetas_Agente_entrada [ ] while [ cont2 < longitud1 ][ set Etiquetas_Agente_entrada lput [ ] Etiquetas_Agente_entrada set cont2 cont2 + 1 ] set cont2 0 ] while [ cont3 < longitud1 ][ set Agente_guardado item cont3 agentes_que_ve_aprendizaje ask turtle Agente_guardado[ set respuesta_Agente_guardado Respuesta_agente ] ifelse (respuesta_Agente_guardado = entrada)[ set vector_respaldo item cont3 Etiquetas_Agente_entrada set vector_respaldo lput "Good_Agent" vector_respaldo set longitud2 length vector_respaldo if longitud2 > memoria_endoso_Agente [ set vector_respaldo remove-item 0 vector_respaldo ] set Etiquetas_Agente_entrada (replace-item cont3 Etiquetas_Agente_entrada vector_respaldo ) ][ set vector_respaldo item cont3 Etiquetas_Agente_entrada set vector_respaldo lput "Bad_Agent" vector_respaldo set longitud2 length vector_respaldo if longitud2 > memoria_endoso_Agente [ set vector_respaldo remove-item 0 vector_respaldo ] set Etiquetas_Agente_entrada (replace-item cont3 Etiquetas_Agente_entrada vector_respaldo ) ] set vector_respaldo 0 set cont3 cont3 + 1 ] set cont3 0 show Etiquetas_Agente_entrada set cont1 cont1 + 1 ][ set cont1 cont1 + 1 ] ] ] end ;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ;------------------------------Funciones para las respuesta de los agentes ------------------------------------------------------------------------ to Funcion_respuestas_agentes let cont 0 let cont1 0 let longitud1 0 let longitud2 0 let vect_datos_entrada [ ] let respuesta_individual 0 let respuesta_del_Agente [ ] Agrupar_Etiquetas while [ cont < numero-agente ][ ask turtle cont [ set longitud1 length vector_entradas ;set longitud2 length Respuestas_enviadas_items_Ag while [ cont1 < longitud1][ set vect_datos_entrada item cont1 vector_entradas set respuesta_individual respuesta_etiquetas_repetidas vect_datos_entrada Respuestas_enviadas_items_Ag if Respuesta_agente = 0 [ set Respuesta_agente [ ] ] set respuesta_del_Agente lput respuesta_individual respuesta_del_Agente set Respuesta_agente respuesta_del_Agente set cont1 cont1 + 1 ] set respuesta_del_Agente [ ] set cont1 0 ] set cont cont + 1 ] end ;Agrupa las etiquetas dadas por los items de cada agente en un solo vector to Agrupar_Etiquetas let cont 0 let cont1 0 let cont2 0 let cont3 0 let longitud1 0 let longitud2 0 let longitud3 0 let longitud_respuesta 0 let Vector_transicion [ ] let VectorRespuestas_items [ ] let item_guardado 0 let respuesta_x_item 0 let item_transicion 0 let vector_decision_agente [ ] let item_vector_decision 0 let aleator 0 while [ cont < numero-agente ][ ask turtle cont [ set Respuestas_enviadas_items_Ag 0 set longitud3 length Nomb_item_Ve_Ag ifelse (Elector_de_respuesta = "Random")[ set aleator vector_eleccion 0 longitud3 set vector_decision_agente devorler_mayores endosos_item aleator ][ set vector_decision_agente devorler_mayores endosos_item Numero_para_respuesta ] set longitud_respuesta length vector_decision_agente set VectorRespuestas_items [ ] While[ cont3 < longitud_respuesta][ set item_vector_decision item cont3 vector_decision_agente set item_guardado item item_vector_decision Nomb_item_Ve_Ag set respuesta_x_item item item_guardado vector_respuestas_items set VectorRespuestas_items lput respuesta_x_item VectorRespuestas_items set cont3 cont3 + 1 ] set cont3 0 set longitud1 length VectorRespuestas_items While [cont1 < longitud1][ set Vector_transicion item cont1 VectorRespuestas_items set longitud2 length Vector_transicion while [ cont2 < longitud2][ set item_transicion item cont2 Vector_transicion if Respuestas_enviadas_items_Ag = 0[ set Respuestas_enviadas_items_Ag [ ] ] set Respuestas_enviadas_items_Ag lput item_transicion Respuestas_enviadas_items_Ag set cont2 cont2 + 1 ] set cont2 0 set cont1 cont1 + 1 ] set cont1 0 ] set cont cont + 1 ] end ; funcion que dado dos numeros de entrada uno un numero y otro el tope, crea un vector que contiene una secuencia de numeros en la cual no se encuentra el numero Exc excluido ; y cuyo tope de la secuencia es tope, y retorna un numero aleatorio de los que esten en el vector to-report vector_eleccion [ Exc tope ] let cont 0 let vector [ ] let longitud 0 let aleator 0 let item_elegir 0 while [ cont < tope ] [ ifelse (cont = Exc)[ set cont cont + 1 ][ set vector lput cont vector set cont cont + 1 ] ] set longitud length vector set aleator random longitud set item_elegir item aleator vector report item_elegir end ; función que al ingresar un vector con valores y un numero que debe ser menor que la longitud del vector, devuelve ; un vector con la cantidad igual al numero ingresado, con los valores en los que se encuentran los mayores valores del vector anterior to-report devorler_mayores [vect_valores num_devolver] let longitud 0 let longitud1 0 let cont 0 let cont1 0 let item_comparar 0 let vector_decreciente [ ] let vector_n_mayores [ ] set longitud length vect_valores ifelse (longitud >= num_devolver)[ set vector_decreciente sort-by [?1 > ?2] vect_valores while [ cont < longitud][ set item_comparar item cont vector_decreciente while [ cont1 < longitud ][ ifelse ( item_comparar = item cont1 vect_valores)[ ifelse ( member? cont1 vector_n_mayores = false )[ set vector_n_mayores lput cont1 vector_n_mayores set longitud1 length vector_n_mayores ifelse (longitud1 < num_devolver)[ set cont1 cont1 + 1 ][ set cont1 longitud ] ][ set cont1 cont1 + 1 ] ][ set cont1 cont1 + 1 ] ] set cont1 0 set longitud1 length vector_n_mayores ifelse (longitud1 < num_devolver)[ set cont cont + 1 ][ set cont longitud ] ] report vector_n_mayores ][ show "ERROR..... Número de valores a devolver es mayor que longitud del vector" ] end ; ---------------------------------------------------------Función valor mayor --------------------------------------------------------------------------- ; Función que dados dos vectores el primero "el vector con los datos " y el segundo "el vector donde se quiere buscar el que se repita mas de los datos dados en el vector 1" ; regresa el valor que se repita mas to-report respuesta_etiquetas_repetidas [vect_1 vect_2 ] let cont1 0 let cont2 0 let vector_de_datos [ ] let vector_comparar [ ] let longitud1 0 let longitud2 0 let item_comparar 0 let conteo_encontrado 0 let valores_repetidos [ ] let vector_mayor [ ] let posicion_mayor 0 let respuesta_de_los_vectores 0 set vector_de_datos vect_1 set vector_comparar vect_2 set longitud1 length vector_de_datos set longitud2 length vector_comparar while [cont1 < longitud1] [ set item_comparar item cont1 vector_de_datos while [ cont2 < longitud2][ ifelse(item_comparar = item cont2 vector_comparar)[ set conteo_encontrado conteo_encontrado + 1 set cont2 cont2 + 1 ][ set cont2 cont2 + 1 ] ] set cont2 0 set valores_repetidos lput conteo_encontrado valores_repetidos set conteo_encontrado 0 set cont1 cont1 + 1 ] ;show valores_repetidos set vector_mayor hallar_mayor valores_repetidos set posicion_mayor item 1 vector_mayor set respuesta_de_los_vectores item posicion_mayor vector_de_datos report respuesta_de_los_vectores end ;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ;--------------------------------------------------Respuesta de la organizacion -------------------------------------------------------------------------------------- to Respuesta_de_la_organizacion let cont 0 let vector_respuestas_de_los_agentes [ ] while[ cont < numero-agente ][ ask turtle cont [ set vector_respuestas_de_los_agentes lput Respuesta_agente vector_respuestas_de_los_agentes ] set cont cont + 1 ] set respuesta Respuesta_moda vector_respuestas_de_los_agentes end ; funcion que dado un vector devuelve el valor que mas se repite dentro de este to-report Respuesta_moda [ vect] let respuesta_repetido 0 let longitud 0 let aleator 0 let respuesta1 [ ] let respuesta_final[ ] set respuesta_repetido modes vect set longitud length respuesta_repetido ifelse (longitud > 1)[ set aleator random longitud set respuesta_final item aleator respuesta_repetido ][ set respuesta_final item 0 respuesta_repetido ] report respuesta_final end ;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ;--------------------------------------Metodo interaccion 2 ------------------------------------------------------------------- to ConQuieninteractua let cont 0 let cont0 0 let cont1 0 let numeroItem 0 let vect_Item [ ] let vectItemRev [ ] let itemCompartidos [ ] let quien 0 let ultimo 0 while [ cont < numero-agente][ ask turtle cont [ set vect_Item Nomb_item_Ve_Ag while[cont0 < Numero_item_mira_agente][ set numeroItem item cont0 vect_Item while [cont1 < numero-agente ][ ask turtle cont1 [ set vectItemRev Nomb_item_Ve_Ag if member? numeroItem vectItemRev = true [ set quien who set itemCompartidos lput quien itemCompartidos ] set cont1 cont1 + 1 ] ] set cont1 0 set cont0 cont0 + 1 ] set item_interactua itemCompartidos show (word "Agente----> "cont) show (word "Agente con los que interactua : "item_interactua) set cont0 0 ] set itemCompartidos [ ] ;set cont0 0 set cont cont + 1 ] end to filtro let cont 0 let vect[ ] let vect2 [ ] let longitud 0 let cont0 0 let a 0 while [ cont < numero-agente][ ask turtle cont [ set vect item_interactua set longitud length vect while [cont0 < longitud][ if item cont0 vect != cont [ set a item cont0 vect set vect2 lput a vect2 ] set cont0 cont0 + 1 ] set cont0 0 set item_interactua vect2 set vect2 [ ] show (word "agente -----> " cont ) show (word "Item "item_interactua) set cont cont + 1 ] ] end ;------------------------------------------------------------------- funcion probabilidad ----------------------------------------------------- to-report probabilidad [ vectinter ] let vect [ ] let longitud 0 let longitud2 0 let cont 0 let cont0 0 let cont1 0 let cantidad 0 let vect_cantidad [ ] let vect_agente[ ] let a 0 let vect_nu [ ] set vect vectinter set longitud length vect while [ cont < numero-agente] [ while [ cont0 < longitud][ if cont = item cont0 vect [ set cantidad cantidad + 1 ] set cont0 cont0 + 1 ] set vect_cantidad lput cantidad vect_cantidad set vect_agente lput cont vect_agente set cont0 0 set cantidad 0 set cont cont + 1 ] show (word vect_cantidad "Vector de cantidad") show (word vect_agente "Agentes " ) set longitud2 length vect_cantidad while [ cont1 < longitud2][ set a item cont1 vect_cantidad set a a / Numero_item_mira_agente set vect_nu lput a vect_nu set cont1 cont1 + 1 ] set vect_cantidad vect_nu report vect_cantidad end ;-----------------------------------Probabilidad interaccion ------------------------------------------------------------------ to probabilidad_de_interaccion let cont 0 let vect [ ] let vectPro [ ] let transicion [ ] let vectag [ ] while [cont < numero-agente][ ask turtle cont [ set vect item_interactua set vectPro probabilidad vect set transicion vectPro set transicion remove-item cont transicion set vectag vector_agentes numero-agente set vectag remove-item cont vectag set item_probabilidad transicion set agentes_en_probabilidad vectag show (word "agente -----> " cont ) show (word "Item " item_probabilidad ) show (word "Agentes " vectag ) ] set cont cont + 1 ] end ;-------------------------------------------------- Buscar mayor --------------------------------------------------------- ; Funcion que dado un vector devuelve otro vector de longitud 2 que en su primera casilla tiene el valor ; del mayor valor de los elementos del vector y en la segunda casilla posee la posicion "si hay uno solo" o ;una de las posiciones "si hay varios " en las que se encuentra este valor. to-report hallar_mayor [ vector] let vect[ ] let vectduo [ ] let lista_ordenada [ ] let longitud 0 let longitud1 0 let cont 0 let encontrado 0 let n1 0 let vectAlea[ ] let aleatorio 0 let vectReportar [ ] set vect vector set longitud length vect set lista_ordenada sort-by [?1 > ?2] vect set n1 item 0 lista_ordenada while [ cont < longitud ][ ifelse ( n1 = item cont vect)[ set vectduo lput n1 vectduo set vectduo lput cont vectduo set vectAlea lput vectduo vectAlea set vectduo [ ] set cont cont + 1 ][ set cont cont + 1 ] ] ;show word "el vector aleatorio: " vectAlea set longitud1 length vectAlea set aleatorio random longitud1 set vectReportar item aleatorio vectAlea report vectReportar end ;-------------------------------------------------- Buscar menor --------------------------------------------------------- ; Funcion que dado un vector devuelve otro vector de longitud 2 que en su primera casilla tiene el valor ; del menor valor de los elementos del vector y en la segunda casilla posee la posicion "si hay uno solo" o ;una de las posiciones "si hay varios " en las que se encuentra este valor. to-report hallar_menor [ vector] let vect[ ] let vectduo [ ] let lista_ordenada [ ] let longitud 0 let longitud1 0 let cont 0 let encontrado 0 let n1 0 let vectAlea[ ] let aleatorio 0 let vectReportar [ ] set vect vector set longitud length vect set lista_ordenada sort-by [?1 < ?2] vect set n1 item 0 lista_ordenada while [ cont < longitud ][ ifelse ( n1 = item cont vect)[ set vectduo lput n1 vectduo set vectduo lput cont vectduo set vectAlea lput vectduo vectAlea set vectduo [ ] set cont cont + 1 ][ set cont cont + 1 ] ] show word "el vector aleatorio: " vectAlea set longitud1 length vectAlea set aleatorio random longitud1 set vectReportar item aleatorio vectAlea report vectReportar end ;----------------------------------------------------Funcion hallar segundo mayor ---------------------------------------- ; funcion que dado un vector devuelve otro vector de dos posiciones en la cual en la posicion 0 tendra el valor del segundo ; mayor del vector, y en la posición 1 tendra la posicion o una de las posiciones si son varias en la cual se encuentra este ; el segundo mayor valor to-report hallar_segundo_mayor [vect] let vect_mayor [ ] let vect_menor [ ] let mayor 0 let menor 0 let longitud 0 let cont 0 let vect_segundo_mayor [ ] set vect_mayor hallar_mayor vect set mayor item 0 vect_mayor set vect_menor hallar_menor vect set menor item 0 vect_menor set longitud length vect while [cont < longitud][ ifelse( mayor = item cont vect)[ set vect_segundo_mayor replace-item cont vect menor set cont cont + 1 ][ set cont cont + 1 ] ] set vect_segundo_mayor hallar_mayor vect_segundo_mayor report vect_segundo_mayor end ;------------------------------------------interaccion------------------------------------------------------------- to interaccion let cont 0 let vectNu [ ] let interactuaCon 0 let posicion 0 let vect1[ ] let vect2[ ] let resultadoInterac [ ] let aleator 0 let longitud_distintos 0 let items_distintos[ ] let endosoMenor [ ] let item_menor_endoso 0 let aleator_items_distintos 0 let item_aleator 0 let encontrado 0 let aleator_item_pasivo 0 let longitud_item_prob 0 ;let verificar_interaccion_pasivo 0 if No_interacciones = 0 [ set No_interacciones [ ] ] set contador_no_Interaccion 0 while [ cont < numero-agente][ ask turtle cont [ if Forma_Interaccion_Ag = "Pasivo"[ ifelse (verificar_elementos_iguales item_probabilidad = true )[ show "No se puede interactuar mas entre agentes Activos " ][ show "Interactua con" set vectNu hallar_mayor item_probabilidad set posicion item 1 vectNu set interactuaCon item posicion agentes_en_probabilidad set vect1 Nomb_item_Ve_Ag ask turtle interactuaCon[ set vect2 Nomb_item_Ve_Ag ] set items_distintos vect_diferentes vect1 vect2 set longitud_distintos length items_distintos ifelse (longitud_distintos > 0)[ set endosoMenor hallar_menor endosos_item set item_menor_endoso item 1 endosoMenor set aleator_items_distintos random longitud_distintos set item_aleator item aleator_items_distintos items_distintos show ( Word "***************************Agente " cont "************************************************") show "Vector de items que ve" show vect1 show "vector con el que interactua" show vect2 show "Items distintos " show items_distintos show "Vector de endosos " show endosos_item Show "Interación nuevo vector" set vect1 replace-item item_menor_endoso vect1 item_aleator set Nomb_item_Ve_Ag vect1 show Nomb_item_Ve_Ag show "***************************************************************************" ][ set contador_no_Interaccion contador_no_Interaccion + 1 show (word "Agentes "cont " no interactua") ] ] ] if Forma_Interaccion_Ag = "Activo"[ show "Interactua con" set vectNu hallar_menor item_probabilidad set posicion item 1 vectNu set interactuaCon item posicion agentes_en_probabilidad set vect1 Nomb_item_Ve_Ag ask turtle interactuaCon[ set vect2 Nomb_item_Ve_Ag ] set items_distintos vect_diferentes vect1 vect2 set longitud_distintos length items_distintos ifelse ((longitud_distintos > 0) and ( longitud_distintos = Numero_item_mira_agente ))[ set endosoMenor hallar_menor endosos_item set item_menor_endoso item 1 endosoMenor set aleator_items_distintos random longitud_distintos set item_aleator item aleator_items_distintos items_distintos show ( Word "***************************Agente " cont "************************************************") show "Vector de items que ve" show vect1 show "vector con el que interactua" show vect2 show "Items distintos " show items_distintos show "Vector de endosos " show endosos_item Show "Interación nuevo vector" set vect1 replace-item item_menor_endoso vect1 item_aleator set Nomb_item_Ve_Ag vect1 show Nomb_item_Ve_Ag show "***************************************************************************" ][ set contador_no_Interaccion contador_no_Interaccion + 1 show (word "Agentes "cont " no interactua") ] ] if Forma_Interaccion_Ag = "Aprendizaje" [ set aleator random-float 1.01 show (Word "///////////// aleatorio "aleator "////////////////////////////////") ifelse (aleator < probabilidad_interaccion_con_sist_recomen)[ interaccion_2_Aprendizaje cont ][ interaccion_1_Aprendizaje cont ] ] ] set cont cont + 1 ] set No_interacciones lput contador_no_Interaccion No_interacciones end ;--------------------------------------------------- comparar vectores Activo y pasivo---------------------------------------- ; comparacion de vectores la función devuelve un vector con los items que están en el vector 2 y no estan en el vector 1 to-report vect_diferentes [ vect1 vect2] let cont 0 let longitud 0 let comparar 0 let vector1 [ ] let vector2 [ ] let diferentes [ ] set vector1 vect1 set vector2 vect2 set longitud length vector2 while [ cont < longitud ][ set comparar item cont vector2 ifelse (member? comparar vector1 = false)[ set diferentes lput comparar diferentes set cont cont + 1 ][ set cont cont + 1 ] ] report diferentes end ;-------------------------------------------------------- Verificar si uno de los elementos de un vector es mayor que el numero ingresado-------------------- to-report verificar_mayor [ vect num ] let vector [ ] let longitud 0 let cont 0 let encontrado 0 let item_verificar 0 set vector vect set longitud length vector while[ cont < longitud ] [ set item_verificar item cont vector ifelse(item_verificar > num )[ report true ][ set cont cont + 1 ] ] report false end ;---------------------crear vector de agentes --------------------------------------- to-report vector_agentes [ num] let cont 0 let vectAgentes [ ] while [cont < num][ set vectAgentes lput cont vectAgentes set cont cont + 1 ] report vectAgentes end ; ------------------------------------------------------------------------------------------------------------------------------------------------------------- to funcion_elegir_agente_aleatorio let n 0 let cont 0 let agente 0 if numero_agentes_que_ve >= numero-agente [ show ("ERROR: el agente no puede ver mas agentes del numero agentes establecidos ") set n numero-agente ] while [n < numero-agente][ ask turtle n[ ifelse ( Forma_Interaccion_Ag = "Aprendizaje")[ set agentes_que_ve_aprendizaje [ ] while [ cont < numero_agentes_que_ve][ set agente random numero-agente while [ member? agente agentes_que_ve_aprendizaje = true or agente = n][ set agente random numero-agente ] set agentes_que_ve_aprendizaje lput agente agentes_que_ve_aprendizaje set cont cont + 1 ] set cont 0 set n n + 1 ][ set n n + 1 ] ] ] end to mostrar_agentes_ve let cont 0 while [ cont < numero-agente][ ask turtle cont[ show (word " El agente tiene la forma de interacción : " Forma_Interaccion_Ag) show (word " los agentes que ve el agente son: " agentes_que_ve_aprendizaje ) set cont cont + 1 ] ] end ;---------------------------------------------------------- funciones de endoso-------------------------------------------------------------------------------------- ;-------------------------------------------------------------------LLenar valores para endosos items ---------------------------------------------------- to enviar_valor set Valor_para_endoso Endorsement_Value llenar_Valor_endosos Valor_para_endoso end to llenar_Valor_endosos [ Val] let longitud_vector 0 let longitud 0 if Valor_endosos = 0[ set Valor_endosos [ ] ] set longitud_vector length posibles_entradas set longitud length Valor_endosos ifelse (longitud < longitud_vector)[ set Valor_endosos lput Val Valor_endosos ][ show "ERROR Numero de endosos full" ] end ; Funcion para borrar los vectores de endosos de items guardados to Borrar_endoso_guardados_items set Nombre_endosos 0 set Valor_endosos 0 end ; ------------------------------------------------------------------Llenar valores endoso para agentes---------------------------------------------------------------- to llenar_valor_endosos_agente let longitud 0 set Nombre_Endoso_Agente Name_endorsement_agent set Valor_endosos_Agente Endorsement_Value_Agent if Vector_Nombres_endosos_Agente = 0[ set Vector_Nombres_endosos_Agente [ ] ] if Vector_Valores_endosos_Agente = 0 [ set Vector_Valores_endosos_Agente [ ] ] set longitud length Vector_Nombres_endosos_Agente ifelse (longitud < 2)[ set Vector_Nombres_endosos_Agente lput Nombre_Endoso_Agente Vector_Nombres_endosos_Agente set Vector_Valores_endosos_Agente lput Valor_endosos_Agente Vector_Valores_endosos_Agente ][ Show "Vector de endosos para agentes sin espacio" ] end ; Funcion para borrar los vectores de endosos de agentes guardados to Borrar_endoso_guardados_agentes set Vector_Nombres_endosos_Agente 0 set Vector_Valores_endosos_Agente 0 end to llenar_valor_endosos_Items let longitud 0 if Vector_Nombres_endosos_Items = 0[ set Vector_Nombres_endosos_Items [ ] ] if Vector_Valores_endosos_Items = 0 [ set Vector_Valores_endosos_Items [ ] ] set longitud length Vector_Nombres_endosos_Items ifelse (longitud < 2)[ set Vector_Nombres_endosos_Items lput endorsemet_per_each_item Vector_Nombres_endosos_Items set Vector_Valores_endosos_Items lput Value_endorsement_item Vector_Valores_endosos_Items ][ Show "Vector de endosos para Items sin espacio" ] end ; Funcion para borrar los vectores de endosos de agentes guardados to Borrar_Valores_guardados_Endoso_Items set Vector_Nombres_endosos_Items 0 set Vector_Valores_endosos_Items 0 end ;-----------------------------------------------------------------CAlculo del endoso-------------------------------------------------------------------------------- to-report endoso [ list_endoso num] let vect[ ] let positivos [ ] let negativos[ ] let sum_pos 0 let sum_neg 0 let base 0 let longitud 0 let cont 0 let a 0 let b 0 let endosado 0 set vect list_endoso set base num set longitud length vect while [cont < longitud ] [ set a item cont list_endoso ifelse (a >= 0)[ set b num ^ a set positivos lput b positivos ][ set b num ^ abs a set negativos lput b negativos ] set cont cont + 1 ] set sum_pos sum positivos set sum_neg sum negativos set endosado sum_pos - sum_neg report endosado end ; ---------------------------------------------funcion para calcular el valor de los endosos -------------------------- ; primera entrada a la funcion vector a calcular endosos, segunda vector de datos donde están las etiquetas , tercera vector de datos donde estan el valor de las etiquetas to-report calculo_endosos_guardados [ vect vect_etiquetas vect_valores ] let endosos_de_items_guardados [ ] let Vector_datos [ ] let vector_Valor_endosos_items_guardados [ ] let valor_vector_deendoso 0 let endoso_individual 0 let valor_item_individual 0 let longitud1 0 let longitud2 0 let cont1 0 let cont2 0 set endosos_de_items_guardados vect set Vector_datos vect_etiquetas set longitud1 length endosos_de_items_guardados set longitud2 length Vector_datos while [ cont1 < longitud1][ set endoso_individual item cont1 endosos_de_items_guardados while [ cont2 < longitud2 ][ ifelse (endoso_individual = item cont2 Vector_datos)[ set valor_item_individual item cont2 vect_valores set vector_Valor_endosos_items_guardados lput valor_item_individual vector_Valor_endosos_items_guardados set cont2 longitud2 ][ set cont2 cont2 + 1 ] ] set cont2 0 set cont1 cont1 + 1 ] ;show vector_Valor_endosos_items_guardados set valor_vector_deendoso endoso vector_Valor_endosos_items_guardados base_endoso report valor_vector_deEndoso end ; ---------------------------------------------------Funcion que calcula el valor de los endosos de los items guardados ------------------------------------- to calcular_endosos_items_guardados let cont1 0 let cont2 0 let cont3 0 let longitud 0 let longitud1 0 let vect_endosos_guardado [ ] let valor_del_endoso 0 let EndosoNuevo [ ] let endosoSuma [ ] let Vector_de_endosos_recientes [ ] let ultimo_endoso 0 while [cont1 < numero-agente][ ask turtle cont1 [ set endosos_item [ ] set longitud length Nomb_item_Ve_Ag if memoria_endosos_items = 0 [ set memoria_endosos_items [ ] while [cont3 < longitud ][ set memoria_endosos_items lput [ ] memoria_endosos_items set cont3 cont3 + 1 ] set cont3 0 ] while [ cont2 < longitud ][ set vect_endosos_guardado item cont2 Endosos_a_item_X_respuesta set valor_del_endoso calculo_endosos_guardados vect_endosos_guardado Vector_Nombres_endosos_Items Vector_Valores_endosos_Items set EndosoNuevo item cont2 memoria_endosos_items set EndosoNuevo lput valor_del_endoso EndosoNuevo set longitud1 length EndosoNuevo if longitud1 > memoria_endoso_item [ set EndosoNuevo remove-item 0 EndosoNuevo ] set memoria_endosos_items replace-item cont2 memoria_endosos_items EndosoNuevo set cont2 cont2 + 1 ] set cont2 0 while [ cont3 < longitud ][ set Vector_de_endosos_recientes item cont3 memoria_endosos_items set ultimo_endoso last Vector_de_endosos_recientes set endosos_item lput ultimo_endoso endosos_item set cont3 cont3 + 1 ] set cont3 0 ] set cont1 cont1 + 1 ] end ; función sumar dos vectores to-report SumaVect [ vect1 vect2] let sumarlos [ ] let primerarespuesta [ ] let cont 0 let cont2 0 let longitud1 0 let longitudVEct1 0 let longitud2 0 let longitudVect2 0 let longitud 0 let a 0 let b 0 let c 0 let remplazar 0 set longitud1 length vect1 set longitud2 length vect2 ifelse (longitud1 > longitud2)[ set longitudVEct1 longitud2 while [ cont < longitudVEct1 ][ set a item cont vect1 set b item cont vect2 set c a + b set primerarespuesta lput c primerarespuesta set cont cont + 1 ] while [ cont2 < longitudVEct1][ set remplazar item cont2 primerarespuesta set sumarlos lput remplazar sumarlos set cont2 cont2 + 1 ] while [ cont2 < longitud1][ set remplazar item cont2 vect1 set sumarlos lput remplazar sumarlos set cont2 cont2 + 1 ] ] [ set longitudVect2 longitud1 while [ cont < longitudVect2 ][ set a item cont vect1 set b item cont vect2 set c a + b set primerarespuesta lput c primerarespuesta set cont cont + 1 ] while [ cont2 < longitudVect2][ set remplazar item cont2 primerarespuesta set sumarlos lput remplazar sumarlos set cont2 cont2 + 1 ] while [ cont2 < longitud2][ set remplazar item cont2 vect2 set sumarlos lput remplazar sumarlos set cont2 cont2 + 1 ] ] if longitud1 = longitud2 [ while [ cont < longitud1][ set a item cont vect1 set b item cont vect2 set c a + b set sumarlos lput c sumarlos set cont cont + 1 ] ] report sumarlos end ; ---------------------------------------------------Funcion que calcula el valor de los endosos de los items guardados ------------------------------------- to calcular_endosos_Agentes_guardados let cont1 0 let cont2 0 let cont3 0 let longitud 0 let longitud1 0 let vect_endosos_guardado [ ] let valor_del_endoso 0 let EndosoNuevo [ ] let endosoSuma [ ] let Vector_de_endosos_recientes [ ] let ultimo_endoso 0 while [cont1 < numero-agente ][ ask turtle cont1 [ ifelse (Forma_Interaccion_Ag = "Aprendizaje")[ set endosos_agentes [ ] if memoria_endosos_Agentes = 0 [ set memoria_endosos_Agentes [ ] while [ cont3 < numero_agentes_que_ve][ set memoria_endosos_Agentes lput [ ] memoria_endosos_Agentes set cont3 cont3 + 1 ] set cont3 0 ] set longitud length Etiquetas_Agente_entrada while [ cont2 < longitud][ set vect_endosos_guardado item cont2 Etiquetas_Agente_entrada set valor_del_endoso calculo_endosos_guardados vect_endosos_guardado Vector_Nombres_endosos_Agente Vector_Valores_endosos_Agente set EndosoNuevo item cont2 memoria_endosos_Agentes set EndosoNuevo lput valor_del_endoso EndosoNuevo set longitud1 length EndosoNuevo if longitud1 > numero_agentes_que_ve [ set EndosoNuevo remove-item 0 EndosoNuevo ] set memoria_endosos_Agentes replace-item cont2 memoria_endosos_Agentes EndosoNuevo set cont2 cont2 + 1 ] set cont2 0 while [ cont3 < longitud ][ set Vector_de_endosos_recientes item cont3 memoria_endosos_Agentes set ultimo_endoso last Vector_de_endosos_recientes set endosos_agentes lput ultimo_endoso endosos_agentes set cont3 cont3 + 1 ] set cont3 0 set cont1 cont1 + 1 ][ set cont1 cont1 + 1 ] ] ] end ; ------------------------------------------------ Funcion ingresar a sistema de recomendados ------------------------------------------------- to enviar_a_recomendados let cont 0 let vect_endosos_it [ ] let posicion 0 let item_enviar 0 let vect_recomend [ ] let aleator 0 let longitud 0 if sistema_recomendado = 0 [ set sistema_recomendado [ ] ] while [ cont < numero-agente][ ask turtle cont [ if Forma_enviar_SistRecomen = "Bueno"[ set vect_endosos_it hallar_mayor endosos_item set posicion item 1 vect_endosos_it set item_enviar item posicion Nomb_item_Ve_Ag set vect_recomend lput cont vect_recomend set vect_recomend lput item_enviar vect_recomend set sistema_recomendado lput vect_recomend sistema_recomendado show (Word "el agente "cont " cuya forma de enviar es "Forma_enviar_SistRecomen " envio el vector " vect_recomend " al sistema recomendado") ] if Forma_enviar_SistRecomen = "Malo"[ set vect_endosos_it hallar_menor endosos_item set posicion item 1 vect_endosos_it set item_enviar item posicion Nomb_item_Ve_Ag set vect_recomend lput cont vect_recomend set vect_recomend lput item_enviar vect_recomend set sistema_recomendado lput vect_recomend sistema_recomendado show (Word "el agente "cont " cuya forma de enviar es "Forma_enviar_SistRecomen " envio el vector " vect_recomend " al sistema recomendado") ] if Forma_enviar_SistRecomen = "Regular"[ set longitud length Nomb_item_Ve_Ag set aleator random longitud set item_enviar item aleator Nomb_item_Ve_Ag set vect_recomend lput cont vect_recomend set vect_recomend lput item_enviar vect_recomend set sistema_recomendado lput vect_recomend sistema_recomendado show (Word "el agente "cont " cuya forma de enviar es "Forma_enviar_SistRecomen " envio el vector " vect_recomend " al sistema recomendado") ] ] set cont cont + 1 set vect_recomend [ ] ] end ;------------------------------------------------------Funcion Verificar igualdad de todos los elementos en un vector------------------------------------ ; Dada un vector la funcion verificarar si todos los elementos son iguales y devolvera si todos son iguales true, si no son iguales false to-report verificar_elementos_iguales [ vect] let lista_ordenada [ ] let longitud 0 set lista_ordenada sort-by [?1 > ?2] vect set longitud length lista_ordenada ifelse (item 0 lista_ordenada = item (longitud - 1) lista_ordenada)[ report true ][ report false ] end ;------------------------------------------------------------------------------------------------------------------------------------------------------------- ;------------------------------------------------------ENDOSOS ------------------------------------------------------------------------------------ ;----------------------------------------funcion llenar vector de etiquetas para endosos de agentes ------------------------------------- ; funcion que dado el vector de etiquetas para endosar los agentes, separa en diferentes espacios para crear un vector almacenado en cada agente, que obtendra cada ; una de los resultados anteriores que tiene los agente que ve cada agente en aprendizaje to llenar_vector_con_etiquetas_Agentes [ vect ] let longitud 0 let cont 0 let cont2 0 let variable 0 let doble_vec_nu 0 let doble_vec_nu2 [ ] let vector [ ] set longitud length vect if vector_etiquetas_por_entrada_Agente = 0[ set vector_etiquetas_por_entrada_Agente [ ] ] ifelse(vector_etiquetas_por_entrada_Agente = [ ] )[ while [ cont2 < longitud][ set variable item cont2 vect set vector lput variable vector set vector_etiquetas_por_entrada_Agente lput vector vector_etiquetas_por_entrada_Agente set cont2 cont2 + 1 set vector [ ] ] set cont2 0 show vector_etiquetas_por_entrada_Agente ][ while [cont2 < longitud ] [ set variable item cont2 vect set doble_vec_nu item cont2 vector_etiquetas_por_entrada_Agente set doble_vec_nu lput variable doble_vec_nu set doble_vec_nu2 lput doble_vec_nu doble_vec_nu2 set cont2 cont2 + 1 ] set vector_etiquetas_por_entrada_Agente doble_vec_nu2 show vector_etiquetas_por_entrada_Agente ] end ; Funcion Suma ; Dados dos vectores a la funcion devolverá la suma de los vectores----------------------------------- to-report suma_Vectores [vect1 vect2] let sumados [ ] let var1 0 let var2 0 let suma_vect 0 let longitud_vect1 0 let longitud_vect2 0 let cont 0 set longitud_vect1 length vect1 set longitud_vect2 length vect2 ifelse(longitud_vect1 = longitud_vect2)[ while [ cont < longitud_vect1][ set var1 item cont vect1 set var2 item cont vect2 set suma_vect (var1 + var2) set sumados lput suma_vect sumados set cont cont + 1 ] ][ show "NO ES POSIBLE REALIZAR LA SUMA LAS LONGITUDES DE LOS VECTORES DEBEN SER IGUALES" ] report sumados end ;------------------------------------------------------------------------------------------------------ to limpiar_vector_etiquetas let cont 0 while[ cont < numero-agente][ ask turtle cont [ ifelse (Forma_Interaccion_Ag = "Aprendizaje")[ set vector_etiquetas_por_entrada_Agente 0 set cont cont + 1 ][ set cont cont + 1 ] ] ] end ;---------------------------------------------------------------Funcion Interacion Forma 1 de los agentes en aprendizaje-------------------------------------------- ;------------------------------------------------------------------------------------------------------------------------------------------------------------------- to interaccion_1_Aprendizaje [ Agent ] let cont 0 let vec_endosos_mayores_agentes [ ] let variable_posicion 0 let agente_Mayor_endoso 0 let item_interactuar 0 let lugar_para_cambiar [ ] let item_para_cambiar 0 let posicion_inter_en_sistRecomen [ ] ask turtle Agent [ set vec_endosos_mayores_agentes hallar_mayor endosos_agentes set variable_posicion item 1 vec_endosos_mayores_agentes set agente_Mayor_endoso item variable_posicion agentes_que_ve_aprendizaje set posicion_inter_en_sistRecomen item agente_Mayor_endoso sistema_recomendado set item_interactuar item 1 posicion_inter_en_sistRecomen ifelse ( member? item_interactuar Nomb_item_Ve_Ag = false)[ show "-------------------------------------------------------------------------------------------------" show (word "el agente " Agent) show (word "Interactua con el agente "agente_Mayor_endoso) show (word "con el item " item_interactuar) show (word "que reemplazará a uno de sus items" Nomb_item_Ve_Ag ) show "-------------------------------------------------------------------------------------------------" ;--------------remplazo del item-interactua al vector de item donde interactuo ------------ set lugar_para_cambiar hallar_menor endosos_item set item_para_cambiar item 1 lugar_para_cambiar set endosos_item replace-item item_para_cambiar endosos_item 0 show Nomb_item_Ve_Ag set Nomb_item_Ve_Ag replace-item item_para_cambiar Nomb_item_Ve_Ag item_interactuar show Nomb_item_Ve_Ag show endosos_item ][ show "No interactua" set contador_no_Interaccion contador_no_Interaccion + 1 ] ] end ;----------------------------------------------------------------------------------------funcion vectores iguales --------------------------- ; funcion que dados dos vectores de igual longitud retorna true si son iguales y false si son diferentes to-report vectores_iguales [ vect1 vect2] let cont 0 let contador 0 let longitud1 0 let longitud2 0 let variable 0 set longitud1 length vect1 set longitud2 length vect2 ifelse (longitud1 = longitud2)[ while [ cont < longitud1 ][ set variable item cont vect1 ifelse (member? variable vect2 )[ set contador contador + 1 set cont cont + 1 ][ set cont longitud1 report false ] ] if contador = longitud1 [ report true ] ][ report false ] end ;-----------------------------------Sacar_elementos_diferentes ----------------------------------------------- ; funcion que dados dos vectores de igual longitud devuelve un vector con los elementos presentes en el vector 2 que no ; estan en el vector 1 to-report Sacar_elementos_diferentes [ vect1 vect2] let cont 0 let longitud1 0 let longitud2 0 let variable 0 let vector_respuesta [ ] set longitud1 length vect1 set longitud2 length vect2 ifelse (longitud1 = longitud2 )[ while [ cont < longitud1][ set variable item cont vect2 ifelse (member? variable vect1)[ set cont cont + 1 ] [ set vector_respuesta lput variable vector_respuesta set cont cont + 1 ] ] report vector_respuesta ][ report "los vectores deben ser de igual longitud " ] end ;-------------------------------------------------- ;Segundo modo de interaccion de los agentes en aprendizaje con el sistema de recomendados to interaccion_2_Aprendizaje [Agent] let cont 0 let aleator 0 let variable_sist_recom [ ] let longitud_sist_recom 0 let item_tomado_de_sist_recom 0 let agente_tomado_de_sist_recom 0 let vect_item_cambiar [ ] let item_para_cambiar 0 let vect_agente_cambiar [ ] let agente_para_cambiar 0 let agentes_no_guardados [ ] ask turtle Agent [ if memoria = 0 [ set memoria [ ] ] set agentes_no_guardados vector_no_estan numero-agente agentes_que_ve_aprendizaje memoria cont set longitud_sist_recom length agentes_no_guardados ifelse (longitud_sist_recom > 0)[ set aleator random longitud_sist_recom ;show aleator set variable_sist_recom item aleator sistema_recomendado show agentes_que_ve_aprendizaje show (Word "El numero aleatorio es "aleator) show variable_sist_recom set agente_tomado_de_sist_recom item 0 variable_sist_recom set item_tomado_de_sist_recom item 1 variable_sist_recom if member? item_tomado_de_sist_recom Nomb_item_Ve_Ag = false [ set vect_item_cambiar hallar_menor endosos_item set item_para_cambiar item 1 vect_item_cambiar show (Word "Endoso anterior " endosos_item) set endosos_item replace-item item_para_cambiar endosos_item 0 show Nomb_item_Ve_Ag set Nomb_item_Ve_Ag replace-item item_para_cambiar Nomb_item_Ve_Ag item_tomado_de_sist_recom show Nomb_item_Ve_Ag show endosos_item ] if member? agente_tomado_de_sist_recom agentes_que_ve_aprendizaje = false [ set vect_agente_cambiar hallar_menor endosos_agentes set agente_para_cambiar item 1 vect_agente_cambiar show (Word "Endoso anterior " endosos_agentes) set endosos_agentes replace-item agente_para_cambiar endosos_agentes 0 show agentes_que_ve_aprendizaje set agentes_que_ve_aprendizaje replace-item agente_para_cambiar agentes_que_ve_aprendizaje agente_tomado_de_sist_recom ] Memoria_aprendizaje memoria_Agentes agente_tomado_de_sist_recom show agentes_que_ve_aprendizaje show endosos_agentes show (Word "Memoria del agente es "memoria) set cont cont + 1 ][ Show "No hay interacción " set contador_no_Interaccion contador_no_Interaccion + 1 ] ] end ; funcion que dado un numero y un vector devuelve los numeros que no esten dentro del vector tomando como limite superior de numeros a el numero y los elementos ; no pueden estar en vect_comp ni ser actual to-report vector_no_estan [num vect vect_comp actual] let longitud 0 let agente_verificar 0 let vector_no_esta [ ] let cont 0 set longitud length vect while [cont < num][ ifelse (member? cont vect = true or member? cont vect_comp or cont = actual)[ set cont cont + 1 ][ set vector_no_esta lput cont vector_no_esta set cont cont + 1 ] ] report vector_no_esta end ;------------------------------------funcion memoria aprendizaje -------------------------------------------------------------------------- ;funcion que llena la memoria de los ultimos num agentes que fueron tomados por el agente en aprendizaje e incluye el mas reciente ; el cual es pasado a la funcion to Memoria_aprendizaje [ num agente] let longitud 0 if memoria = 0[ set memoria [ ] ] set longitud length memoria ifelse (longitud < num)[ set memoria lput agente memoria ][ set memoria remove-item 0 memoria set memoria lput agente memoria ] end ; funcion que llena la variable buenos resultados actual con el numero de aquellos agentes que dieron buenos resultados to resultados_graficar let buenos 0 let malos 0 let cont 0 let resul 0 while [ cont < numero-agente][ ask turtle cont [ ifelse (Respuesta_agente = entrada) [ set buenos buenos + 1 set cont cont + 1 ][ set malos malos + 1 set cont cont + 1 ] ] ] set Buenos_resul_actual buenos set Malos_resul_actual malos show (word "Numero de Agentes con resultados buenos " Buenos_resul_actual) show (word "Numero de Agentes con resultados Malos " Malos_resul_actual) end ; funcion que grafica las variables de Buenos resultados y malos resultados to grafica ;set-plot-y-range 0 numero-agente set-current-plot "Good answers and Bad of the Agents during the simulation" set-current-plot-pen "Good Answer" plot Buenos_resul_actual set-current-plot-pen "Bad Answer" plot Malos_resul_actual set-current-plot-pen "Structural change" plot cambio end to prueff let cont 0 while [cont < numero-agente][ ask turtle cont [ show Nomb_item_Ve_Ag ] set cont cont + 1 ] show numero-agente end ;Funcion que devuelve un vector que contiene todos aquellos items que fueron descartados durante la simulación to-report descartados let cont 0 let cont2 0 let item_descartados 0 let vect_descartados [ ] while [ cont < numero_items][ while [ cont2 < numero-agente][ ask turtle cont2 [ ifelse ( member? cont Nomb_item_Ve_Ag = false)[ set item_descartados item_descartados + 1 set cont2 cont2 + 1 ][ set cont2 cont2 + 1 ] ] ] if item_descartados = numero-agente [ set vect_descartados lput cont vect_descartados ] set cont2 0 set item_descartados 0 set cont cont + 1 ] report vect_descartados end ; funcion que dada un numero incluira ese numero de veces, items que fueron descartados en el numero antes mencionado de agentes to incluir_items_descartados let vec_descartados [ ] let cont 0 let longitud 0 let aleator1 0 let aleator2 0 let item_incluir 0 let vect_mayor_endoso [ ] let posicion 0 set vec_descartados descartados set longitud length vec_descartados set aleator1 random longitud ifelse (longitud > 0)[ set item_incluir item aleator1 vec_descartados set aleator2 random numero-agente ask turtle aleator2 [ set vect_mayor_endoso hallar_mayor endosos_item set posicion item 1 vect_mayor_endoso show (Word "Mutacion del agente -----> " aleator2) show (Word "Item anteriores " Nomb_item_Ve_Ag) set Nomb_item_Ve_Ag replace-item posicion Nomb_item_Ve_Ag item_incluir show (Word "Item Nuevos que ve agente "aleator2 " " Nomb_item_Ve_Ag) ] ][ show "No hay items descartados" ] end ; funcion con los procedimientos que ejecutará el boton de cambio estructural to cambio_estructural let items_nuevos [ ] ifelse (seleccion_items = "Variying")[ set items_nuevos shuffle probabilidad_items set probabilidad_items items_nuevos Respuestas_Items ][ generar_items ] end ; -----------------------------------------------------------------Función sacar promedios de resultados buenos ------------------------------------------------- to promedio_buenos let suma 0 let longitud 0 let promedio_actual 0 set suma sum vector_resultados_actual set longitud length vector_resultados_actual set promedio_actual suma / longitud set promedio promedio_actual end ; ---------------------------------------------------------------Función para consultar resultado promedio o valor del dia ----------------------------------- to consultar let dato_consulta 0 let num 0 let porcent "%" set num consult_day ifelse(num > dias )[ set resp_consul "Error numero dia no existe" ][ set dato_consulta item num vector_resultados_actual set resp_consul dato_consulta ] end ; ---------------------------------------------------------------------funcion para consultar el porcentaje de respuestas buenas durante la simulación---------------- to porcentaje_buenos let longitud 0 let cont 0 let bueno_en_modelo 0 let calc_porcent 0 let porcent "%" set longitud length vector_resultados_actual while [ cont < longitud ][ if item cont vector_resultados_actual > 10 [ set bueno_en_modelo bueno_en_modelo + 1 ] set cont cont + 1 ] if porcentaje_buenos_modelo = 0[ set porcentaje_buenos_modelo [ ] ] set calc_porcent (bueno_en_modelo / cont) * 100 show calc_porcent show bueno_en_modelo show cont set porcentaje_buenos_modelo sentence calc_porcent porcent end to ppruebaBorrar let cont 0 while [cont < numero-agente][ ask turtle cont [ show Endosos_a_item_X_respuesta ;show memoria_endosos_items ;show Nomb_item_Ve_Ag ;show endosos_item ;show Etiquetas_Agente_entrada ;show memoria_endosos_Agentes ;show endosos_agentes ; show Respuestas_enviadas_items_Ag ;show agentes_que_ve_aprendizaje ; show vector_etiquetas_por_entrada_Agente ] set cont cont + 1 ] end to ver show Buenos_resul_actual show Malos_resul_actual end to no_interacción_promedio let longitud 0 let suma 0 set longitud length No_interacciones set suma sum No_interacciones set promedio_no_interaccion suma / longitud ;show longitud show (word "Promedio de no interacciones: "promedio_no_interaccion) show (word "Vector con el número de agentes que no interactuaron por día ") show No_interacciones end to asignar_vector_etiquetas_entradas let longitud 0 let longitud2 0 let cont 0 let cont2 0 let transicion [ ] set longitud length vector_entradas set posibles_entradas [ ] while[cont < longitud][ set transicion item cont vector_entradas set longitud2 length transicion while [ cont2 < longitud2][ set posibles_entradas lput item cont2 transicion posibles_entradas set cont2 cont2 + 1 ] set cont2 0 set cont cont + 1 ] show posibles_entradas end to enviar_Posibles_entradas set Numero_datos_entrada Number_characteristics set Valores_entradas Name_endorsement enviar_Entrada asignar_vector_etiquetas_entradas end @#$#@#$#@ GRAPHICS-WINDOW 709 10 1062 384 16 16 10.4 1 10 1 1 1 0 1 1 1 -16 16 -16 16 0 0 1 ticks 30.0 BUTTON 11 904 117 937 Star or stop iniciar T 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 28 845 108 878 Setup setup NIL 1 T OBSERVER NIL NIL NIL NIL 1 INPUTBOX 11 1239 108 1299 Total_Number_Agents 20 1 0 Number MONITOR 704 800 994 845 Answer respuesta 17 1 11 INPUTBOX 26 1453 151 1513 Number_observed_Items 3 1 0 Number MONITOR 674 738 1414 783 System of Recomended sistema_recomendado 17 1 11 INPUTBOX 19 1868 174 1928 total_number_ii 20 1 0 Number CHOOSER 197 1926 346 1971 random_method_Sel_ii random_method_Sel_ii "New" "Variying" 1 INPUTBOX 384 1839 499 1899 items_prob_1 6 1 0 Number INPUTBOX 507 1840 624 1900 items_prob_0 7 1 0 Number MONITOR 673 599 1791 644 Answer of the items vector_respuestas_items 17 1 11 MONITOR 675 670 1005 715 Error probabilities of each item probabilidad_items 17 1 11 TEXTBOX 677 581 896 609 Response items from the entry 11 0.0 1 TEXTBOX 676 647 892 675 Error probabilities of each item 11 0.0 1 BUTTON 16 995 194 1028 Structural Change Manual cambio_estructural NIL 1 T OBSERVER NIL NIL NIL NIL 1 TEXTBOX 15 1048 202 1089 Button for generate structural change manually 11 0.0 1 MONITOR 257 253 523 298 Entry entrada 17 1 11 INPUTBOX 123 1169 334 1229 Number_Active_Agents 0 1 0 Number INPUTBOX 392 1166 602 1226 Number_Pasive_Agents 0 1 0 Number MONITOR 337 1442 646 1487 Number_Learning_Agents Agentes_Aprendizaje 17 1 11 INPUTBOX 123 1233 205 1293 Ac_Good 0 1 0 Number INPUTBOX 208 1233 296 1293 Ac_Bad 0 1 0 Number INPUTBOX 392 1230 474 1290 Pa_Good 0 1 0 Number INPUTBOX 476 1230 558 1290 Pa_Bad 0 1 0 Number INPUTBOX 338 1489 441 1549 Ap_Good 20 1 0 Number INPUTBOX 443 1488 546 1548 Ap_Bad 0 1 0 Number MONITOR 298 1248 377 1293 Ac_Random Ac_Regular 17 1 11 MONITOR 560 1242 642 1287 Pa_Random Pa_Regular 17 1 11 MONITOR 547 1503 646 1548 Ap_Random Ap_Regular 17 1 11 INPUTBOX 396 844 542 904 number_problems_per_day 20 1 0 Number TEXTBOX 414 906 528 962 number of issue resolved by day\n\"Use positive integer number\" 11 0.0 1 INPUTBOX 167 1454 314 1514 Number_observed_Agents 3 1 0 Number INPUTBOX 139 842 245 902 endorsement_base 1 1 0 Number INPUTBOX 76 1686 217 1746 Time_memory 5 1 0 Number CHOOSER 11 1599 125 1644 probability_using_RS probability_using_RS 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 3 PLOT 669 10 1751 385 Good answers and Bad of the Agents during the simulation Days passed Number of agents 0.0 10.0 0.0 10.0 true true "" "grafica" PENS "Good Answer" 1.0 0 -15040220 true "" "" "Bad Answer" 1.0 0 -3844592 true "" "" "Structural change" 1.0 0 -14454117 true "" "" INPUTBOX 255 845 373 905 frequency_mutation 0.3 1 0 Number INPUTBOX 294 1669 446 1729 memory_endorsement_item 6 1 0 Number INPUTBOX 459 1670 621 1730 memory_endorsement_Agent 6 1 0 Number CHOOSER 260 991 404 1036 form_introduction_SC form_introduction_SC "Manual" "Automatic" 0 INPUTBOX 469 985 561 1045 Days_SC 40 1 0 Number MONITOR 674 531 862 576 Days of simulation dias 17 1 11 TEXTBOX 259 906 384 976 Proporcion for introducing discarded item\n\"Use real number between 0 y 1\" 11 0.0 1 TEXTBOX 143 911 255 967 Number for the base used by the endorsement \n\"Use Real number\" 11 0.0 1 TEXTBOX 90 819 663 838 ---------------------------------General variables model-------------------------------------------------- 15 0.0 1 TEXTBOX 122 833 137 973 |\n|\n|\n|\n|\n|\n|\n|\n|\n|\n 11 104.0 1 TEXTBOX 5 963 688 983 -------------------------------------------------------Structural change ---------------------------------------------------- 15 103.0 1 TEXTBOX 253 988 403 1006 NIL 11 0.0 1 TEXTBOX 239 1049 417 1091 Choose the type of structural change \"Manual or Automatic\" 11 0.0 1 TEXTBOX 439 1049 657 1105 Number of days to which an automatic change will occur estuctural \"Use positive integer number\" 11 0.0 1 TEXTBOX 3 977 153 1089 |\n|\n|\n|\n|\n|\n|\n| 11 103.0 1 TEXTBOX 4 1082 669 1101 ---------------------------------------------------Agents Variables ---------------------------------------------------------- 15 103.0 1 TEXTBOX 11 1302 113 1381 Total number of agents in the model \"Use positive integer number\" 11 0.0 1 TEXTBOX 13 1521 163 1577 Number of Items observed by agent\n\"Use positive integer number\" 11 0.0 1 TEXTBOX 164 1521 334 1591 Number of Agents observed by learning agents \"Use positive integer number\" 11 0.0 1 TEXTBOX 3 1035 18 2099 |\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n| 11 103.0 1 TEXTBOX 659 965 674 2099 |\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n 11 103.0 1 TEXTBOX 287 1736 456 1792 Endorsements last number of items that will remind each agent\n\"Use Natural number\" 11 0.0 1 TEXTBOX 462 1734 670 1804 Number of endorsements last agents who recall learning agents\n\"Use Natural number\" 11 0.0 1 TEXTBOX 56 1747 268 1817 The last number of agents who recall learning agents once taken the recommended system\n\"Use Natural number \" 11 0.0 1 TEXTBOX 330 1106 480 1125 Type of Agents 15 103.0 1 TEXTBOX 125 1143 331 1185 Number of Active Agents\n\"Use positive integer number or zero\" 11 0.0 1 TEXTBOX 209 1303 297 1373 Bad Active Agents \n\"Use natural number\" 11 0.0 1 TEXTBOX 123 1305 212 1375 Good Active Agents \n\"Use natural number\" 11 0.0 1 TEXTBOX 298 1302 387 1358 Random Active Agents \n\"Active remaining number\" 11 0.0 1 TEXTBOX 391 1297 471 1367 Good Pasive Agents \n\"Use natural number\" 11 0.0 1 TEXTBOX 478 1297 562 1367 Bad Pasive Agents \n\"Use natural number\" 11 0.0 1 TEXTBOX 561 1295 648 1365 Random Pasive Agents\n\"Pasive remaining number\" 11 0.0 1 TEXTBOX 114 1099 129 1418 |\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n 11 0.0 1 TEXTBOX 122 1375 381 1403 Note: The sum of Good, Bad and Random Assets it must equal the number of active agents 11 14.0 1 TEXTBOX 384 1372 652 1400 Note: The sum of Good, Bad and Regulars Assets it must equal the number of pasive agents 11 15.0 1 TEXTBOX 115 1398 342 1416 -------------------------------------------- 15 0.0 1 TEXTBOX 397 1138 614 1180 Number of Pasive Agents\n\"Use positive integer or zero\" 11 0.0 1 TEXTBOX 343 1412 629 1454 Learning Agents Number type\n\"Remaining Agents that are not active or passive\" 11 0.0 1 TEXTBOX 340 1558 451 1628 Good Learning Agents \n\"Use natural number\" 11 0.0 1 TEXTBOX 445 1557 552 1627 Bad Learning Agents \n\"Use natural number\" 11 0.0 1 TEXTBOX 550 1558 655 1614 Random learning Agents\n\"Learning remaining number\" 11 0.0 1 TEXTBOX 347 1629 649 1660 Note: The sum of Good, Bad and Regulars Assets it must equal the number of learning agents 11 15.0 1 TEXTBOX 332 1394 347 1660 \n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n| 11 0.0 1 TEXTBOX 343 1650 673 1668 ---------------------------------------------------------------- 15 0.0 1 TEXTBOX 4 1134 118 1198 General variables of agents 15 103.0 1 TEXTBOX 5 1650 351 1668 ---------------Memory of the agents --------------------- 15 103.0 1 TEXTBOX 6 1803 667 1822 -------------------------------------------------------Items-------------------------------------------------------------------- 15 103.0 1 TEXTBOX 196 1128 346 1146 ACTIVE 11 0.0 1 TEXTBOX 472 1128 622 1146 PASIVE 11 0.0 1 TEXTBOX 446 1400 596 1418 LEARNING 11 0.0 1 TEXTBOX 15 1839 200 1895 total number of items in the model\n\"Use positive integer number\" 11 0.0 1 TEXTBOX 133 1595 341 1651 probability that learning type agents directly interact with the system recommended\n\"select a number between 0 and 1\" 11 0.0 1 TEXTBOX 197 1892 384 1934 Way in which the items were created 11 0.0 1 TEXTBOX 450 1818 600 1836 CONTROLADO 11 0.0 1 TEXTBOX 384 1907 494 1963 Number of Items with probability 1 Error\n\"Use positive integer number\" 11 0.0 1 TEXTBOX 508 1906 657 1962 Number of Items with probability 0 Error\n\"Use positive integer number\" 11 0.0 1 TEXTBOX 386 1955 659 2011 \nThe number of remaining items will be assigned to items with error probability 0.5, be aware that the sum of items must be equal to the number items 11 14.0 1 TEXTBOX 5 2006 682 2025 -----------------------------------------------------Answer ------------------------------------------------------------------- 15 0.0 1 TEXTBOX 676 723 826 741 System of recomended 11 0.0 1 BUTTON 1094 394 1361 432 Average agents with good response promedio_buenos NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 1093 435 1360 480 Average agents with good response promedio 2 1 11 INPUTBOX 1507 453 1734 513 consult_day 33 1 0 Number MONITOR 1506 407 1734 452 answer good per day resp_consul 17 1 11 BUTTON 1411 407 1493 440 consult consultar NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 1087 482 1345 515 % of good answer in the simulation porcentaje_buenos NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 1088 523 1345 568 percentage of good in the model porcentaje_buenos_modelo 4 1 11 INPUTBOX 551 841 650 901 days_of_simulation 200 1 0 Number TEXTBOX 550 911 656 967 Number of dia to stop simulation\n\"Use positive integer number\" 11 0.0 1 INPUTBOX 12 63 167 123 Number_characteristics 3 1 0 Number BUTTON 337 71 510 108 send endorsements enviar_Posibles_entradas NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 341 115 461 149 closing entry Vector_listo NIL 1 T OBSERVER NIL NIL NIL NIL 1 INPUTBOX 202 64 309 124 Name_endorsement Buena_tapiceria 1 0 String TEXTBOX 6 45 675 83 ---------------------------------------------Input Data ----------------------------------------------------------------------- 15 0.0 1 MONITOR 191 153 362 198 number of vector being filled Vector_numero 17 1 11 MONITOR 19 201 378 246 Possible model inputs vector_entradas 17 1 11 BUTTON 112 261 236 294 Generate entry generar_entrada NIL 1 T OBSERVER NIL NIL NIL NIL 1 TEXTBOX 5 306 537 325 --------------------- Endorsements value (Entry) ----------------------------------------- 13 0.0 1 INPUTBOX 24 382 243 442 Endorsement_Value 100 1 0 Number BUTTON 260 391 429 424 send Value enviar_valor NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 19 486 399 531 Value of endorsements Valor_endosos 17 1 11 TEXTBOX 479 314 494 832 |\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n| 11 0.0 1 TEXTBOX 480 306 668 325 --------Endorsements Agent----- 13 0.0 1 CHOOSER 487 351 661 396 Name_endorsement_agent Name_endorsement_agent "Good_Agent" "Bad_Agent" 1 CHOOSER 485 461 659 506 Endorsement_Value_Agent Endorsement_Value_Agent 10 9 8 7 6 5 4 3 2 1 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 13 BUTTON 486 554 656 603 Send endorsements data llenar_valor_endosos_agente NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 488 620 652 665 Etiquetas endosos Agentes Vector_Nombres_endosos_Agente 17 1 11 MONITOR 489 669 654 714 Valor etiqueta Agentes Vector_Valores_endosos_Agente 17 1 11 BUTTON 208 547 352 580 Delete data Borrar_endoso_guardados_items NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 522 744 624 777 Delete data Borrar_endoso_guardados_agentes NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 405 204 532 237 Delete data Borrar_Datos_de_entrada NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 4 10 221 43 Delete all data ca NIL 1 T OBSERVER NIL NIL NIL NIL 1 CHOOSER 16 633 195 678 endorsemet_per_each_item endorsemet_per_each_item "Good Item" "Bad Item" 1 INPUTBOX 26 692 181 752 Value_endorsement_item 1 1 0 Number BUTTON 199 685 307 738 Send llenar_valor_endosos_Items NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 291 759 393 792 Delete data Borrar_Valores_guardados_Endoso_Items NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 316 626 475 671 Name of endorsements items Vector_Nombres_endosos_Items 17 1 11 MONITOR 316 671 475 716 Endorsements value of items Vector_Valores_endosos_Items 17 1 11 CHOOSER 140 2037 271 2082 form_to_choice_answer form_to_choice_answer "Checked" "Random" 0 INPUTBOX 524 2028 654 2088 number_items_to_give_answer 3 1 0 Number BUTTON 780 391 906 424 No_interaccion no_interacción_promedio NIL 1 T OBSERVER NIL NIL NIL NIL 1 MONITOR 772 432 939 477 Average of not Interactions promedio_no_interaccion 17 1 11 TEXTBOX 242 13 392 41 Boton para borrar todos los datos guardados en el modelo 11 0.0 1 TEXTBOX 3 55 18 979 |\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n| 11 0.0 1 TEXTBOX 16 126 166 168 Number of observed characteristics of the objects\n\"Positive integer\" 11 0.0 1 TEXTBOX 196 123 346 153 Endorsements for each characteristic\n 11 0.0 1 TEXTBOX 205 209 355 227 NIL 11 0.0 1 TEXTBOX 521 72 671 100 Send Possible label for\nvector elements 11 0.0 1 TEXTBOX 518 113 668 155 Close vector of elements and move to the next vector of elements 11 0.0 1 TEXTBOX 23 262 173 290 Generate entry \nmanually 11 0.0 1 TEXTBOX 539 215 689 233 Delete input data 11 0.0 1 TEXTBOX 659 54 674 978 |\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n|\n| 11 0.0 1 TEXTBOX 368 542 442 598 Delete data of endorsements value (entry) 11 0.0 1 MONITOR 24 331 457 376 Etiquetas de entradas posibles_entradas 17 1 11 TEXTBOX 20 443 416 485 Give them in the same order that you gave the name of the endorsement \"Use Real Numbers\" 11 0.0 1 TEXTBOX 5 597 484 635 -----------------------------Endorsements for items----------------------------------- 15 0.0 1 TEXTBOX 38 616 188 634 Seleccionar Endoso 11 0.0 1 TEXTBOX 31 755 181 797 Enter the value of endorsement and press send\n\"Use Real Numbers\" 11 0.0 1 TEXTBOX 397 761 489 805 Delete data for endorsements of items 11 0.0 1 TEXTBOX 497 323 647 351 Select the type of endorsement 11 0.0 1 TEXTBOX 495 415 645 462 select the endorsement value for the above chousen information item 11 0.0 1 TEXTBOX 509 513 659 555 Press the button to send the information 11 0.0 1 TEXTBOX 504 787 654 815 Delete data of endorsements of Agent 11 0.0 1 TEXTBOX 74 821 224 839 NIL 11 0.0 1 TEXTBOX 5 822 155 840 ---------------------- 11 0.0 1 TEXTBOX 37 882 134 900 Setup model 11 0.0 1 TEXTBOX 31 940 119 982 Button for Star or stop simulation 11 0.0 1 TEXTBOX 5 2087 724 2113 ----------------------------------------------------------------------------------------------------------------------------------- 15 0.0 1 TEXTBOX 17 2040 138 2092 Select how each agent will give its response 11 0.0 1 TEXTBOX 292 2031 531 2101 If form_to_choice_answer is Checked indicate the number of items that use each agent to give his answer \"should be a natural number greater than or equal to Number_observed_Items\" 11 0.0 1 TEXTBOX 673 393 785 467 Press to see the average daily agents that do not interact. 11 0.0 1 TEXTBOX 943 404 1085 465 Press the button to see the\naverage agents\nwith good answers\nper day 11 0.0 1 TEXTBOX 946 503 1096 545 Press the button to see the percentage of good answers during simulation 11 0.0 1 TEXTBOX 1420 454 1505 526 Insert the day to consult and press consult 11 0.0 1 @#$#@#$#@ ## WHAT IS IT? (a general understanding of what the model is trying to show or explain) ## HOW IT WORKS (what rules the agents use to create the overall behavior of the model) ## HOW TO USE IT (how to use the model, including a description of each of the items in the Interface tab) ## THINGS TO NOTICE (suggested things for the user to notice while running the model) ## THINGS TO TRY (suggested things for the user to try to do (move sliders, switches, etc.) with the model) ## EXTENDING THE MODEL (suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.) ## NETLOGO FEATURES (interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features) ## RELATED MODELS (models in the NetLogo Models Library and elsewhere which are of related interest) ## CREDITS AND REFERENCES (a reference to the model's URL on the web if it has one, as well as any other necessary credits, citations, and links) @#$#@#$#@ default true 0 Polygon -7500403 true true 150 5 40 250 150 205 260 250 airplane true 0 Polygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15 arrow true 0 Polygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150 box false 0 Polygon -7500403 true true 150 285 285 225 285 75 150 135 Polygon -7500403 true true 150 135 15 75 150 15 285 75 Polygon -7500403 true true 15 75 15 225 150 285 150 135 Line -16777216 false 150 285 150 135 Line -16777216 false 150 135 15 75 Line -16777216 false 150 135 285 75 bug true 0 Circle -7500403 true true 96 182 108 Circle -7500403 true true 110 127 80 Circle -7500403 true true 110 75 80 Line -7500403 true 150 100 80 30 Line -7500403 true 150 100 220 30 butterfly true 0 Polygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240 Polygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240 Polygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163 Polygon -7500403 true true 162 150 200 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165 Polygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225 Circle -16777216 true false 135 90 30 Line -16777216 false 150 105 195 60 Line -16777216 false 150 105 105 60 car false 0 Polygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180 Circle -16777216 true false 180 180 90 Circle -16777216 true false 30 180 90 Polygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89 Circle -7500403 true true 47 195 58 Circle -7500403 true true 195 195 58 circle false 0 Circle -7500403 true true 0 0 300 circle 2 false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 cow false 0 Polygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167 Polygon -7500403 true true 73 210 86 251 62 249 48 208 Polygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123 cylinder false 0 Circle -7500403 true true 0 0 300 dot false 0 Circle -7500403 true true 90 90 120 face happy false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240 face neutral false 0 Circle -7500403 true true 8 7 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Rectangle -16777216 true false 60 195 240 225 face sad false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183 fish false 0 Polygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166 Polygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165 Polygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60 Polygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166 Circle -16777216 true false 215 106 30 flag false 0 Rectangle -7500403 true true 60 15 75 300 Polygon -7500403 true true 90 150 270 90 90 30 Line -7500403 true 75 135 90 135 Line -7500403 true 75 45 90 45 flower false 0 Polygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135 Circle -7500403 true true 85 132 38 Circle -7500403 true true 130 147 38 Circle -7500403 true true 192 85 38 Circle -7500403 true true 85 40 38 Circle -7500403 true true 177 40 38 Circle -7500403 true true 177 132 38 Circle -7500403 true true 70 85 38 Circle -7500403 true true 130 25 38 Circle -7500403 true true 96 51 108 Circle -16777216 true false 113 68 74 Polygon -10899396 true false 189 233 219 188 249 173 279 188 234 218 Polygon -10899396 true false 180 255 150 210 105 210 75 240 135 240 house false 0 Rectangle -7500403 true true 45 120 255 285 Rectangle -16777216 true false 120 210 180 285 Polygon -7500403 true true 15 120 150 15 285 120 Line -16777216 false 30 120 270 120 leaf false 0 Polygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195 Polygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195 line true 0 Line -7500403 true 150 0 150 300 line half true 0 Line -7500403 true 150 0 150 150 pentagon false 0 Polygon -7500403 true true 150 15 15 120 60 285 240 285 285 120 person false 0 Circle -7500403 true true 110 5 80 Polygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90 Rectangle -7500403 true true 127 79 172 94 Polygon -7500403 true true 195 90 240 150 225 180 165 105 Polygon -7500403 true true 105 90 60 150 75 180 135 105 plant false 0 Rectangle -7500403 true true 135 90 165 300 Polygon -7500403 true true 135 255 90 210 45 195 75 255 135 285 Polygon -7500403 true true 165 255 210 210 255 195 225 255 165 285 Polygon -7500403 true true 135 180 90 135 45 120 75 180 135 210 Polygon -7500403 true true 165 180 165 210 225 180 255 120 210 135 Polygon -7500403 true true 135 105 90 60 45 45 75 105 135 135 Polygon -7500403 true true 165 105 165 135 225 105 255 45 210 60 Polygon -7500403 true true 135 90 120 45 150 15 180 45 165 90 sheep false 15 Circle -1 true true 203 65 88 Circle -1 true true 70 65 162 Circle -1 true true 150 105 120 Polygon -7500403 true false 218 120 240 165 255 165 278 120 Circle -7500403 true false 214 72 67 Rectangle -1 true true 164 223 179 298 Polygon -1 true true 45 285 30 285 30 240 15 195 45 210 Circle -1 true true 3 83 150 Rectangle -1 true true 65 221 80 296 Polygon -1 true true 195 285 210 285 210 240 240 210 195 210 Polygon -7500403 true false 276 85 285 105 302 99 294 83 Polygon -7500403 true false 219 85 210 105 193 99 201 83 square false 0 Rectangle -7500403 true true 30 30 270 270 square 2 false 0 Rectangle -7500403 true true 30 30 270 270 Rectangle -16777216 true false 60 60 240 240 star false 0 Polygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108 target false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 Circle -7500403 true true 60 60 180 Circle -16777216 true false 90 90 120 Circle -7500403 true true 120 120 60 tree false 0 Circle -7500403 true true 118 3 94 Rectangle -6459832 true false 120 195 180 300 Circle -7500403 true true 65 21 108 Circle -7500403 true true 116 41 127 Circle -7500403 true true 45 90 120 Circle -7500403 true true 104 74 152 triangle false 0 Polygon -7500403 true true 150 30 15 255 285 255 triangle 2 false 0 Polygon -7500403 true true 150 30 15 255 285 255 Polygon -16777216 true false 151 99 225 223 75 224 truck false 0 Rectangle -7500403 true true 4 45 195 187 Polygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194 Rectangle -1 true false 195 60 195 105 Polygon -16777216 true false 238 112 252 141 219 141 218 112 Circle -16777216 true false 234 174 42 Rectangle -7500403 true true 181 185 214 194 Circle -16777216 true false 144 174 42 Circle -16777216 true false 24 174 42 Circle -7500403 false true 24 174 42 Circle -7500403 false true 144 174 42 Circle -7500403 false true 234 174 42 turtle true 0 Polygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210 Polygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105 Polygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105 Polygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87 Polygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210 Polygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99 wheel false 0 Circle -7500403 true true 3 3 294 Circle -16777216 true false 30 30 240 Line -7500403 true 150 285 150 15 Line -7500403 true 15 150 285 150 Circle -7500403 true true 120 120 60 Line -7500403 true 216 40 79 269 Line -7500403 true 40 84 269 221 Line -7500403 true 40 216 269 79 Line -7500403 true 84 40 221 269 wolf false 0 Polygon -16777216 true false 253 133 245 131 245 133 Polygon -7500403 true true 2 194 13 197 30 191 38 193 38 205 20 226 20 257 27 265 38 266 40 260 31 253 31 230 60 206 68 198 75 209 66 228 65 243 82 261 84 268 100 267 103 261 77 239 79 231 100 207 98 196 119 201 143 202 160 195 166 210 172 213 173 238 167 251 160 248 154 265 169 264 178 247 186 240 198 260 200 271 217 271 219 262 207 258 195 230 192 198 210 184 227 164 242 144 259 145 284 151 277 141 293 140 299 134 297 127 273 119 270 105 Polygon -7500403 true true -1 195 14 180 36 166 40 153 53 140 82 131 134 133 159 126 188 115 227 108 236 102 238 98 268 86 269 92 281 87 269 103 269 113 x false 0 Polygon -7500403 true true 270 75 225 30 30 225 75 270 Polygon -7500403 true true 30 75 75 30 270 225 225 270 @#$#@#$#@ NetLogo 5.2.0 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ default 0.0 -0.2 0 0.0 1.0 0.0 1 1.0 0.0 0.2 0 0.0 1.0 link direction true 0 Line -7500403 true 150 150 90 180 Line -7500403 true 150 150 210 180 @#$#@#$#@ 0 @#$#@#$#@