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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
事情是这样的,我最近在研究团队编组及内部模式对发挥团队能力的影响,以及如何正确编组让团队能力发挥实现最大化,别问我为什么研究这个,反正稀里糊涂就研究上了。我发现在描述团队编组间及内部同步能力的时候,人们对Kuramoto模型(藏本模型)作了大量的研究,其中包括模型达到完全相位同步的充分条件、耦合强度对于同步的影响、一定条件下振子的收敛速率等。但具体实现一般都在MATLAB中,且网上代码过于复杂(我运行了一遍一堆报错),这里我使用Python和MATLAB对Kuramoto模型简单模拟。
$ H9 Y/ x9 {+ {! D4 t模拟的话还是一遍举个栗子,边分析边测试效果最好,百度学术上有一篇关于Kuramoto模型的简单论文,我们就用它来实现模拟。5 g7 h" ?" n5 [0 M
3 E7 O& I# }$ J* I- {
好吧,那我们开始,首先是Python实现:
7 s: A- d9 b, i6 x
' u0 t0 v+ q( VN维Kuramoto模型的数学描述如下:3 B; U( w4 f+ }
, l' `2 h! k' y; d- j/ U3 \
4 _  t& F/ V4 C' i4 b
没错,是讨厌的数学公式,没事,它可以改写成这样:; l  Y: V% o+ C  o/ P

0 m  a  ]$ L, _, k
2 U$ O4 Y/ b2 m7 U好像还是有点长,那我们在改写一下:
+ c! J6 B4 ?+ K& N& m3 c
+ ^6 |( f5 ~& m  P# D, e3 L6 ?5 y- C( d5 Q3 ]
看着好多了,那我就来说说式子中参数的意义,Kij为耦合矩阵,是为了便于描述不同振子间耦合程度不同的情形。最下面那个式子的r就是我们的目标,反应振子间的相关性,这个相关性就可以描述我们想要的编组内部同步能力。$ o! P* I! A5 O4 k+ Q( s
5 m" y4 y  X+ o
哎呦,这个式子看起来好简单,这里要补充一下知识点:同步能力可不是一下子各组该怎么同步直接确定的了,它是一个从开始到稳定的阶段,也就是说随时间变化,最终反映在各组的同步能力才会确定,那么最后图像是什么样子才算同步能力好呢?
3 B" R* }  d/ E2 G8 l' D) {' d& N4 X: u; O
同步能力好,是指随着时间的推移,各组的同步能力r逐渐稳定,波动现象消失或固定在某一个小范围内。需要注意的是这和各组r值之间的差距没有关系,我们要的是一个平稳的状态。那怎么办找r和t的关系呢?
: j+ ]7 A1 s4 e, N" w* b# M4 Z% l- s2 k  N& ^/ ^4 x
注意看最上面那两个式子,相位(第一项,等号左边那个)上面有个点,这样他可就不简简单单是个相位了,它代表的是相位的变化值,是一个微小的微分值,好吧具体意思就是,那个式子左边展开之后是这样的:
* Z+ W- T" b) P! X* e8 N9 A 6 V* B: B6 {' B! b
3 y3 ?# @5 W% J3 |2 ?  c
哎呀,t出现了,其实\theta 与t有关,这里你可能有点绕,因为它们之间的关系是一一对应的,就是说每个时间的t对应了一个\theta ,我下面带入具体数值的时候你就知道了。* G, b3 c/ Y* F# r

. O7 z" o5 n/ w/ Y; n: d组间同步能力与时间t的关系出现了!2 X' k( I# v, l) R7 {" W3 y
9 M3 C: t/ r' g9 U3 G4 B! U
也就是说我先用上面的那个公式4计算出来\theta 的值,在带入到公式5,那么t-r关系就可以明确下来了,那现在我们再回过头来看看文章中已经给的例子,看看还有没有未知量。( r: T. K! A+ u, T" G1 W
2 ~9 t% V( u. X4 w! h6 n3 `) e7 B* l
栗子是这样的栗子:3 J" F8 I! h- @1 _: f: Q

9 O5 j+ _, U/ G# m0 q7 m" m+ F假设某机构内部有 4 个编组,每个编组包括 5 个节点(其中 1 个节点为领导节点) 。另外,将上级领导作为一个独立的编组,且只包含一个节点。假设在领导机关增加4名信息传递人员。当以独立编组模式编组时,指定1名信息传递人员为指挥者,其指挥关系与其他编组一致; 当分散编组时,信息传递力量节点的关系与所在编组其他节点指挥关系一 致。其中,完全分散编组模式时,各信息传递力量节点之间无信息共享通道; 不完全分散编组时,在各信息传递人员节点之间建立一条信息共享通道。各编组模式及其拓扑结构如下图所示:7 S, q. p2 H  O! o+ s
" Y4 _" L# V5 H3 B0 k2 v
独立编组模式& ]  L4 r6 s# Z2 k% B
0 ]) @1 I/ k4 |$ S% D

) T) [, M  O3 l  X' c完全分散编组5 V; t% j- R  R  T3 \
% T! \0 s: e( r# v; H- ~8 O+ S
' F5 J9 w* a' K" h$ E

1 T& Y* t( R. z3 r4 }不完全分散编组
$ \( @6 @& N" V 4 L1 a3 x% k, |- @

9 l9 s7 _! E5 b6 k0 g1 a4 [6 y' o7 l+ M5 i9 {6 D  a4 o
参数数据
& H7 r  K( s6 S6 B+ r' J
" ~# A* R1 F, Y8 b4 }2 ~/ m
5 i& [8 x- d) }! g1 V
7 M! R8 x  G  q* ]% n2 F
7 d4 |) N9 @0 N7 `) w8 z5 I1 X参数确定一下有没有未知量:; a( l2 f4 _5 O" x
9 l  D% W- F8 p* s" X$ I
首先N,数据数目已知,这个有了。
1 X% D! f% N5 ?2 L9 A# w
$ T% j& D  G% c: o4 `2 xK值是分组内的连接强度,这个是看实际情况,由甲方提供或者自己看着给的,这里就是甲方给的编组图,i与j点的链接强度一目了然,这个有了。
0 w( t$ l! ^4 [
, O& N5 t: Q$ y4 g5 F1 F& ?\omega _{i} 是振子i的固有频率,也称自然频率,甲方会给,没法自己估计,这个有了。
% x, [, a+ T% F: h
9 k' e. r. o# K$ ?" M0 a' F9 x\theta ,\theta 怎么办,初始的\theta 会给,自己也能测的出来,但那么多\theta {j} -\theta{i} 得多少不知道啊,这里通过翻看文章,我发现其实文章是有一个特殊条件的,不然的话是需要研究耦合因子求三种约束条件解情况的,特殊条件就在这:
* s! X, x4 {. S# U! N7 U* W, E1 q& z! p
假设编组内节点的初始相位差为π/2,且编号最小者为0,随编号增大而增大。
/ z& [% o: |) W! ]9 f5 [% k* \2 v, e  C% ^6 H
哦,初始相位差知道了,你还告诉了我各个初始相位,那么\theta _{j} -\theta _{i} 的值就在一个范围内的几个固定值里面啊!
5 O4 E  z8 _# b4 C# R
) K  V/ k& t* P8 J  ^好的,没有未知量了,就是找K的时候麻烦点,没办法,这个决定了编组的不同,写脚本算一下吧:* h+ r9 S  G. ]
5 c  F- ~, ~" P* i. t; M
#codingutf-8
. H0 O# }& D, g0 [7 ]2 ]" Y( Y  O# _7 ^" H
##ScriptName:KuramotoSimulation.py % n4 Z5 \* k7 Y
5 j+ m2 r3 J% \$ b( l, m
import matplotlib.pyplot as plt : A+ @7 M- H0 Z+ k

: T- t" g! o5 O8 s6 r3 A4 Q; \$ mfrom pylab import 2 `3 W$ C, }7 o  w
7 Z  S! x; w' S! n7 p5 t. K# N: w& ^0 W
from sympy import
# X9 d' {6 c/ H# o: U
7 T% F6 c5 P2 P) e  efrom matplotlib.ticker import MultipleLocator, FormatStRFormatter
+ i# ^! j2 X' N9 S! _8 V2 R) r0 l- ]
import math
$ R8 ]3 j3 l* P2 v6 [! z9 q- V5 N$ {, O( {* s8 c6 Z
import numpy as np 7 M1 _& t+ H# s  E: o2 S+ C
$ M9 }: o: A$ ?  R% |, S% w3 n5 Z
N = 31      #总节点数 " Z8 Z% V3 S& C+ Z
: p" }! G( X; ?9 U' R
c=[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] ' P) E2 B8 q+ s# E: @1 F
- T* \/ B! `' i# d' j2 ^- v3 }
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] 1 [0 H% ^9 j4 X% x0 p/ Q0 U9 G7 {. o
4 d7 t7 \8 O, p
k1 = [
, K# `3 W! ?( y& R- _, U  w. _% t) j
[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],
- b4 x+ v) g* A. {/ k$ b. A4 }/ N% C% ^1 Z9 D. i+ t' E
[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], 5 L9 A! P9 B* F$ n+ L3 l+ T

  N/ I" t2 K, V* 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], , i0 Y* [7 d8 U( F$ X1 S

* ~  r) C( C3 ]( }& g' p! `[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],   x' Z. C& M% _1 R

5 r; ]7 q: J5 Z8 _$ G/ ]5 e[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], ! x7 r) i8 q2 }- `2 Y6 Q, W
: H$ a4 B" T9 b, H
[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],
2 g9 l$ e- r2 E' q! C, e
% v  f3 k, n8 a( {5 M- b[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],
2 h5 `' t' Y0 Y8 b# t
/ A- m9 \! p3 w6 g: v[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],
7 x# Q% T0 k( J0 q/ E$ Y" f! H/ N0 u  I: ~, ]
[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],
/ D; w7 G7 }& o( q& ]; s) |! U
* N: K0 W. q" ?4 g( W- S[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],
+ [- R) }+ p  ?( _$ k  k/ n, O* b& s
[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],
' I" t  {( z" |# O5 v; O
3 Z8 n7 J8 B' Y[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], ; }0 T7 m- q3 @; v+ X
% {3 G" L3 b% K$ l! b( U' V+ |+ e
[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],
! r7 s" o) _4 Y8 X7 B8 {6 i, ^+ Q0 J: o* J7 J. I& {, Z
[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], # |% M9 B. E" j) Y/ c5 Y4 g: J
1 k" p  m, A: R) ?4 i
[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],
4 H1 o' \2 H) F; C: x1 u8 _( N( U9 t8 h7 I
[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], 8 v. `: W; T$ K5 |

4 E% T7 o  A8 ^6 e7 w  v* q[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], 5 e6 a! p! g# F$ V' S
: V& J* o3 P, E& b1 ^
[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],
  E0 k4 c' H+ i6 N2 G7 y/ ~. M0 |: u/ {1 b: W+ _& B  p
[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], * X" Y" n4 T. ?
' u+ O; w  ?+ }, S) A, y6 m
[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],
% L8 c- f, X( R" \3 s( M! W
  B* ~% u' z8 C3 u" H# r- F- 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],
2 m' p1 `" j- {$ y! ~: D( ]& V8 y4 b0 u, t
[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],
+ u# X, N) c9 s: J5 k! A, p$ L' z. _
3 w/ t% z. J  d( }[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 j: C# O+ M' B% }- J
# l: O; S, c4 B, f& `5 A[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], 4 x; T! y; V# k" \7 _3 ^

  S/ [* ]* h' P: W[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], . Q! H* i: F" S/ _" k

6 e5 G6 J0 F5 D2 [" R- M[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],
6 g: l6 |9 v3 F! _' [& ~
5 o1 N1 E7 ~8 R5 y2 o* 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],
& a! y% b7 j5 U9 f" T0 _) G) ~4 Y" H
[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], 5 G& Z$ n! R' V

: O  k4 n3 r# K5 _+ f8 c[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],
  h2 O$ X% {; T- U9 r9 I1 I, G" k% N
( ~; G! H" h0 z* R; L[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],
, [' O% A& M' i/ `& e  D- P
, N3 S0 v: f+ Q6 i. V[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],
+ N9 v0 s  R5 k3 H; w
6 U$ h7 c4 l6 {4 z9 e6 {; n/ ~[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]]   
5 H  ^* _# l) I, b3 r; W9 A# k2 G
+ L+ `% C8 H: s( p8 V$ `n = [i + 1 for i in range(22)]                #目标划分,24个值,1-24
8 q" Z, M& Q8 ~! T6 [& a+ V
- ?% M5 w! M; k4 ?" z( s7 vt = [j  for j in range(1000)] 8 }, X2 s# A) i, v- I0 A

8 C0 |( q. _: w2 A8 S/ N$ @ci = 0 $ _1 D/ z6 ?! t* {3 i
: t9 ]4 k6 b  b, I8 t: O6 t( N' D
C = [] / t9 h! J0 x5 U# d0 F  |' W

0 }' Q) ?! G+ MC.append(c) $ L$ D8 E: {/ O+ }$ n
% Z7 n8 j5 ?' X* [$ [
for d in range(1100)
( ~0 m7 v) r8 h6 @  n% V" h, V5 D; w7 d* F" E3 P9 ~; K$ s
    for i in n   \9 Z2 f7 {( P' \
& W2 ?" n: U/ E
        for j in range(22) 5 V; L& t% c; P' z+ M! f

" o7 ?+ ~& P: k0 f0 |( N* e            cj = c[j + 1] - c
+ E$ O4 N' c/ Z& s$ ^$ M
5 v7 V8 `) h% |) ~- Y. b            ci += k1[j + 1]  math.sin(cj) 8 T. x: k6 W5 d1 u* ]

6 N7 J2 @8 A+ _. f9 n0 a1 `6 c        cii = ci + w
& y0 I8 P6 T. o+ o. K) s7 b
' [1 G9 P% h7 `        h = [0.01  cii + z for z in c]
* d; @3 l  G& N1 z# @9 |* R7 @/ N
7 f! H9 [$ M: N        C.append(h) ) G$ M7 _9 S5 L0 ~9 z4 K

* `9 Z( l) k) }, k7 b& Q( ?9 s        c = h ; T" c8 t3 L$ H/ |

: p+ f* k) S2 b/ Ndef r_function(u)
6 ~: k  E# ]8 i* C5 o
  c0 a" P7 P* e) [: M7 U    y1 = 0 1 A+ [' C- ]* R3 Y7 c
) [7 ]* `; T4 g
    y2 = 0 . w3 R! X# x  L) E) P3 V

$ N4 E( z: i+ E% }) b    y12 = 0
& @9 s, `* ?# i3 R/ K$ n' Y
) d9 o; C5 C6 B( u& q  x, T    y22 = 0 / R8 o9 S+ i; G! _5 b
; r' R3 e9 F5 x! r! d( P( y
    r = [] ( B* ~2 {6 ^! s% \* S, n1 A# t3 u0 u8 Y

3 l3 a+ w0 z8 |4 [    for x in range(1000) 8 ?+ `- B% r% r' `% T

2 Z; I: R; A, a8 u2 E        for ul in u
# ^- k! Q$ _" U5 x# `9 Z! @  G, ?6 d5 P; i8 p! z
            y1 += math.cos(C[x][ul]) % e. t# C$ R+ o" p( z$ I

. @' `/ r  O, t% ^- g" i% {            y2 += math.sin(C[x][ul]) * v9 e, Z8 u7 S, C* [6 S
! y- u! F" v5 s0 Y: G/ ]3 ]
        y12 = y1  2
  O. {3 s2 z$ X0 ~' I  \- Q2 b& t
        y22 = y2  2
8 o; x% s" k$ K  X! ]- M
4 z& c- b8 T: D9 u( T! ]5 Z        r.append((float(1)  N )  ((y12 + y22)  0.5)) 4 t2 J+ T! B. ~3 @/ C7 b$ W1 ]
" R* o1 p$ w; M- V2 l
    return r . T: Q0 a5 u! _$ g: J5 `
: C8 ~8 S* ?( H: k
r1 = r_function([1,2,3,4,5,6]) " Q2 `6 C6 R) B

5 \' q! S7 \8 B$ `4 cr2 = r_function([7,8,9,10,11,12]) - k" ?5 u' g! n
: s% L! t3 z& c) m6 k
r3 = r_function([13,14,15,16,17,18])
1 A  ]0 q# Y2 L+ P; c2 k9 F4 f" ~3 h% K2 Q0 U
r4 = r_function([19,20,21,22,23,24])
9 B* C+ y4 w* a$ r, i
' M4 \; Y1 L0 b' |) vr5 = r_function([25,26,27,28,29,30])
$ N: a7 E0 s! u$ J  I# O
9 {$ u0 ^! d" C2 i2 u0 _#r6 = r_function([31]) , n0 r) N% b/ r% e7 T: Q/ n
6 ]( j9 n7 S$ ~9 ~, k7 ?3 Q
1 b1 e- x9 X: T! i  g
2 O5 U! G) k3 k2 u- a6 x1 T: ?
ax = subplot(111) #注意一般都在ax中设置,不再plot中设置
+ f  q" L! D( R
4 D' q7 u: E+ V7 n6 r7 lymajorLocator  = MultipleLocator(0.1) #将y轴主刻度标签设置为0.5的倍数 . w8 {, e4 T  z. s

