Kuramoto model
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
The following models shows the Kuramoto model, first proposed by Yoshiki Kuramoto. It is a mathematical model used to describe synchronization of a network of coupled oscillators.
HOW TO USE IT
Press Setup, then Go, the Redo once, untill a network of arrows is presented. when the arrows are in an up direction, they flash. At the initial state, each arrow is in a random direction.
Press Go-Sync, and observe how the networs starts syncronizing. It might take a short while.
THINGS TO NOTICE
The networks seems to spread information as if is was a neural net, but no information is passing, just phase syncronizations.
THINGS TO TRY
Inspect the model at different speed. See how local sync transform to global sync.
EXTENDING THE MODEL
Add different networks. Add a mean vector for the entire network. How is the "leading" oscilator chosen?
NETWORK CONCEPTS
NETLOGO FEATURES
RELATED MODELS
Copyright 2005 Uri Wilensky. See Info tab for full copyright and license. Prefernetial attachement model
See also Network Example, in the Code Examples section.
CREDITS AND REFERENCES
This model is based on: Kuramoto model
HOW TO CITE
as you want....
- Please site the Kuramoto model itself
- The adaptation of the kuramoto model in this graphical context from an existing preferential attachment modl was made by Alon Sela, Tel Aviv University.
Comments and Questions
;;;;;;;;;;;;;;;;;;;;;;;; ;;; Setup Procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;; turtles-own [ freq1 freq2 ] to setup clear-all ;set-default-shape turtles "circle" ;; make the initial network of two turtles and an edge make-node nobody ;; first node, unattached make-node turtle 0 ;; second node, attached to first node reset-ticks end ;;;;;;;;;;;;;;;;;;;;;;; ;;; Main Procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;; to go ;; new edge is green, old edges are gray ask links [ set color gray ] make-node find-partner ;; find partner & use it as attachment ;; point for new node tick if layout? [ layout ] end ;; used for creating a new node to make-node [old-node] crt 1 [ set color red set shape "arrow" set heading random 360 set size 3 set freq1 (random 100) / 10 if old-node != nobody [ create-link-with old-node [ set color green ] ;; position the new node near its partner move-to old-node fd 8 ] ] end ;; This code is the heart of the "preferential attachment" mechanism, and acts like ;; a lottery where each node gets a ticket for every connection it already has. ;; While the basic idea is the same as in the Lottery Example (in the Code Examples ;; section of the Models Library), things are made simpler here by the fact that we ;; can just use the links as if they were the "tickets": we first pick a random link, ;; and than we pick one of the two ends of that link. to-report find-partner report [one-of both-ends] of one-of links end ;;;;;;;;;;;;;; ;;; Layout ;;; ;;;;;;;;;;;;;; ;; resize-nodes, change back and forth from size based on degree to a size of 1 to resize-nodes ifelse all? turtles [size <= 1] [ ;; a node is a circle with diameter determined by ;; the SIZE variable; using SQRT makes the circle's ;; area proportional to its degree ask turtles [ set size sqrt count link-neighbors ] ] [ ask turtles [ set size 1 ] ] end to layout ;; the number 3 here is arbitrary; more repetitions slows down the ;; model, but too few gives poor layouts repeat 3 [ ;; the more turtles we have to fit into the same amount of space, ;; the smaller the inputs to layout-spring we'll need to use let factor sqrt count turtles ;; numbers here are arbitrarily chosen for pleasing appearance layout-spring turtles links (1 / factor) (7 / factor) (1 / factor) display ;; for smooth animation ] ;; don't bump the edges of the world let x-offset max [xcor] of turtles + min [xcor] of turtles let y-offset max [ycor] of turtles + min [ycor] of turtles ;; big jumps look funny, so only adjust a little each time set x-offset limit-magnitude x-offset 0.1 set y-offset limit-magnitude y-offset 0.1 ask turtles [ setxy (xcor - x-offset / 2) (ycor - y-offset / 2) ] end to-report limit-magnitude [number limit] if number > limit [ report limit ] if number < (- limit) [ report (- limit) ] report number end to-report sinheading [heading1 heading2] if debug? [write "from reporter " print heading1 write "from reporter " print heading2 ] let temp1 sin(heading1 - heading2) report temp1 end to sync let k 0.5 ask turtles [ if debug? [type "$$$$$$$$$$$$$$$$$$$$$$$$$ : " print who] let n 0 let sin-res 0 let sigma 0 let res 0 fd 0.01 display let my-heading heading ;show turtles let neig link-neighbors ask neig [ if debug? [ type "inneig-loop " ;show who write " his heading= " print heading write " my heading = "print my-heading ] set sin-res sinheading heading my-heading ;let sum-heading (sum-heading + sinheading ) set sigma (sigma + sin-res) set n (n + 1) if debug? [ write "sin-res= " print sin-res write "sigma = " print sigma ] ] set res (k / n * sigma) if debug? [ type "res= "print res ] rt res display fd 1 bk 1 ifelse (heading > 0 ) and (heading < 10) [set color yellow] [set color red] ] ask turtles [rt 1] end ; Copyright 2005 Uri Wilensky. ; See Info tab for full copyright and license.
There is only one version of this model, created almost 4 years ago by Alon Sela.
This model does not have any ancestors.
This model does not have any descendants.