找回密码
 注册
关于网站域名变更的通知
查看: 727|回复: 1
打印 上一主题 下一主题

Kuramoto模型在Python和MATLAB中的简单实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-2-22 10:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
事情是这样的,我最近在研究团队编组及内部模式对发挥团队能力的影响,以及如何正确编组让团队能力发挥实现最大化,别问我为什么研究这个,反正稀里糊涂就研究上了。我发现在描述团队编组间及内部同步能力的时候,人们对Kuramoto模型(藏本模型)作了大量的研究,其中包括模型达到完全相位同步的充分条件、耦合强度对于同步的影响、一定条件下振子的收敛速率等。但具体实现一般都在MATLAB中,且网上代码过于复杂(我运行了一遍一堆报错),这里我使用Python和MATLAB对Kuramoto模型简单模拟。 ( \$ `# A9 k0 c* q' V
模拟的话还是一遍举个栗子,边分析边测试效果最好,百度学术上有一篇关于Kuramoto模型的简单论文,我们就用它来实现模拟。0 q( X5 \0 b; N! k, m' e) N/ X

! b' ]4 g# t; F! K. ^6 ~好吧,那我们开始,首先是Python实现:/ F4 ?+ Q2 O) P9 P+ M

6 i" h( \( c4 `N维Kuramoto模型的数学描述如下:
+ b  p$ f  v3 r* S' e / a2 w& B; }) d3 Y% ~* v
8 t9 [& [4 o2 x/ ?1 Q  Y
没错,是讨厌的数学公式,没事,它可以改写成这样:' q7 G7 a) }: w

: X8 e; z* r8 D2 D
0 N2 h5 a8 v. c+ O好像还是有点长,那我们在改写一下:0 B% U6 o) ?( S9 `' O- z7 N

# Z# d. b4 r" X  a. A: q# u: U7 i6 ?
看着好多了,那我就来说说式子中参数的意义,Kij为耦合矩阵,是为了便于描述不同振子间耦合程度不同的情形。最下面那个式子的r就是我们的目标,反应振子间的相关性,这个相关性就可以描述我们想要的编组内部同步能力。( W. X' v6 d/ N- Q& W8 G

# m: p& Q# F& R" p哎呦,这个式子看起来好简单,这里要补充一下知识点:同步能力可不是一下子各组该怎么同步直接确定的了,它是一个从开始到稳定的阶段,也就是说随时间变化,最终反映在各组的同步能力才会确定,那么最后图像是什么样子才算同步能力好呢?
0 d* B8 Z2 t8 P) L, l! u
& o( J% p1 {' v) _同步能力好,是指随着时间的推移,各组的同步能力r逐渐稳定,波动现象消失或固定在某一个小范围内。需要注意的是这和各组r值之间的差距没有关系,我们要的是一个平稳的状态。那怎么办找r和t的关系呢?) T1 _& x- P* [1 R8 @. ?
' b* N) o  @" A( m. A4 m" b
注意看最上面那两个式子,相位(第一项,等号左边那个)上面有个点,这样他可就不简简单单是个相位了,它代表的是相位的变化值,是一个微小的微分值,好吧具体意思就是,那个式子左边展开之后是这样的:
* J/ Q" W+ E2 g% G) Q ' Q3 k: a# Y  K4 @% ~
% ^0 z  ~" b/ L
哎呀,t出现了,其实\theta 与t有关,这里你可能有点绕,因为它们之间的关系是一一对应的,就是说每个时间的t对应了一个\theta ,我下面带入具体数值的时候你就知道了。( V7 n" n+ p* \% X

1 C1 `0 |* B, r组间同步能力与时间t的关系出现了!
5 r2 e5 I4 J7 _4 {8 l& s1 _
. [7 Z) V/ B4 E$ |" S也就是说我先用上面的那个公式4计算出来\theta 的值,在带入到公式5,那么t-r关系就可以明确下来了,那现在我们再回过头来看看文章中已经给的例子,看看还有没有未知量。
7 A4 \0 R2 r3 v7 c( w8 F1 a
" e8 U; _0 d: `栗子是这样的栗子:
0 g6 J, Y; I8 m2 h1 G
6 m. G6 H! m) @, _" R8 S假设某机构内部有 4 个编组,每个编组包括 5 个节点(其中 1 个节点为领导节点) 。另外,将上级领导作为一个独立的编组,且只包含一个节点。假设在领导机关增加4名信息传递人员。当以独立编组模式编组时,指定1名信息传递人员为指挥者,其指挥关系与其他编组一致; 当分散编组时,信息传递力量节点的关系与所在编组其他节点指挥关系一 致。其中,完全分散编组模式时,各信息传递力量节点之间无信息共享通道; 不完全分散编组时,在各信息传递人员节点之间建立一条信息共享通道。各编组模式及其拓扑结构如下图所示:
, P6 ~/ k2 k6 {& U7 k
; z2 Y( D& {* ^独立编组模式
2 w& M9 h) W% B% R6 M. a $ v4 {( r8 Z% r9 v, g
- N: r+ p8 D0 d9 D! O% o6 W
完全分散编组
9 k: k* w! l, D+ C! ^8 Q6 t# e
5 Y+ S: B$ Q8 `8 i8 Z4 X3 X) ]9 X$ O" T( c- m3 P/ O

0 q5 a7 b) U1 f8 k不完全分散编组
+ h/ I" K6 N& Q3 m 8 O; H" [+ y: n4 E, P7 u& K

6 Z# |+ @2 o; z. p- U$ t  r
9 o6 [% l: R) v" @) S参数数据8 K% C/ f1 l9 j# {4 S

% {$ n4 J( k# @( D8 d   a; X% U" \/ Z, o. j( o

0 p9 _% G9 Y; z* _1 Y1 R9 O! A0 i& s
参数确定一下有没有未知量:
% }" K2 }4 x* j1 d
8 V$ Q; i2 u( O7 {首先N,数据数目已知,这个有了。& l! X$ y4 Z( \' p6 q/ n

) p0 D8 G6 R7 l! H0 v; P6 yK值是分组内的连接强度,这个是看实际情况,由甲方提供或者自己看着给的,这里就是甲方给的编组图,i与j点的链接强度一目了然,这个有了。
7 ^: u$ x5 y; S3 y' o  H0 T; c/ }* r- c( W8 W$ g7 W) F+ t7 \
\omega _{i} 是振子i的固有频率,也称自然频率,甲方会给,没法自己估计,这个有了。
  Z2 q: k: \1 g1 u8 u/ y  I' B5 b/ K) |: j; T& }
\theta ,\theta 怎么办,初始的\theta 会给,自己也能测的出来,但那么多\theta {j} -\theta{i} 得多少不知道啊,这里通过翻看文章,我发现其实文章是有一个特殊条件的,不然的话是需要研究耦合因子求三种约束条件解情况的,特殊条件就在这:  j) B5 T# t, Z' G0 n

6 R. q/ X1 U* W, W0 z假设编组内节点的初始相位差为π/2,且编号最小者为0,随编号增大而增大。% i5 }/ B1 m5 E' ~, a
! l& U$ s: y8 u0 `7 k
哦,初始相位差知道了,你还告诉了我各个初始相位,那么\theta _{j} -\theta _{i} 的值就在一个范围内的几个固定值里面啊!/ B( X" I7 G5 N3 l9 F. L9 @

$ ~& J# V% ^2 f7 K/ u9 F1 T好的,没有未知量了,就是找K的时候麻烦点,没办法,这个决定了编组的不同,写脚本算一下吧:" d; H/ ^: ~: v& N5 U% C# b0 ?9 v
$ ^! k! K$ f# Z, C- i; d, g
#codingutf-8+ B% p  v+ Y" j2 t& o6 N; y

9 _5 T! t9 m5 Y1 Z" r##ScriptName:KuramotoSimulation.py : c+ c8 ~7 ]6 [; ?0 t" N: ^: D
- g- F, J4 @) |0 E- M
import matplotlib.pyplot as plt
% A3 Q+ @2 |4 ?- r  _
. @4 H. x8 \/ T4 j. t+ Efrom pylab import % f! N) J- D1 ]

% J) r; ?: B  Ofrom sympy import $ G9 j2 j, {% e( @
# r  [  H/ G0 p* S) P
from matplotlib.ticker import MultipleLocator, FormatStRFormatter
9 |& Q% h1 u7 ^, t0 J* c# B7 ]9 V0 h3 _! x
import math
. Q: y4 M0 d3 q* u; \+ P+ P# c6 u! t/ F, y; `4 }
import numpy as np 8 ^& O* R7 q0 Z2 @/ Y

& v4 X4 r, T: D7 DN = 31      #总节点数
: ~$ Z9 A2 K' n4 x5 T- @
/ b" V+ F+ I$ t2 w5 C* [9 `9 zc=[0,0,math.pi  2,math.pi,3  math.pi 2,0,0,0,math.pi  2,math.pi,3  math.pi 2,0,0,0,math.pi  2,math.pi,3  math.pi 2,0,0,0,math.pi  2,math.pi,3  math.pi 2,0,0,0,math.pi  2,math.pi,3  math.pi 2,0,0] " `- e- {) j5 h4 e) t
1 B+ z; J" V/ z0 }# M, {
w = [4,3,3,2,2,1,4,3,3,2,2,1,4,3,3,2,2,1,4,3,3,2,2,1,4,3,3,2,2,1,5] 5 |( K; X' y+ J$ T

7 y- T3 ~, d" Y0 N% K% C8 D2 ?k1 = [ " @* ~% X& U8 h8 K" h- k* H4 q/ i- y
+ w! t& c; Q" n* K$ Z5 K
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
; e4 \0 Z$ z2 p! H/ u1 z5 V( S/ V  F+ i: S0 ], H3 E' T  s# g! Y
[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
* X* `$ n7 l5 B5 {+ h" @1 X* z  `; ^- O4 t& b9 G: U
[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], . O7 S7 S+ {( S5 @' d
1 a8 m* M* N: I
[1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
8 S9 F" V( t+ m  a$ f5 S: g1 v9 V2 `! [2 u: g6 u: K  m% k
[1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], / G* c" K5 ], {% Z
! n$ ?# y/ o" C. D" T
[1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
9 n' Q. I+ P8 }* a2 ~# ^# J7 A% o- l' k
[1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
8 e# X1 |' t1 W* S+ \$ ?$ y
3 z/ q' f+ u! O+ j[0,0,0,0,0,0,1,0.9,0.9,0.9,0.9,0.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2], , M! B7 O( ]* J1 _. S
6 t; U/ m9 ?# N: a
[0,0,0,0,0,0,0.9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
* o+ p2 `8 v; L+ b$ d8 W: \$ A& N: E2 x6 i, C* p
[0,0,0,0,0,0,0.9,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
! e* l; ]7 W* p, Z6 {
, S1 K7 f  S0 b8 w& f! A% ]2 g[0,0,0,0,0,0,0.9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
% T( e' h) W) A/ H/ ?" z4 @: E2 K( T3 D- @9 a1 w
[0,0,0,0,0,0,0.9,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
8 U+ ?% s0 i) J" O3 `! |! D' H! Y% d' M# A2 D3 f
[0,0,0,0,0,0,0.9,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], $ P) {; ^6 w' ]% _+ m8 ?. l" m# P! i
7 w6 k- @% S) o, T5 q) y3 V
[0,0,0,0,0,0,0,0,0,0,0,0,1,0.8,0.8,0.8,0.8,0.8,0,0,0,0,0,0,0,0,0,0,0,0,2], # \: K/ f# f% T. F/ d4 `
2 C" C8 v+ n! w, N( a9 }7 l
[0,0,0,0,0,0,0,0,0,0,0,0,0.8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], . z) e* P5 t7 Q

6 x- p; n$ V" T  V, f% D* e[0,0,0,0,0,0,0,0,0,0,0,0,0.8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 7 J' \6 H+ C) x' R) T6 \5 V

% |( ]! @. P$ d. ^" \) y[0,0,0,0,0,0,0,0,0,0,0,0,0.8,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
- q) w2 s+ F  Q. M% r8 v1 o/ Q; H9 X! Z2 @( I) m, G
[0,0,0,0,0,0,0,0,0,0,0,0,0.8,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + R) m0 J7 D& n- z. Y& S
6 p* a  a4 l9 Z! c" u
[0,0,0,0,0,0,0,0,0,0,0,0,0.8,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
. ]# Q! r1 z) D  p
9 o0 u8 W4 w+ I" X3 m6 ?3 \& k[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0.7,0.7,0.7,0.7,0.7,0,0,0,0,0,0,2],
4 g9 z) ^  y" `, }- i$ k0 u+ m  U4 d- W
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.7,1,0,0,0,0,0,0,0,0,0,0,0],
" f' q: ~, O. p. R0 P$ l, H# C2 H! K$ m
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.7,0,1,0,0,0,0,0,0,0,0,0,0],
/ Q" O. S2 ]7 v! A2 D: M1 @" w/ J' H* s% U+ j: e! N
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.7,0,0,1,0,0,0,0,0,0,0,0,0], 2 l% j5 {$ v. \# U2 m' B8 y
9 }) v; C# d# R1 R, Z' @' K
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.7,0,0,0,1,0,0,0,0,0,0,0,0],
5 X$ g/ x5 k* [+ e- ?2 ^
' f  H0 C) o0 d+ t, z* @[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.7,0,0,0,0,1,0,0,0,0,0,0,0],
% @7 ~7 P2 I. _# A7 a: g6 u, }5 R+ z3 V& Y/ @0 ?6 Z
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0.6,0.6,0.6,0.6,0.6,2],
0 k: b7 @3 |6 b1 h8 G
( p4 I9 @; V% |" V7 P  U[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6,1,0,0,0,0,0], ) z4 d" g3 E# h8 |' L4 q* \
# i3 O; ~+ ?7 W% Q( @, M# u) B' x# t
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6,0,1,0,0,0,0], % S" H$ {2 A% E- }* R& h& x
+ h0 q4 V4 ~" x0 f: Y- `5 B
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6,0,0,1,0,0,0],
7 S4 a6 H/ O$ P; E1 A4 _8 r) L' ^( N. ^0 F. g
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6,0,0,0,1,0,0], ) c: B- K: }1 M, q4 o: |5 d- P
& ]1 D) T$ O: e1 @
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6,0,0,0,0,1,0],
! o0 w0 d; p, j  e& Z: L. D3 `
; S) N* L  [0 L1 p[2,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,1]]   
% t- g+ h" v: @- l6 P2 ?( ?6 P; r  w  U; d3 g
n = [i + 1 for i in range(22)]                #目标划分,24个值,1-24
5 H, h; Q! U6 W8 Q+ X1 ~9 t$ R& u( x
t = [j  for j in range(1000)] * \/ S1 h; U: G7 R
  |1 [9 e: q7 ]7 s
ci = 0
. d$ {/ J1 A% ]# q' D+ V1 ^. d
$ m& B+ |8 [, \7 s& H6 P  ]  @9 g4 @C = [] $ P( b6 B4 R( \6 ~

" G0 e, a1 M" C7 R8 L1 O, JC.append(c) $ P2 [+ g( {0 R
, ~4 \" p. c! e  x
for d in range(1100) $ h+ K  {& K7 n, r) K! o
2 G+ z  J: @5 G9 k9 K
    for i in n 2 v  z/ h# p+ Q) N3 c6 U+ F1 N
& q: B  z/ V! {6 q
        for j in range(22) ! l' C7 m( }/ X: H. e5 z
8 w; S; D) h$ B* o8 X- g; Z5 T
            cj = c[j + 1] - c ' T+ m1 U9 j: E7 B; V, h
. b9 U9 y% a: [4 O' X
            ci += k1[j + 1]  math.sin(cj) 7 H. ?" t$ C: [0 l7 j& ]$ }
* i/ S# Q# B4 a$ b" f  x
        cii = ci + w ; M! j) G. Q' n" i) h5 D4 D+ h
, B' m; u7 A' V' E' ]
        h = [0.01  cii + z for z in c] ( P9 R  h3 S. g5 E* p1 {1 t
7 S5 o* i: E) v, I3 ~. @8 d5 `  f
        C.append(h)