$ n- s. s& W6 Y: m! ^ax.yaxis.set_major_locator(ymajorLocator) . I: D: V& Y% v- f: q5 ^: j" a

, J% W' t7 c% v4 K# w- L6 Rplt.plot(t, r1, marker='o', color='green', label='1')
5 @0 H1 N+ T; P6 x) x' [
7 o% H- ~( b' \+ i9 y4 Splt.plot(t, r2, marker='D',color='red', label='2')
$ y; Y. z1 n" g! `! k3 Q/ I! u* g! \7 J2 L3 w  N
plt.plot(t, r3, marker='+',color='skyblue', label='3')
% P0 S+ ?0 `- W2 [1 k2 o( _/ j$ D6 a( j. b: G
plt.plot(t, r4, marker='h', color='blue', label='4')
7 f6 u1 [& h% |. R  e$ ]6 F" [% M4 [# S
plt.plot(t, r5, marker='_',color='yellow', label='5')
5 d  Y* W, Z' u" C% \$ ^  z- I3 _. j" \: M0 z' y8 w* @: x3 D: D
#plt.plot(t, r6, color='red', label='6') ; `' g! S; B) Y& b. X
- U, G# m; [2 ]4 I/ O8 P( F

3 _6 a& T: C' e! U1 t0 e- B5 ?4 H& d3 g, X- k0 T
plt.legend() # 显示图例 3 z+ ?# r: A  K& O. P' v  X

9 Y  S2 T! l5 Pplt.xlabel('iteration times') % D* l3 b- }& V0 @2 e) n3 g- M$ c

