NetLogo で一種の「ソーシャル ネットワーク」を構築しようとしています。リンクでつながっている異年齢層の集まり。
NetLogo の構文のいくつかの部分にまだ完全に慣れていないため、組み立て方に問題があります。私は先週、自分のコードで品種を使い始めたばかりで、まだ完全に解決していません。それとも私がそれらを複雑にしすぎているのか、よくわかりません。
関連するコードを以下に示します。問題の機能は「ネットワークの作成」です。各エージェント (合計で約 800 になります) に、一定量の他のエージェントの各タイプに接続するように依頼する必要があります (他のエージェントが満杯にならない限り)。たとえば、カメが幼児種の場合、合計 10 個のリンクがあり、そのうち 5 個が他の幼児、2 個が子供、2 個が大人、1 個が 45 歳以上です。最初のノードが幼児で、大人に接続する場合、それが理にかなっていれば、大人のノードが到達したときに接続しようとする幼児の数を減らす必要があります。
現在のタートルに品種を尋ねる方法がわかりません。これにより、適切な数の適切な品種にリンクできます。誰かが私を助けてくれたら、私はめちゃくちゃ感謝します. これはコードのほんの一部ですが、ここ数日私を夢中にさせています
何かを試みるたびにエラーが発生し、アイデアも生きる意欲もなくなってしまいます。お時間をいただきありがとうございます。コードではなく、より良いアルゴリズムについて考えがある場合でも、それは大歓迎です
breed [toddlers toddler]
breed [children child]
breed [adults adult]
breed [over45s over45]
globals
[
num-nodes
]
toddlers-own
[
tod-total-connections
tod-tods
tod-children
tod-adults
tod-over45s
]
children-own
[
child-total-connections
child-tods
child-children
child-adults
child-over45s
]
adults-own
[
adult-total-connections
adult-tods
adult-children
adult-adults
adult-over45s
]
over45s-own
[
over45-total-connections
over45-tods
over45-children
over45-adults
over45-over45s
]
to generate
clear-all
create-toddlers num-toddlers
create-children num-children
create-adults num-adults
create-over45s num-over45
create-network
setup
reset-ticks
end
to setup
ask turtles
[reset-node]
ask links
[set color gray + 1.5]
ask adults
[set shape "circle"
set size 4]
ask toddlers
[set shape "face happy"
set size 4]
ask over45s
[set shape "triangle"
set size 4]
;;INITIALISE BREEDS
;;Initialise Toddlers
ask toddlers [set total-connections 10]
ask toddlers [set tod-tods 5]
ask toddlers [set tod-children 2]
ask toddlers [set tod-adults 2]
ask toddlers [set tod-over45s 1]
;;Initialise Children
ask children [set total-connections 17]
ask children [set child-tods 3]
ask children [set child-children 8]
ask children [set child-adults 5]
ask children [set child-over45s 1]
;;Initialise Adults
ask adults [set total-connections 13]
ask adults [set adult-tods 1]
ask adults [set adult-children 3]
ask adults [set adult-adults 6]
ask adults [set adult-over45s 3]
;;Initialise Over45s
ask over45s [set total-connections 12]
ask over45s [set over45-tods 1]
ask over45s [set over45-children 1]
ask over45s [set over45-adults 5]
ask over45s [set over45-over45s 5]
;; Layout turtles:
layout-circle (sort turtles) max-pxcor - 8
ask turtles
[
facexy 0 0
if who mod 2 = 0 [fd 4]
]
display
end
;; THIS IS THE PROBLEM FUNCTION
to create-network
let q 0
let n 0
while [q < count turtles]
[
let m 1
while [m < count turtles]
[
make-link-between turtle n
turtle ((n + m) mod count turtles)
set m m + 1
;;results in a fully connected network which I don't want
]
set n n + 1
set q q + 1
]
end
;; connects the two nodes
to make-link-between [node1 node2]
ask node1 [
create-link-with node2
[ set color gray + 1.5]
]
end
また、エージェント間のリンクを「一時停止」する機能ができないかどうかも考えています。たとえば、子の間のリンクの一部またはすべてをオフにします。リンクにタイモード属性があることは知っていますが、これができるかどうかはわかりません。私が読んだところによると、移動エージェントを一緒に保持することについてのように思えますか? リンクをオフにする方法として untie を使用できますが、リンクは引き続き存在しますか?
編集:リンクを非表示にする方が適切な場合があります。正しいリンクを非表示にする方法は次のことです