我正在写一个关于思想在加权有向图上传播的网络标志模型。主要的概念是传播红色的想法:代理的重量超过0.5将变成红色。我还需要绘制一个实用程序函数,我正在考虑这样做:
plot sum [p] of turtles with [color = red] * sum [weight] of links with [color = red and weight > 0.5] / (sum [p] of turtles * sum [weight] of links with [weight > 0.5])
例如,每个代理的所有实用价值之和(p * w)。然而,我认为这是相当静态的,我需要一些建议。我想用一种更好的方法来增加p的值,增加每只海龟从一只红海龟那里得到的加权值,或者通过减去每只海龟从一只灰海龟那里得到的加权值来降低p的值。
有人能帮我实现这一点吗?
extensions [nw] ;network extention
breed [group g] ;turtles are called group
directed-link-breed [influences inf] ;directed link are called influences
links-own [weight] ;weight of directed link, related to links only
group-own [p] ;probability to take or not red idea, related to turtles only
SETUP
;generation of the "real world" networks
to setup-pa ;generate preferential-attachment network
ca
nw:generate-preferential-attachment group influences members 1 [
set color grey
setxy random-xcor random-ycor
set shape "person"
set size 2]
assign-weight
assign-p
reset-ticks
end
to setup-small-world ;generate small-world network
ca
nw:generate-watts-strogatz group influences members 1 1 [
set color grey
setxy random-xcor random-ycor
set shape "person"
set size 2]
assign-weight
assign-p
reset-ticks
end
to setup-random ;generate random network
ca
nw:generate-random group influences members 1 [
set color grey
setxy random-xcor random-ycor
set shape "person"
set size 2]
assign-weight
assign-p
reset-ticks
end
to assign-weight ;assign random-float weight to links in a range from 0 to 1
ask influences [set weight random-float 1 ]
end
to assign-p ;assign probability to agents (0 or 1)
ask group [set p random 2]
end
EXPERIMENT
to behavior
ask turtles with [p = 0] [ ;asking members with p = 0 and with out-links' weight > 0.5 to spread grey colour
set color grey
ask my-out-links with [weight > 0.5] [set color grey ask end2 [set color grey]]]
ask turtles with [p = 1] [ ;asking members with p=1 and with out-links' weight > 0.5 to spread red idea
set color red
ask my-out-links with [weight > 0.5] [set color red ask end2 [set color red]]]
tick
end
enter code here发布于 2022-06-10 18:39:59
Excuse the sloppy code, I'm sick. I changed the behavior block对符号输入之和,ala神经网络。对于100个成员和随机种子12345,稳定需要5个步骤。许多调试行,很抱歉它是如此草率,但它运行。
韦德
extensions [nw] ;network extention
breed [group g] ;turtles are called group
directed-link-breed [influences inf] ;directed link are called influences
links-own [weight] ;weight of directed link, related to links only
group-own [p oldsum] ;probability to take or not red idea, related to turtles only
;;SETUP
globals [ changing ]
;; stopping conditons
to setcounts
set changing true
set members 100 ;; if not in a slider
end
to setseed
;; for members = 100 and seed = 12345 we get diffusion for 5 ticks
random-seed 12345
end
to setup-pa ;generate preferential-attachment network
ca
setseed
setcounts
nw:generate-preferential-attachment group influences members 1 [
set color grey
setxy random-xcor random-ycor
set shape "person"
set size 2]
assign-weight
assign-p
reset-ticks
end
to setup-small-world ;generate small-world network
ca
setseed
setcounts
nw:generate-watts-strogatz group influences members 1 1 [
set color grey
setxy random-xcor random-ycor
set shape "person"
set size 2]
assign-weight
assign-p
reset-ticks
end
to setup-random ;generate random network
ca
setseed
setcounts
nw:generate-random group influences members 1 [
set color grey
setxy random-xcor random-ycor
set shape "person"
set size 2]
assign-weight
assign-p
reset-ticks
end
to assign-weight ;assign random-float weight to links in a range from 0 to 1
ask influences [set weight ( round (1000 * random-float 1) / 1000) ] ;; avoid tiny variations
end
to assign-p ;assign probability to agents (0 or 1)
;;;;;;;; default color grey
ask group [set p random 2 ]
;;;;;;; added next lines. Change p to +1 or -1
ask group [ if (p = 1) [ set color red ] ]
ask group [ if (p = 0) [ set p -1 set color grey]]
end
;;EXPERIMENT
;; change influence going OUTWARD to influence coming INWARD
;; change single link weights as determinants to SUM of link weights as determinants, as in a neural net
to go
if (changing = false) [ print "no longer changing, so stopping." stop]
if (ticks > 20) [stop]
set changing false
print (word "=================== tick # " ticks " =====================================")
ask links [ set label round (100 * weight) set thickness (weight) ]
ask links [ if [color = red ] of end1 [set color red ]]
ask turtles [
;;print (word "\n ------ " who "-----")
let summer 0
ask my-in-links [
;;;;; let netweight ( weight * [ p value of end1 ]
let netweight ( weight * ( [ p ] of end1 ) )
set summer ( summer + netweight)
;;show summer
]
set oldsum precision oldsum 3
set summer precision summer 3
if (oldsum != summer) [ set changing true ]
if (oldsum != summer) and (ticks > 2) [ print (word who "..CHANGED SUM, was " oldsum ", now " summer )
set changing true ]
set oldsum summer
let oldcolor color
(ifelse
(summer > 0.3) [ set p 1 set color red
if ( color != oldcolor) [ print (word who " turned red") ]
]
(summer < -0.3) [ set p -1 set color grey
if ( color != oldcolor) [ print (word who " turned grey") ]
]
;; otherwise, do nothing
)
]
tick
end
;;enter code herehttps://stackoverflow.com/questions/72560996
复制相似问题