1 Q' W; D/ p/ N( x/ nplt.ylabel('r')
7 f0 g# L( r" p6 B& U( {: W; x8 E  R; \& L7 p9 `" X
plt.show() 0 F! N7 \9 P( O" S$ e
, u$ f' I, f! D8 {) [& }
$ Z- ^; a( R6 n& p# U5 j
独立编组结果如图:- |3 K/ e' [+ J5 i/ r

3 H6 T+ R$ |6 R) x. Y  ~6 E* R& P. c, {# ?5 E
7 M& J( C  i$ [2 f- B1 I
k1独立编组6 T2 d: {$ N. _/ l
好的,从图像我们来看看Kuramoto模型在描述这个编组的时候,5组最终稳定,我们说这个团队编组还算科学,但我们改变一下K的值,换成分散编组:- r( F8 e( M! i

/ ^8 }( \3 O" {k2 = [
& g' ^% x( e4 Y) X& f( M( D: o" y
' n/ ^) z: ]9 f% v7 ~[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],
% H4 z: |0 Y/ U" f' M% ?
8 j4 }5 q4 e6 s% w0 D# @8 a[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],
; f9 @+ @/ M7 I/ X( o* x+ E6 E( _
[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],
: e- P5 @; p' J2 V+ [* X
$ z' Q) X! N1 q! c5 ~! Q& z[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], 7 a$ v1 b) {( H9 T* V

' R5 z" q3 T2 @! g, F1 [2 E! G[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], % U: s! x. {' D1 n" F
! m' j# ]: p8 F
[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],
6 R) T: ]( p. ?% o5 I& b9 `1 v$ U$ y9 [2 [
[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],
+ a. Q& |6 C$ y1 [4 ^/ n' A0 F0 `
* j# s$ H0 e7 b" [3 `4 g[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], + y1 \: d+ }' b- d; p1 A

7 T7 o3 {  ?  o# t! X* v[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],
+ E, J' `. E! m( f/ W( Z6 H4 f7 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],
" H6 ?" W! \+ _3 e+ o- O  n
/ ~( |$ ~% ?5 ^$ z[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],
# t  T1 X: a& k6 C; n+ N$ q" z* B7 X8 Q" u9 O. r* p9 ?7 o8 c
[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],
1 b* [. {, i: c. H
3 m0 L2 T( k) }[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], & e# {. k) U3 ^; B6 m* A0 }
$ @9 q! o2 w: U
[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], - j6 _8 Q# ~4 B- Q$ @. X
4 ^4 m* d" o% b" F0 U9 N/ v; Y
[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],
: B6 u% p; R5 V  p# {" Y% _
" h: U& y! Z1 C6 M: O[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],
7 f# s: u" m3 v
) Y5 ]' V) F- Z6 Y0 Q[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],
! m" k9 v; k% m' B" V' i( i
- f7 K3 U5 Q$ Q. s[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],
. _6 ?9 G& [% V. L5 O+ |1 `, @
* L  k3 K2 k6 r1 p[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], - l3 h" m: S5 |1 T( d8 \

9 y5 s9 f  W% r9 t! H4 ?[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], 9 ^  d4 b& m( h

* b0 R; _( P# _  D1 P3 ^[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],
, Y$ R$ [6 I) D; l2 q: {( r4 {
5 x& b- q# i- e  f[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],
, \$ i: R! r* c& S
9 a4 M7 I7 ]0 K. \& O5 u' M[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],
% ^% y2 Y8 f& c& z5 `) p
! E5 ^7 |1 ]' ^8 P5 b3 x[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], $ {) z+ g+ S8 X+ z8 ~) ?
2 G/ u% W% T0 G
[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],
9 M% U' }+ W) _/ X8 c! I' s: q7 o: d) {3 k' d+ r9 F; 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,1] , s8 l' ?! T) u0 R

3 z  Y/ g9 B0 c" o; c5 p
" K. j  `8 P4 z; L; k/ A

) b, W5 I) E9 F# z* z' e' n! vk2独立编组, y! _( }* r( e9 Y

- V9 z& v& k+ f+ g5 U# L5 j% q/ l+ u  T) L3 A) }

; `5 q& U7 M6 K, Y2 e这两幅图像都在开始阶段大幅波动,而后在一定范围内趋于稳定,那么到底哪个分组模式最符合实际,最能突出编组能力呢?
( b0 n2 H0 }$ V! y6 c" L5 ?8 b! M# f3 Y; [8 n' z5 h. n
这里还有一个公式,来解决这个问题,编组同步能力的量化:
# D+ l2 z( o4 _5 s) X5 [
: m- e3 t1 X( x
+ Y: Z& o; k4 ]3 G! a5 F1 {
M_{s} 就可以描述某编组的同步效果,r_{s} 是达到稳定状态后序参量的均值,β∈(0,1)是调节因子。我们可以用M_{s} 比较编组内部的好坏。那编组间能力的好坏怎样比较呢?
3 O4 L+ N; ?0 r, n& c2 W, W" J* }& I( @, W8 ?+ V1 D- w! u
这个Kuramoto模型同样有所考虑,它有一个描述整个系统编组能力的公式:7 R, C( d) g# N5 Z3 _
5 G* w9 J& z8 C2 K6 [, s
2 i6 S2 e% E, t7 M5 K3 v5 v/ Y
其中,P是编组的数量,M_{i} 是第i个编组的同步能力,\omega _{i} 是编组在整个系统中的权重,\psi {e} 是各编组平均 相位的均值,\Delta \psi 是各编组平均相位的标准差。具体的计算不是这篇文章的重点,就不在计算M{s} 和M的值来比较上述例子独立编组和分散编组的好坏了,本篇文章主要是讲下Kuramoto模型的解决思路,尤其是上面解决\theta 值的方法可以套用在其他Kuramoto模型中,做一个目标估计绰绰有余的。/ R  n5 C3 o+ i! m4 o: T) x2 Z* \

( W, k" \+ j5 i  Q下面是解决Kuramoto模型常用的MATLAB编程方法,具体思路与上述基本一致,这里不再赘述,K的值我们给另一种编组模式:不完全分散编组模式,也是现在实际上最长用的编组方式,直接上代码:
& T8 P- N; q$ F) x4 r8 w: p9 E& j" H4 z% `. \
clc;  v% B& O9 G$ l& m+ E
" _# ^$ J$ C# l2 e8 d  C
clear all;
/ S6 o3 E* E5 A& p; |& x5 ^% C, Q" i' C( p. F: r* T4 s3 S7 D' z/ C
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; & S) o  b, k2 z3 }  x  m

2 E6 `# s* \% I2 B/ h+ o  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;   
* `( c8 Z6 W6 u! ?' G) B& j3 @  n% J
  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 ^: c$ q5 d/ ?& I, S
" Z6 ?% q2 O! }: c8 a/ _1 d  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;   
! [& @; {3 w7 G) q4 z2 y. U9 z% K
  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;   ) T$ y! ^; P7 h9 S
% Y9 ?5 n( V/ n5 T
  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; ; }2 o7 g* _& e6 ^! A, ~0 U

6 ~& e9 Y9 I! d9 s! @; u  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;   
; V* G  O# @. h  g) @) L
4 L, ~% ]+ g" s7 S  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;   
: \; j4 U3 c$ f& ?% s  W7 C. B: d( C4 f9 X
  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;   & }& V. r8 q. {, s3 `( }4 s. X7 m
: d3 \; D' G- \: S
  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;   
* x+ z" ^2 ~" ^5 @; t/ {) }$ I
  o5 b/ v7 {' F! X% T1 |  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;
) y  o/ m, G5 l. U: v7 g" T" T. l) i  |7 l8 W( @# k
  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;   * Q9 f9 K6 E+ p
# Q) }- U5 G- ~* B/ u$ Y
  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;   & d+ [9 w* B; ?; ^& s" @3 O0 [; T% b

  ~6 Z% j' @7 D% 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;   
3 J+ ]$ y% J8 ~5 [/ @. z4 a$ H: p' s  y! g7 B8 {: i1 E
  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;   % a9 \/ Z- j5 S: Q8 \

/ e0 ^4 J0 i; w5 H  T: |1 E. L% G* f  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; ' K7 I8 e* M0 {. A. R) [) R* w

. S+ h, V3 i- G0 q1 U0 ]  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;   * U& u& u4 ^" Z5 f& h: V: ?

, U( c6 \& X& S7 G) f" E% D  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;   
: y& \" Y# [: J! M2 g' h% O8 m" e+ Z2 ~
  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;   - H' x9 ?0 W0 g7 {% P4 s" b$ S" x" H
: A1 {. N9 Y9 j8 m' G) ^
  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;   ! b- R3 o# y. |% G$ L1 F/ l2 s1 ~
% V3 {, {& N  p7 W
  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; % `5 h* S2 t& M
, P& B/ b( b% X
  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;   
) J* @$ f7 N0 G/ {* q" m2 h- W1 c- v  Y! V9 M  Q* r  q
  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;   
- {0 \/ ?7 A$ `* V1 P- U
5 Y8 ^/ ~) Q6 [0 d3 n  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;   % @# x9 n* e/ X# @

$ L3 Z" Q1 k& l5 S$ I  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;   0 _; z, D7 ~/ y' b' Q; Y

8 N2 [: ^0 P5 L& o) p  ]     
6 E( S5 R( ?6 V5 |4 [; g, t; R1 f' \2 U, z, X
N = 25; 8 g' H  I& d/ x+ Q

! Z: C" j2 w- w% b. c& }Step= 10000; : _) |- f  G- a2 }6 S: p! t; M/ ~

- N: _0 }/ \* J6 P5 X5 k& x- zTheta=zeros(Step,N); 7 n1 }. v$ o, e/ S7 u

  m6 M. G% p* o$ m4 j* M: yOmega =zeros(Step,N); 1 }4 i* D, @8 G4 U
! P+ ~7 k* m8 H/ \; ?! U
DeltaT=0.01 ( y1 H8 t+ E% `. ]. u7 O  g. S+ H
+ E# E" t5 I( j
Theta(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]; 2 ?( j5 \! c/ v7 e* [: W# Q# B
. L! M0 c3 L) Z6 m: W( p, C
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]; . R! B7 c. w$ n

7 C8 k4 ^, l% @, R; ]6 \. c%  求解微分方程 2 |+ Y) W' b" y" Y& K, _$ o/ I& t% U
4 ^. u) `; Q  k( y& x4 D$ T
for n = 1:Step
4 G- t& k' Q& q# Q3 e5 g  R: \* g$ p4 E" K
    for i = 1:N
& Q; T; J% F" k* n% m0 M* w# i
$ ~- D, l, ?2 _8 I9 ?; F            Sigma = 0; 4 u; d9 u' k* Y: _! U. `

' U; n, |/ s0 T( `$ h9 h0 D! x. _  H' u        for j = 1:N - z2 J+ n' u( F. u
; O- M: V: Y' v7 p0 W
            %%判断k对同步效果的影响 9 \: r# W' e5 {  p( a6 {% Y' D

# d- Y9 J9 ?+ i3 q: W, z= Sigma + k(i,j) * sin( Theta(n,i) - Theta(n,j) );
( X9 Z5 |- I& a1 W* T6 R9 X/ k: h7 K; f+ J2 X& ?& L
        end 8 k5 o4 }. M9 [% i( W
) @, K* C2 {" p  }/ {) `
            Omega(n+1,i) = Omega(n,i) - Sigma;
: K( Y9 r9 ]- p$ W2 P! r1 t
; I. }% M! z# l! y            Theta(n+1,i) = Omega(n+1,i)*DeltaT + Theta(n,i); 4 }7 j$ z0 p4 c1 _# U) }+ T

! x$ S% L6 v4 n" i4 [" K    end ( H' p4 W4 _" k/ r

# E- r" ~9 c0 F* z1 Qend
, H: d: b7 U3 @& k9 k! P( q( d; v5 q7 W5 ]( l+ l3 x
%  求解序参量r(t)
! C" b' H& M" c/ e, [6 y. \! E$ }8 t( H9 h  [* p; q  D  c
groupN = 5; $ |( `9 ~( C: G/ n" ]
2 |0 g7 V7 J) P
Step = 1000;
% M" b& ~0 u( S  s3 N: q7 X  p0 D. X/ E, ^7 v) @- {( R
for i = 1:Step
7 D: K+ j: `) o' \  h( a
$ m" {2 i: V. U# Y% A    sigma1 = 0; : g5 ^% r7 Q: S1 W+ n) S; @

% V9 v; A0 P* U  s' {6 V; B    sigma2 = 0;
; }$ _4 w$ @, ^0 U
# f3 l3 g4 t2 q( X+ o9 g, U    sumTheta = 0;
$ Q8 `5 |  i. e2 A+ _/ O( |) H$ I, W
    for j =6:10  %表示相应的群组
  L$ P* G. B- I8 g# u( m3 J7 ^  U
        sigma1=sigma1+cos(Theta(i,j));
( U; x9 h/ R: W1 B3 i& K% Q( J1 W; ~! e: e
        sigma2=sigma2+sin(Theta(i,j));   k# W+ p# J$ d2 i# a

/ Q% }% e# x1 E  u6 l    end
' [# d' i, f. b' ~
3 L5 Y* {+ @" [& {    r(i)= sqrt( sigma1^2+sigma2^2 )/groupN;
! m. e, m; q( Q7 G  e4 b$ g- }
- D4 j. |5 a: q1 [0 ]end 1 B7 d1 o( u7 h; z- l/ n; B

4 f+ C+ i4 w* k( ]x= 0.01:DeltaT
:DeltaT*Step; " w3 T# U6 {4 j$ v

2 Z7 [/ W. R6 |8 jplot(x,r); ' o* J4 u/ ?3 E; i2 y
MATLAB版不完全分散编组结果如下图:' t) D, ]1 l" V2 R8 _6 K
4 E4 _5 v% l. h

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 06:50 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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