/ s7 I! u2 p7 u1 l
/ a/ y/ J( \4 L1 F2 T6 W, s        c = h
! ?! z. j9 Y% D0 f$ n/ t: Z
1 E  o# N) y$ |def r_function(u)
& ]  L9 P! G, D) p+ p8 `2 a6 M# p) b$ [
    y1 = 0 $ @; |9 ?! e% ^4 R

2 @9 o: |: w7 d  d; l0 Q    y2 = 0 0 b! P  X" G2 ~# Y. f6 i# y% _" o& i- }
% w7 ~4 ^( s9 p" V
    y12 = 0
2 B) R( a& N( r# @. c0 B; L( n# V. }1 H6 k" w3 U7 N
    y22 = 0 , n* O0 o) A8 [3 t6 o

/ O8 ?/ R3 n$ D  k: f    r = [] 3 V1 R/ W9 m. s- b+ V! `
! j+ F' B3 T0 M' \
    for x in range(1000) & F8 N# l$ V$ _
9 O4 A" W% [" K+ X
        for ul in u 5 S/ [, i6 D: a* W- ?; K

; C& h7 v6 U8 l7 c0 F            y1 += math.cos(C[x][ul]) + K! [( g" ?9 \

: ?4 H  E& o# u& I+ o            y2 += math.sin(C[x][ul])
$ J. J' N7 M& q- l' z( A* H5 f& X9 e) b& F" a# T- J+ E
        y12 = y1  2
/ e1 x" P4 l2 y# p8 i) Y5 m: o3 E! W* \# I- J7 x% r( h
        y22 = y2  2 1 d1 M) ]- [  Y( p; M
) A- s% ^5 B1 A8 n
        r.append((float(1)  N )  ((y12 + y22)  0.5))
4 @2 F) h7 x. _
1 J2 [5 f7 L/ u8 ]    return r
7 R& t3 g( Y, |* ^/ k9 \: b5 I4 |
2 {9 z" M2 g& \! ]r1 = r_function([1,2,3,4,5,6]) ! C# S6 G8 ~" D9 X( |" _- d

1 O- S0 f6 G+ or2 = r_function([7,8,9,10,11,12])
% r  N) P2 Q) t- |. D5 J) E' A6 b5 `, _, n, n
r3 = r_function([13,14,15,16,17,18]) % z8 V2 J/ b$ Z. Z( {
1 [/ v5 C2 c9 S& S8 q: Q
r4 = r_function([19,20,21,22,23,24])
4 c+ N% n) o& R( D. z
, L- R: @& _5 P( Tr5 = r_function([25,26,27,28,29,30])
1 ~9 a; l) H+ L3 I* I$ c: J1 \2 g( e# b$ e! L
#r6 = r_function([31])
1 R3 p% B0 [  B
$ L1 S6 y' z3 k* Q7 m9 C. |- C( i$ x- t! i2 }$ K

& W0 W4 \3 ]$ ]( Yax = subplot(111) #注意一般都在ax中设置,不再plot中设置
: c# P- ]& j+ U0 P7 k$ E. w2 l6 n8 b' u: W6 {
ymajorLocator  = MultipleLocator(0.1) #将y轴主刻度标签设置为0.5的倍数 1 a4 e- Y, b1 f0 g0 J; u* g. g3 X
, |* [4 o6 d3 h! f9 B! k
ax.yaxis.set_major_locator(ymajorLocator)
+ B- W% m) Y5 Y! M% `0 m$ Q. M0 r- t; D( j2 y6 w
plt.plot(t, r1, marker='o', color='green', label='1') / _* K: u8 p" u: y
3 |! q+ f+ m, k$ m
plt.plot(t, r2, marker='D',color='red', label='2')
6 k% s' G9 x! h/ V: f2 M
' G" W( R+ X4 g3 ~/ ~2 A$ k, Aplt.plot(t, r3, marker='+',color='skyblue', label='3') 7 g* F/ U& n2 i0 d, D! j3 H

7 t0 U. b. m5 q) `7 Q  Mplt.plot(t, r4, marker='h', color='blue', label='4')
, z0 z! L! i7 C/ z( z- w5 `7 B, L2 J' a9 G% y9 C
plt.plot(t, r5, marker='_',color='yellow', label='5')
% e8 e& [3 r! i* y+ L3 i! G$ f4 J2 ~( |- c3 e# ?, _1 Z5 ~9 s
#plt.plot(t, r6, color='red', label='6') 4 {, V' y) l$ q" [; ]5 v( A; q4 i
- s2 O' h1 D3 ^) e1 q

$ A! T. W. k  P: F* U: H
' x, `! D* s6 \+ S, D- N, @# Mplt.legend() # 显示图例
7 y' m; H! Z# K1 @8 C3 f3 Y) o8 j) q5 M( d8 ?
plt.xlabel('iteration times') 8 b( H' Y$ i" r+ d' F$ l

4 o! o5 T, |1 y+ @+ \# ~! l% Lplt.ylabel('r') 0 G# s$ q" o6 o0 o$ b
8 }! j& J" ?  @6 `  l* Y
plt.show()
4 H" S3 O0 v2 S+ q" o; l6 h/ |  Q2 j" _" d& J

5 J9 a0 V$ s' {3 M独立编组结果如图:
% X6 E, w6 Z( L: W4 j
% h* h' M( o$ ~

6 _6 s7 S1 r0 q: W2 i  f) B4 c' t1 o: R
k1独立编组- T: t* m6 m7 R, g7 V+ w1 P
好的,从图像我们来看看Kuramoto模型在描述这个编组的时候,5组最终稳定,我们说这个团队编组还算科学,但我们改变一下K的值,换成分散编组:
) Z( ?  T; U; C- o  M& J$ [1 M$ O1 \  W4 h/ D7 h9 o6 s, ~2 G
k2 = [: r/ X- [, L: X' D! g  x

: q5 F7 @9 i3 A+ X3 ?[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
/ B5 @* r" L2 b$ r( I- G7 |1 t- ?. Q$ y) t0 p6 Q7 D0 _
[1,1,0.9,0.8,0.7,0.6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2], + P+ i  T- c) G$ v& d; U; i4 {3 Y  l# E& H
+ S! c) g" W% Y# z7 D5 J2 C
[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
- ]  P$ t+ Z& ?7 {! j9 B* j+ m+ J$ _6 |; I. W0 N/ D& A
[0.9,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], " R" U) Q7 ], q

- y1 ^5 w% p/ w$ U5 d. j. e& u- E[0.8,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 7 i, H, `$ O) N7 e
3 C; N" M1 B3 g" P, Y; M/ n/ L" [
[0.7,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], & B9 q$ |) a* p1 X  ^; |
* _# P3 B; O) T; d: |9 Y& X) i
[0.6,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 1 ]8 o2 E/ W  W& h4 A0 P

, |# R# e  g4 [$ e: C5 U- M% h! {[0,0,0,0,0,0,1,1,0.9,0.8,0.7,0.6,0,0,0,0,0,0,0,0,0,0,0,2], 2 P3 @$ z0 ?. R# H: w( x, o& ]
0 R* j$ g& r* p# i+ T
[0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + x# H3 B' I$ ]) a8 E# t' j
; Y! Z4 E5 Y3 `
[0,0,0,0,0,0,0.9,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], * d! V9 ?2 W3 |5 B6 X9 @- D$ g
% d* @- ~, i' R$ g, Y
[0,0,0,0,0,0,0.8,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
( K. K  i' j5 g" c. W, r1 @9 q4 y- N/ D. c- z$ Z2 A2 d
[0,0,0,0,0,0,0.7,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], : d; \- D( I& k. L
( u$ W6 b* D2 q! W1 ]6 \& O  g
[0,0,0,0,0,0,0.6,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
" k: I9 r! S/ m( Y, }9 M5 Z; C' Q, v$ J
[0,0,0,0,0,0,0,0,0,0,0,0,1,0.9,0.8,0.7,0.6,0,0,0,0,0,0,2], % Z$ y/ j( r/ R' F6 z

0 q# _0 V* h, I7 t: z% ?9 j[0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0], 5 Z* l+ Q' D7 L" x$ g

0 M6 d0 c" g" I+ o  x% Y: \4 x[0,0,0,0,0,0,0,0,0,0,0,0,0.9,0,1,0,0,0,0,0,0,0,0,0], & f" J- L$ I; _
0 y) @$ c' z, w$ j( _  Z
[0,0,0,0,0,0,0,0,0,0,0,0,0.8,0,0,1,0,0,0,0,0,0,0,0,0], 7 I$ {$ i) s  a' k6 }" s/ u
  }: `: [' [8 z; h. z& G
[0,0,0,0,0,0,0,0,0,0,0,0,0.7,0,0,0,1,0,0,0,0,0,0,0,0], 8 ^6 G0 M! K  f5 G* v
, C3 q0 }! u( V5 I4 [4 s. f
[0,0,0,0,0,0,0,0,0,0,0,0,0.6,0,0,0,0,1,0,0,0,0,0,0,0], % T* A5 n  C. a# L; A
; H& ~* X# N7 N3 ]; E" P' H
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.9,0.8,0.7,0.6,2],
) B7 [( ]2 \& t
  s0 n' L8 _* r" u6 }/ n[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0], # B& Q& Y& l' E; U
8 m$ n. l: J! |# C1 P3 u( n. H
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0,1,0,0,0,0],
2 C( G# P9 t3 {6 W; s6 q4 E4 n3 U. O2 A* u
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0,0,1,0,0,0],
; ^+ f' y  d/ X* d4 `% ~: J
3 \6 @. E- \8 B0 R6 {/ g8 Z% W- M[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.7,0,0,0,1,0,0], 2 }" [/ I! U8 p% y, U

$ J6 Z3 {0 W* ?& H3 V' s6 V6 h[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.6,0,0,0,0,1,0], 0 U5 Q2 R: W( R; Z/ i6 @

6 {- \( t  ?7 w) D2 r  F[2,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,1] 4 x; s" W# N  ^% N: ~8 l1 V6 |
3 m2 y0 `  n# ^4 }2 s
7 M. T# s3 ]- s+ Z& a: c8 O/ I/ L

  \3 }. \. s) d  i1 i9 ?# ~+ E0 Ek2独立编组
  ?: T8 j4 P; ^/ X1 L

4 W* q2 A3 l4 H5 U  V0 q6 Z/ [. L2 e0 Q% N* s% v4 m

. p* `4 H$ U' Q! s3 I这两幅图像都在开始阶段大幅波动,而后在一定范围内趋于稳定,那么到底哪个分组模式最符合实际,最能突出编组能力呢?* p1 A% b5 d/ i+ u

9 g# p: B6 V! X: Z$ [1 Y7 \这里还有一个公式,来解决这个问题,编组同步能力的量化:
' k2 m5 _/ v8 @5 T9 S$ N3 }$ F
% F5 O* J0 J  V( r" _
6 |! Q% _0 [8 v  C# I8 o
M_{s} 就可以描述某编组的同步效果,r_{s} 是达到稳定状态后序参量的均值,β∈(0,1)是调节因子。我们可以用M_{s} 比较编组内部的好坏。那编组间能力的好坏怎样比较呢?8 Y" Y* s9 o! J1 e5 b  T  H/ E

! W+ K) G, k  z/ n! p' ~0 o这个Kuramoto模型同样有所考虑,它有一个描述整个系统编组能力的公式:
1 M* I. d3 @/ G; L8 @

/ {  I+ o% H! g! a
8 E" b0 y+ m. X- o) C其中,P是编组的数量,M_{i} 是第i个编组的同步能力,\omega _{i} 是编组在整个系统中的权重,\psi {e} 是各编组平均 相位的均值,\Delta \psi 是各编组平均相位的标准差。具体的计算不是这篇文章的重点,就不在计算M{s} 和M的值来比较上述例子独立编组和分散编组的好坏了,本篇文章主要是讲下Kuramoto模型的解决思路,尤其是上面解决\theta 值的方法可以套用在其他Kuramoto模型中,做一个目标估计绰绰有余的。
- s) J3 Q% T" K/ c9 y, Q
! g# l& o2 K9 \$ y下面是解决Kuramoto模型常用的MATLAB编程方法,具体思路与上述基本一致,这里不再赘述,K的值我们给另一种编组模式:不完全分散编组模式,也是现在实际上最长用的编组方式,直接上代码:
) j# I3 w" A/ e0 g" y( ~& B7 N2 o8 `0 W
clc;# n$ y4 J$ x3 i2 ]3 Q
4 L, W: B: g9 D
clear all; 8 t7 n, e. |% v3 J! P+ `8 g
. y& W) W: q" y# q3 u/ P
k=[0  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0.5;
  n3 a: Q: t% R) c/ `( z# Y, `/ M" k0 H: ?
  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   
8 |6 ]8 u, f! ~
, n: O2 d: X- h$ x& u. p$ w  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   
0 I; E* J4 p. @& k) B* L$ g/ _* U/ B( c
  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   
/ E% x! v3 U/ \! B. `# o  {. i) B8 v
  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   
- E' E7 w3 G3 A; N6 s& _( `3 |" |
/ d- v: H  R5 Y- A# m" y  0  0  0  0  0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0.5; ( A$ _$ S$ B5 C% B$ A, u

3 G4 t- p  `  L* G  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   8 ~/ P" }4 S) q. c* F9 I2 U3 K

1 Z8 _+ ~- r  |, j: N, B: Y2 e  ~  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   0 I" G' Y2 A/ x/ x5 m* I

: ~4 Z1 ]6 S3 g( M  S6 O  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   
: I: Z* N& w) {) r  Q$ r
4 I' r/ n0 w; ~, E  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   
4 Y1 }: _% I. K0 T9 s* p9 X
5 T. {: }. V7 ]  F  0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  0  0  0  0  0  0  0  0  0  0.5;
. J4 I- y$ u+ n
0 f! v0 q, s) t2 h9 b6 \  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   2 T+ P# y. J( v1 ~; Z" ?  D& R$ c
0 K6 |* M( u0 ]. K$ C( Z
  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   : {# ^7 ~- B4 K$ Q9 N

; Z- e9 r7 J$ F2 ^4 y1 r  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   8 T; N, C0 c" U7 ~1 ]
- Q# u+ T$ Q. B4 M+ U# y$ p
  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0;   
" J, v: n9 X: Y0 L: {" W
+ p* Y- L5 l8 K# s3 T  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  0  0  0  0  0.5; % \, r+ u- o5 F% h# m

! R7 F! q& }0 I+ f  a" U  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0;   
1 g2 c0 |( _  C. {- G- n  w+ f7 t4 Q+ P# ]! t4 B
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0;   
2 H8 m! }3 v9 ~) S, p! H* n  d) [& F# F) S
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0;   
/ j9 u% c0 \( q. G2 O
1 z: L0 I( }. x, U( C( s6 y  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0;   
" E3 B0 C) S& g7 a# k( i
; e- h8 K2 X' ^& M  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  2  2  2  0.5; 4 Y. Y. C; ?: U0 h; L, f

4 T3 O6 \5 W8 {7 U% x9 B4 D  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  2  0  0  0  0;   - K# L8 {/ M# {, _" |

) O* ]5 h% q! l) |) Q$ u  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  2  0  0  0  0;   
" F  C/ m& d( I) ^  S; D( w9 i- i& N2 N  o4 r
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  2  0  0  0  0;   6 r' g0 n9 ~( y& Z
: `' B2 F$ x, G) p5 E! F- c
  0.5 0 0  0  0  0.5 0 0  0  0 0.5 0  0  0  0  0.5 0 0  0  0  0.5 0 0  0  0;   5 l/ z. C) ]4 w$ @
2 R3 R2 f# S  i: n! R" X9 @
  ]     
& @2 p- b2 L) H6 v5 c- E* T3 S6 A1 B% C' H- Y0 V$ l( ]
N = 25; ) t6 e: N+ V' e' b) B0 R* C- _
6 U9 a2 Z) _3 w3 F1 R4 w' G
Step= 10000;
3 W. p$ i9 ?- c& i, y# x: x4 o  R. }+ ~: H  a9 I/ W7 G5 i
Theta=zeros(Step,N);
0 h3 _) a1 C* c. E- i9 K
3 Q  Z  Z: N8 x! COmega =zeros(Step,N); : `- `% z% N- }( ]4 e' @
( i6 Y! k! @% k, F; u/ _7 T
DeltaT=0.01
6 k% P3 B* c- G% t6 [4 _) W: s
" _- B. J4 A! qTheta(1,:)=[0 pi/2 pi 3*pi/2 0 pi/2 pi 3*pi/2 0 pi/2 pi 3*pi/2 0 pi/2 pi 3*pi/2 0 pi/2 pi 3*pi/2 0 pi/2 pi 3*pi/2 0];
" s! x, F6 e0 w( u$ p+ f1 |) z8 Q. q: b6 o& }
Omega(1,
:D=2*pi*[2  3  3  4      4 2    3  3      4 4    2  3      3 4    4  2      3 3    4  4      2 2    3  4      1];
0 X" M" ]0 Y- `; k5 b
) `9 a( {5 @# B7 T4 B' x/ ^%  求解微分方程 + T7 Z' o+ u& u6 S5 E( Q

9 W5 ~. d7 o8 x; C: \7 G: l  Afor n = 1:Step
" e( G/ {' V0 f! \( V( [! T. r: U! O9 @5 R! p
    for i = 1:N
0 K5 _# z! f$ f5 P5 Y8 E! a# {7 E
/ [% ^$ K  O3 W8 ^, G* d# @5 v            Sigma = 0;
1 w# w6 y, p( Z$ ~9 E9 |( x% z2 O5 t9 E; ^
        for j = 1:N
4 z: B' f, c$ n3 k* g& e4 T6 r  z- s3 J
            %%判断k对同步效果的影响 / j" ~, P. n7 J9 q

7 t# U1 S3 k/ r- f& r$ {! o= Sigma + k(i,j) * sin( Theta(n,i) - Theta(n,j) );
9 _* J! {" ]- d$ J  g% v/ a* U+ V7 x& j- s6 ^& v7 W' |
        end
: g! p3 v1 O  q9 h* l0 t7 u
" i; ~# X* X8 g# H; G. O            Omega(n+1,i) = Omega(n,i) - Sigma;
+ n; s; i* c1 z) L, `9 K/ }; O' h1 a) Y
            Theta(n+1,i) = Omega(n+1,i)*DeltaT + Theta(n,i);
0 y, H2 d% n$ K4 t- t
" g& l% r* Y( d) T( R$ z5 E    end
( Q- w+ ~% r/ `: j
7 T0 }( F! ]/ u1 g5 o; Cend 2 f+ M! Q# ]4 s* A  h" F
4 ]) G5 j* Y7 g0 A' e2 u$ H7 U
%  求解序参量r(t) 8 K" I" b" B( x

8 A: }# L9 g5 ?9 IgroupN = 5; 8 t7 h- s. n) u, ^1 q4 f* s) m
, l2 A; n+ E6 H" `. v* [4 J6 }
Step = 1000;
6 T" \, I5 `! D" c, ^/ R
; Y* Y' ?, o8 h2 l- M. i% R7 }( U5 cfor i = 1:Step
8 A& c7 E, _( ~3 x
4 [  l4 r' R4 T2 x    sigma1 = 0;
& ~3 q0 q$ t% w( P. U: \2 Y2 _4 L1 r/ m! [9 `  u
    sigma2 = 0; 9 ^$ s" F+ c6 Y* G; B  v
( n$ K3 V2 e8 ^5 t( r
    sumTheta = 0; + n, _# D- g$ Y) j# y6 z! j
: z, g. J1 I' A: }
    for j =6:10  %表示相应的群组   O9 ^2 D+ o: Y4 t, ^9 e) M

! b1 z7 ^3 d7 S- e, X        sigma1=sigma1+cos(Theta(i,j)); % d/ b. E7 F9 S; i
9 {- I, M9 S2 z( g* Z6 h+ j5 f% a
        sigma2=sigma2+sin(Theta(i,j));
) i( x, I, m* {" I8 }" H
: O; h, F5 H/ g% N. v    end
9 ^* C/ Z4 q- U4 y% c: r4 f6 |9 `. e
    r(i)= sqrt( sigma1^2+sigma2^2 )/groupN;
) U  Z3 a6 t+ d0 Z; u8 u0 s/ _! {9 B
end ! P, u: A% c# j
4 O. F3 k* E7 @# e" X
x= 0.01:DeltaT
:DeltaT*Step; & n9 g$ T7 B2 h% y

/ \6 n- j5 D* |$ N/ J6 D2 mplot(x,r);
% H5 C# |/ ]; i7 w+ I4 u0 qMATLAB版不完全分散编组结果如下图:
7 ?; f9 @# f1 W! `3 g8 A% n7 Z
8 E6 W! k) z& W( w& [

该用户从未签到

2#
发表于 2021-2-22 10:42 | 只看该作者
Kuramoto模型在Python和MATLAB中的简单实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-1 13:29 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表