Student Schoolyard Clique¶
- Social networks with Graphs.jl
- 공간적 구조 보다 연결성이 중요한 경우
GraphSpace
를 제공
참조 : Multiagent Simulation And the MASON Library – 13page
소셜네트워크를 통해 서로 상호작용하는 학생들이 있는 교내 모델링¶
규칙 : 학생들은 무작위로 약간 돌아 다니며 학생들끼리 무리를 짓고 선생의 눈치를 보며 교내 중심에서 너무 멀리 벗어나지 않는다.¶
* `noise` : 무작위로 돌아 다니는 정도
* `teacher_attractor` : 교내 중심에서 너무 멀리 벗어나지 않는 정도
* `force` : 학생들 사이의 좋아하고 싫어하는 상호작용의 힘
* `max_force` : 학생들 사이의 상호작용의 최대치
소스 : https://github.com/mrchaos/julia_agents_examples
동작 환경¶
- Julia : v1.7.2
- Agents : v5.5.0
- InteractiveDynamics : v0.21.11
- GLMakie : v0.6.13
- CairoMakie : v0.8.13
- GLMakie를 사용하고 싶은 경우 설정에 대해서는 https://julialang.kr/?p=3684 를 참조
※ Schoolyard : 학교 운동장 또는 학교 캠퍼스는 교육, 과외 활동, 스포츠 및 게임에 사용되는 학교 경계 내의 지역입니다.
청소년 파벌 은 청소년 사이에서 발전하는 파벌 입니다 . 사회 과학에서 ” 파벌 “이라는 단어는 2~12명(평균 5명 또는 6명)의 그룹을 설명하는 데 사용됩니다. [1] Cliques는 구성원들이 일반적인 군중보다 더 많이 사회적으로 상호작용한다는 점에서 ” 군중 ” 과 구별됩니다 (예: 함께 어울리고, 쇼핑하고, 스포츠를 즐김). 반면에 군중은 평판으로 정의됩니다. ‘clique’ 또는 ‘cliquey’라는 단어는 관계형 공격성 을 설명하기 위해 일상 대화에서 자주 사용되지만또는 사회적으로 지배적인 10대 소녀 그룹의 냉소적이고 험담한 행동이 항상 정확한 것은 아닙니다. [2] 파벌과의 상호 작용은 성별, 민족 또는 인기에 관계없이 규범적인 사회 발전의 일부입니다. 파벌은 청소년기 에 가장 일반적으로 연구되지만 모든 연령대에 존재합니다.
아동은 청소년기 에 접어들면서 문화적, 생물학적, 인지적 변화로 인해 일상 생활에 변화가 생깁니다. 청소년들은 부모와 보내는 시간이 훨씬 줄어들고 구조화된 또래 활동과 구조화되지 않은 또래 활동 모두에 참여하기 시작합니다. [3] : p.151 부모나 다른 성인의 직접적인 존재 없이는 또래 네트워크가 대부분의 사회화 및 활동의 주요 맥락이 되기 시작합니다. B. Bradford Brown은 청소년의 심리적 발달 단계에 대해 설명했는데, 그는 단계 중 하나를 “적응” 단계라고 명명했는데, 이는 안정적인 소속을 찾고 또래로부터 승인을 얻는 것을 의미합니다. 그는 청소년들이 어린 아이들보다 또래와 더 많은 시간을 보내고 어린 아이들보다 또래 집단의 영향을 더 많이 받는다고 말했습니다. [4] 이러한 사회적 “파벌”은 청소년의 삶과 발달에 근본적으로 영향을 미칩니다. [3] : p.155–164 [5] 아마도 부모의 권위에 대한 외부 위협으로 인식되기 때문에,청소년 행동의 원치 않는 변화 는 종종 파벌에 기인합니다. [6] 이러한 상황에서 파벌은 “구성원에게 상당한 수준의 또래 압력을 보여주고 피상적인 차이에 기반한 배타적인 사람들의 사회적 그룹”으로 설명됩니다. [1] 그러나 연구원들은 이러한 가정에 의문을 제기합니다. 실험 과 민족지학 의 경험적 데이터를 기반으로 그들은 파벌 구조가 특정 학교 내에서 많은 우정 네트워크를 특징짓는다고 제안하지만, 이들 모두가 청소년에게 부정적인 영향을 미치는 것은 아닙니다. [7] 파벌에 대한 보다 중립적이고 과학적인 정의는 “같은 환경에서 다른 사람들보다 더 규칙적이고 강렬하게 상호 작용하는 사람들의 그룹”입니다.[1]
파벌은 2명에서 12명까지 다양할 수 있지만, 파벌은 일반적으로 연령, 성별, 인종, 사회적 지위 및 사회경제적 배경이 동일한 5명 또는 6명으로 구성됩니다. [1] [3] 청소년이 보다 정교하고 추상적인 인지 기능( 여기에 자세히 설명)을 개발함에 따라 공유 관심사 및 가치와 같은 그룹 구성원의 더 미묘한 결정 요인이 우선하여 개인을 더 미묘한 방식으로 범주화하고 사회적 해석을 더 잘 해석할 수 있습니다. 상호 작용. [3] : p.156 따라서 일관된 그룹 정체성을 통해 개인은 대규모 중등 학교로의 전환에 수반되는 익명성과 위협에 대처할 수 있습니다. [1] [8]
비슷한 파벌이 성인이 되어서도 특정 상황에서 다시 나타날 수 있으며, 이는 크고 미분화된 익명의 군중을 특징으로 합니다. 전반적으로 파벌은 일시적인 사회적 단계입니다. [3] [9] : p.159 일반적으로 파벌은 엄격한 성별 분리와 함께 청소년기 초기에 처음 형성되지만, 중년기에 이르면 또래 집단 내의 일부 혼성 활동이 긴밀한 이성 우정을 조성하여 구조 조정을 시작합니다. 도당. [10] 청소년기 후반에 조직화된 파벌 구조는 일반적으로 연결된 커플 세트로 분해되며, 그 후 성인기 내내 그리고 성인기 내내 주요 사회적 단위로 남아 있습니다. [1]
파벌은 보통 학교에서 흔히 볼 수 있는 다른 유형의 또래 집단과 다릅니다. 이들은 보통 운동 선수나 괴짜 같은 평판 기반 집단입니다. 주요 차이점은 이러한 평판 기반 그룹이 반드시 서로 상호 작용하는 것은 아니지만 파벌의 구성원은 서로 상호 작용하고 사회적 상호 작용이 빈번하다는 것입니다. [11] 예를 들어, 축구 선수는 운동 선수로 간주되지만 축구 팀의 모든 구성원이 항상 서로 상호 작용하는 것은 아닙니다.
using Agents
using SimpleWeightedGraphs: SimpleWeightedDiGraph # will social network
using SparseArrays: findnz # for social network connections
using Random: MersenneTwister # reproducibility
using LinearAlgebra
Define Agent Structure¶
- student는 ContinuousAgent{2} agent 구조체외에 다른 속성은 갖지 않는다.
const Student = ContinuousAgent{2}
ContinuousAgent{2}
fieldnames(Student)
(:id, :pos, :vel)
Rules of the schoolyard¶
- 점심시간되어 학생들이 놀러 나간다.
- 학교건물이 운동장 중앙에 있고 건물주위에 울타리가 있다고 가정 한다.
- 교사는 학생들을 관찰하고 학생들을 울타리에 너무 가까지 가지 않게 한다.
- 교사의 주의력을 시뮬레이션 하기 위해
teacher_attractor
힘을 사용한다. - 학생들은 임의의 방향으로 학교 운동장으로 향하지만 몇가지 사회적 규범을 준수한다.
- 각 학생은
친구
와적
이 1명씩 있다. - 이 모델에서
친구
와적
은 무작위로 쌍으로 선택되므로 어떤 한 쌍에서 한 사람이 다른 사람을 좋아하지만 이 느낌을 보답받지 못 할 수 있다. - 쌍 간의 연결은 0과 1 사이에서 무작위로 선택되며 1의 결합이 가장 강하다.
- 연결이
우호적
이면 행위자들(Agents)은 무엇보다도 자신의친구
와 가까이 있기를 원한다. 비우호적인
연결은 학생들이적
으로 부터 최대한 멀리 이동 한다.
- 각 학생은
- force : 두개의 힘 – 1) 학생들이 무작위로 돌아 다니게 하는 힘, 운동장 중앙에 있는 학교에 있는 교사에게 끌어 들이는 힘, 학생들은 이 두힘의 지배하에 돌아다닌다.
Initializing Model¶
- 중요!! : vel 값을 설정해야 한다.
중요!!
- SimpleWeightedGraph(sources, destinations, weights) – 입력시 sources, destinations 순서로
- add_edge!(sources, destinations, weights) – 입력시 sources, destinations 순서로
- weight조회시 weights[destination, source] – 조회시 destination, source 순서로
- weight가 0인 edge는 discard되기 때문에 아주 작은 값으로 설정 해야만 discard되지 않는다.
- weight가 0인 edge는 discard되기 때문에 아주 작은 값으로 설정 해야만 discard되는 경우 조회시 0
중요!! : 방향성이 있는 그래프를 사용하기 때문에 1->3, 3->1의 edge가중치가 다르다.
function schoolyard(;
numStudents = 50,
teacher_attractor = 0.15, # 운동장 중앙에 있는 학교에 있는 교사에게 끌어 들이는 힘
noise = 0.1, # 학생들이 무작위로 돌아 다니게 하는 힘
max_force = 1.7, # 학생들이 공간적으로 더 멀어지거나 가까워 지려고 하는 한계거리
spacing = 4.0,
seed = 6998,
)
space = ContinuousSpace((100,100);spacing, periodic = false)
model = ABM(
Student,
space;
properties = Dict(
:teacher_attractor => teacher_attractor,
:noise => noise,
:buddies => SimpleWeightedDiGraph(numStudents), # 학생들간의 사회연결망 생성
:max_force => max_force
),
rng = MersenneTwister(seed)
)
for student in 1:numStudents
## 학생들은 학교건물 근처에서 움직이기 시작한다.
# function add_agent!(pos::ValidPos,model::ABM{S,A}, properties...; kwargs...,) where {S,A<:AbstractAgent}
# 중요!! : vel 값을 설정해야 한다.
vel = (1.0,1.0)
# 학생들을 교내 중앙 근처에 무작위로 배치 한다.
add_agent!(model.space.extent .* 0.5 .+ Tuple(rand(model.rng,2)) .- 0.5, model,vel)
# 학생의 소셜네트워크에 친구와 적을 각각 한명씩 추가 한다.
# 같은 학생이 친구와 적이 동시에 될 수 있다
# 100명의 학생들중에 student가 아닌 99명의 학생중에 무작위로 학생 1명을 뽑는다.
friend = rand(model.rng, filter(s -> s != student, 1:numStudents))
# 학생, 친구, 긍적적 연결강도 (+)
add_edge!(model.buddies, student, friend, rand(model.rng))
# 학생, 적 , 부정적 연결강도 (-)
foe = rand(model.rng, filter(s -> s != student, 1:numStudents))
add_edge!(model.buddies, student, foe, -rand(model.rng))
end
model
end
schoolyard (generic function with 1 method)
schoolyard()
AgentBasedModel with 50 agents of type ContinuousAgent space: continuous space with (100.0, 100.0) extent and spacing=4.0 scheduler: fastest properties: max_force, buddies, teacher_attractor, noise
Movement dynamics¶
- 이 모델은
buddies
속성을 포함하고 있는데 이는 방향성 가중 그래프 Graphs.jl 이다 - 각 학생별로 무작위로 한명의
친구
와 한명의적
을 그래프에 가중 연결로 그들의 관계를 설정 했다.