EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
事情是这样的,我最近在研究团队编组及内部模式对发挥团队能力的影响,以及如何正确编组让团队能力发挥实现最大化,别问我为什么研究这个,反正稀里糊涂就研究上了。我发现在描述团队编组间及内部同步能力的时候,人们对Kuramoto模型(藏本模型)作了大量的研究,其中包括模型达到完全相位同步的充分条件、耦合强度对于同步的影响、一定条件下振子的收敛速率等。但具体实现一般都在MATLAB中,且网上代码过于复杂(我运行了一遍一堆报错),这里我使用Python和MATLAB对Kuramoto模型简单模拟。
8 |, W3 P* j1 J6 u t2 X: D* X模拟的话还是一遍举个栗子,边分析边测试效果最好,百度学术上有一篇关于Kuramoto模型的简单论文,我们就用它来实现模拟。
, r( d) U' W: g) a1 B# S/ h$ }! m2 [: Y# `6 m% t$ H/ e
好吧,那我们开始,首先是Python实现:
& i" k6 Y6 Z8 |: S" y& E) Y# S6 T; H$ ]3 L1 v3 W. l
N维Kuramoto模型的数学描述如下:
: N9 h- O) P/ a% d T/ i+ b9 ~, y
# f2 _0 Y" K1 @6 n7 A: E3 T: m0 z( u G8 S: ?6 c; G
没错,是讨厌的数学公式,没事,它可以改写成这样:
: r# P- C9 o5 r! U" t
' k1 {! d/ f& w: y, i! U) P2 W- p: P) {" j
好像还是有点长,那我们在改写一下:
* s- l9 l; O$ Q2 L( I1 j
4 p3 p) O8 |% D- D) H+ ~* R& k
) m7 g' X, q: j' G4 L
看着好多了,那我就来说说式子中参数的意义,Kij为耦合矩阵,是为了便于描述不同振子间耦合程度不同的情形。最下面那个式子的r就是我们的目标,反应振子间的相关性,这个相关性就可以描述我们想要的编组内部同步能力。! F" B6 u* i f: ~, o
; w3 [- O! N% e$ c; b
哎呦,这个式子看起来好简单,这里要补充一下知识点:同步能力可不是一下子各组该怎么同步直接确定的了,它是一个从开始到稳定的阶段,也就是说随时间变化,最终反映在各组的同步能力才会确定,那么最后图像是什么样子才算同步能力好呢?0 D; F. |# W4 Q+ t8 W8 N1 M
' B1 \- Z; I; K& O9 o( H8 [
同步能力好,是指随着时间的推移,各组的同步能力r逐渐稳定,波动现象消失或固定在某一个小范围内。需要注意的是这和各组r值之间的差距没有关系,我们要的是一个平稳的状态。那怎么办找r和t的关系呢?- \8 t5 v8 B) O' c; Y0 _
: s" {6 ?' L6 d4 n# ^: v U/ Q
注意看最上面那两个式子,相位(第一项,等号左边那个)上面有个点,这样他可就不简简单单是个相位了,它代表的是相位的变化值,是一个微小的微分值,好吧具体意思就是,那个式子左边展开之后是这样的:
# g4 O6 h) U- b/ X- k8 g
u! w' {' t9 g' V U
- c$ `' W% r2 F6 x4 z$ F哎呀,t出现了,其实\theta 与t有关,这里你可能有点绕,因为它们之间的关系是一一对应的,就是说每个时间的t对应了一个\theta ,我下面带入具体数值的时候你就知道了。
* f7 n8 V) u- Z' S6 D8 \! s! b
% S G$ s8 c: c组间同步能力与时间t的关系出现了!, K" [! F# T }1 g" Z( k# c4 w$ ~
1 |+ g" \8 G( Z" s' l% I) l也就是说我先用上面的那个公式4计算出来\theta 的值,在带入到公式5,那么t-r关系就可以明确下来了,那现在我们再回过头来看看文章中已经给的例子,看看还有没有未知量。
: Y$ i2 E: K M, H* z/ `
# Z7 @- b' G8 A8 Q% h5 I5 O0 y栗子是这样的栗子:5 b7 o! I7 _5 j4 P, i3 V* L# m3 |& O
( U9 l3 i% x! u假设某机构内部有 4 个编组,每个编组包括 5 个节点(其中 1 个节点为领导节点) 。另外,将上级领导作为一个独立的编组,且只包含一个节点。假设在领导机关增加4名信息传递人员。当以独立编组模式编组时,指定1名信息传递人员为指挥者,其指挥关系与其他编组一致; 当分散编组时,信息传递力量节点的关系与所在编组其他节点指挥关系一 致。其中,完全分散编组模式时,各信息传递力量节点之间无信息共享通道; 不完全分散编组时,在各信息传递人员节点之间建立一条信息共享通道。各编组模式及其拓扑结构如下图所示:6 u/ ]' y! Z' a8 R; L
% w2 V2 d+ t# L% a
独立编组模式
+ x' l6 y- t/ t8 \1 h y; i
' o( i- ^9 a& Q; U7 V
3 B' h6 d6 @+ @2 b完全分散编组
% }8 X# U( U. ?# z3 `
8 ^/ ?2 X D' A$ {) V9 K1 @
& P/ [ F1 l- d7 ^/ j, Z5 L% t# F! ]" W2 \* E/ [ L* {' S, i
不完全分散编组
9 m* q7 C/ N8 y6 s- p
3 @$ I: P, b z- Y
1 `$ `" |( H6 `! s
. d# a0 |" i; s7 |; e. }参数数据
! `, d" f( @7 z' L1 K" ]. x& d6 j
2 \+ w% q( E& z5 o6 P
8 M0 f) k- w' T4 Z) E: E: D* I* G2 L: L+ `; A F0 V3 O
: ]. A q; R" O) b9 z( J3 w参数确定一下有没有未知量:
Y5 |$ M' n" K( L: v/ @# I8 H2 _# P
首先N,数据数目已知,这个有了。% i& p( K3 R) R! C
6 a# F v+ f& ^* e4 ?( E( A5 G
K值是分组内的连接强度,这个是看实际情况,由甲方提供或者自己看着给的,这里就是甲方给的编组图,i与j点的链接强度一目了然,这个有了。
: a# ]5 h9 Z! Z+ w/ B k7 K& S; ?0 x( W6 r6 h* w9 ~) _
\omega _{i} 是振子i的固有频率,也称自然频率,甲方会给,没法自己估计,这个有了。
, I# U& X3 z, P
T! m& L$ y) c. |$ _' V\theta ,\theta 怎么办,初始的\theta 会给,自己也能测的出来,但那么多\theta {j} -\theta{i} 得多少不知道啊,这里通过翻看文章,我发现其实文章是有一个特殊条件的,不然的话是需要研究耦合因子求三种约束条件解情况的,特殊条件就在这:8 {# _' q+ y0 t* K) j0 |
) A E. P% e, d2 S" }$ B$ h( d
假设编组内节点的初始相位差为π/2,且编号最小者为0,随编号增大而增大。1 J( a1 z! V( G% i% V( G
" @7 O) V/ q8 g哦,初始相位差知道了,你还告诉了我各个初始相位,那么\theta _{j} -\theta _{i} 的值就在一个范围内的几个固定值里面啊!+ b* A! J5 x, C
L3 C$ S: s# j; A* ^, M. F& I好的,没有未知量了,就是找K的时候麻烦点,没办法,这个决定了编组的不同,写脚本算一下吧:& W9 A! x. n0 O, m! ^( z2 k z
- z: t3 k' Y L9 ]8 P6 i& x6 D5 Y& U#codingutf-8* B; Q8 g8 \/ h( S5 F! M8 I( p
, X$ `( u& b8 w
##ScriptName:KuramotoSimulation.py , F; ?% g- F" T- ^: q
- `, d1 Q# _9 I+ Y' Y+ N8 P
import matplotlib.pyplot as plt " M( T% O! k; {6 \3 c& D, v+ {
# ?' _$ Z) K1 ?$ ?5 y1 Rfrom pylab import
/ Z9 w5 C& E! d* J* T; {
4 C" ?+ `8 A" ~1 F3 Bfrom sympy import
/ O, a; [! n: z0 k
( f* ?5 q% m) g% T1 O! A$ vfrom matplotlib.ticker import MultipleLocator, FormatStRFormatter
. s" w$ M# h1 f r0 W: i3 ]- F2 k) v* S2 j- [0 K* v; N
import math
- x+ y H5 {1 W! a# b5 |: K0 {9 F/ K' ~# `* G E$ _
import numpy as np
3 f% j$ w5 C1 Q# u4 c% J+ a
6 X/ K$ Z" d" @: VN = 31 #总节点数 ; N9 |0 ?. @; S+ P! C
$ m6 q% F# _! H8 a5 {/ W" y- t6 u
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]
, E) a- x; b( `9 O j9 L: T
/ F. |9 v8 d" k) p4 w3 Q' d; K9 Z, q0 cw = [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] ; S! [9 r- S3 c( a8 q3 _
4 i/ t" y& R. d5 a! Z R
k1 = [
- C8 ]1 p/ g+ R2 z- p/ u' M$ C1 ?% _* O @- b `6 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,0,0,0,0,0,0,0], 0 q, z& A) a) T* ?
) Q6 O* w* c: J+ q7 s! F[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], 2 q& O9 h# j8 m
! _% ]5 d z/ q( o! q# W) C- |5 b[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],
0 U8 m& `* u4 \! s3 g
3 p1 H6 K0 W6 H- I7 A/ 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],
; o6 R# H- X# T1 ^6 x6 S, P
( l6 r& i/ V4 B: c[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],
: ~+ |3 d5 K3 s9 Y. V, C* M( _; G; z! B! \& W: d
[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], . f) L% ^8 P7 E# d* D3 {
2 S1 b- Q7 J6 e) {$ `* b+ w
[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], + O4 u y; \7 b, E5 I& {; r e5 \
& V, R% @6 R/ k. e! O& _[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], 6 C) D5 ~& A4 f4 V& V
5 |: ?8 O6 D& w% G$ J! N; _[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],
7 \, @7 `# _/ @1 j4 v
. J8 m( `3 b2 E0 A, W- w5 F5 J[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], w$ N1 k, l9 `+ C2 A' c
8 V F2 b4 G4 h
[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], 0 ~' v0 A; I& _+ _" J
2 T7 h1 U6 K0 l+ L, R, B6 \9 p% t[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], % T. x, Q% [) K8 q/ e/ U3 ]
2 v3 G Q9 L8 z6 D: x, \# 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],
8 w* ?8 E: _; T) k
0 @" [2 ]% q; D) p+ X( n" O- l9 ]+ t[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],
2 [0 k2 k% j# Q0 R5 b# t: i& F* D& l% ~( w' v6 d T* R% n
[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],
5 F0 b& u3 }% h$ q. y1 G# V8 x* i4 J+ i9 A9 L+ V' |7 z4 G
[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], 2 y/ O( `4 o, n* f
4 C) G6 \) x: f( D- [
[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], 0 Y6 H+ f5 x; G5 j g* u0 m3 A
' m. L( D c! v! D
[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],
' m( k/ n3 x% ^$ B
) X9 e x( x3 J3 b# H[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], : G4 ?8 a0 g2 o( P' l0 I0 I' T& v
/ S; y8 x. L7 @9 r" x. P[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], + z7 b4 V/ Q9 u- z; l
4 N0 b. o. f" q6 I; D/ d
[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], 1 P- h1 x" G3 n% J8 ?4 W5 o0 q& e
a. x1 m2 w$ u5 i" w$ r, t' |6 ?[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],
/ q9 Z" J, M* u, l$ U- q; j6 s" O9 F* O0 E4 X5 l7 r9 K
[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], - l" a+ O: y6 d. g' s7 X
$ E+ j' Q* Q. t$ x: T
[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], & g$ |, t- m7 z/ E' A+ ~
/ e" G$ a% w6 M2 y0 m
[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],
O, m/ \, j Q9 s
! e R' ]; |1 Y# n* F* _7 g& 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,1,0.6,0.6,0.6,0.6,0.6,2],
, W* u. N' [2 a( g4 o2 b+ e2 f0 k2 P# F1 @2 q% {
[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],
0 M' Q! t+ H3 }( N: w
. s7 y) s* l/ i' Q+ J f[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], ' F* H' d, a6 c9 }% z5 y% \; x
( z& Q. ?) ]0 w4 p
[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], 8 J5 l+ u$ J, G7 D$ z
7 b4 c5 a- g, Y4 X2 o- D
[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],
4 S0 \! z3 _" n- A2 u, L( t- j9 h5 f" H; r% o1 D& 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,0,1,0], 2 a, Y a h2 U% o3 M2 M6 K' v4 u
( K& B) Q+ S) `0 j" x+ ?' ~
[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]] / |; C4 A" ~% B5 Q6 N
7 c4 U$ w7 \: a0 i4 w( A0 Y8 x4 Ln = [i + 1 for i in range(22)] #目标划分,24个值,1-24 + I* S6 w6 O7 A/ m
; Z9 ?; [5 N; O7 L3 ^+ c- Tt = [j for j in range(1000)] # Z3 _5 [ g& A4 F0 k6 f4 u
5 ~$ y) E+ k% X# h/ Z0 Aci = 0
1 w$ @, M7 `4 Q a+ D- p" R+ b- z) _/ w% a
C = []
8 U% S6 Q* _; Y8 Y6 l# r3 J5 V/ c) O! }
C.append(c) / w5 m9 T; k: K
& q& D1 m7 ]( N6 a
for d in range(1100)
- Q4 H8 G& f; E' O6 o
8 k( i# _% r" V9 ^$ D& l for i in n
+ B! s- q4 m8 _2 ~ l* z# v* E' E0 G* O: J
for j in range(22) . k: T0 h6 Z( ^) N
+ O: y2 ]8 E6 }9 e8 F cj = c[j + 1] - c
/ P, |) e' C4 L8 |& E
, N$ F+ p- w, P+ T" R1 n& C% a ci += k1[j + 1] math.sin(cj) & x( n- H) ]- x- H. T% D: Y
% ^; y4 H9 @% z( u" q
cii = ci + w
/ d; v6 L- g: L7 W, f6 y" ^; S4 B5 {. [" @ h l7 P3 M" k
h = [0.01 cii + z for z in c]
" X$ e0 B/ l' r' V+ t; q4 L7 a- a
C.append(h) , n* B. c) F) w( O
% @. ~: R) M* d: V; Y8 a
c = h
$ o0 O. V ^) `. a: L& V
/ V8 ?& B, w) x; Ldef r_function(u)
9 g' ?3 l1 K! n" h: u, f& f( B0 h' B# D& o
y1 = 0
+ n! K! C! M9 q3 [3 }' { P' k3 S3 q; K( n9 J5 ^5 {1 a
y2 = 0 6 _( t7 i9 s$ v7 k
+ \5 c& y0 ?2 P3 |( z
y12 = 0
( o* H# o- C6 t' ]
' J2 N0 m3 y( f: q y22 = 0 : q6 m N- O8 ?% y
. {) l5 g2 N9 k! y4 N
r = [] ; s u; n- ]! |
; h, d% h5 k$ J
for x in range(1000) ' T' S' N c8 K# T; |+ D6 W% G0 i
1 i( }# g, c6 {$ A for ul in u - H% O, m/ N, m; Y' R0 u
2 b) U8 a/ n3 C; ^! N& ~: d2 F) O. F y1 += math.cos(C[x][ul]) , ^, u) H+ I6 b( k% J
7 R. K( y3 Z. z# @ y2 += math.sin(C[x][ul])
; I; T g+ z9 M. z' k5 v5 F1 W# @8 T4 F3 {
y12 = y1 2 ) l. i' X6 \" U" Y
7 ^+ n) L+ N3 S9 y0 ~ y22 = y2 2
$ u! |" X# P0 x3 B5 Y/ U0 f8 @- f' d) E2 I0 F$ b$ J6 q
r.append((float(1) N ) ((y12 + y22) 0.5))
1 y6 M+ y4 e/ W2 z% i) @: \, S7 K3 H% a. l# o( t
return r
2 ^5 K% z/ M/ U% ]6 N1 z# ~% E- h" K# Y6 G$ q" F
r1 = r_function([1,2,3,4,5,6]) 6 s* V6 Q3 |+ S ~* r2 E
" d U& Z- h X& h" {# _4 u8 D
r2 = r_function([7,8,9,10,11,12])
' h" m o0 V& U& v i6 T& u4 g5 p( Z1 e
r3 = r_function([13,14,15,16,17,18])
3 W/ V7 t$ L0 P6 r5 z8 P: j% y! g5 a( M3 g- \
r4 = r_function([19,20,21,22,23,24])
* Q! Q" ?" n9 E& b+ [+ R5 w) x' @/ g& s0 S: J. P" x3 n3 K
r5 = r_function([25,26,27,28,29,30]) ; y8 h) d! h) F' U
: f" H: `% \4 K5 C#r6 = r_function([31]) , m& j8 }% p6 n" l2 B3 C9 g/ E5 u
1 F0 h* C+ E# n+ F
0 O- e- b$ ^0 O- C9 V! c8 u: Z2 o+ H8 k
ax = subplot(111) #注意一般都在ax中设置,不再plot中设置
6 M4 l& F1 o, j3 O' E7 m( @6 {# o( u/ w( g) y) O6 ^) p. ?% f
ymajorLocator = MultipleLocator(0.1) #将y轴主刻度标签设置为0.5的倍数
& m" q6 g* H* J' {
F0 X8 A8 n, Y, Kax.yaxis.set_major_locator(ymajorLocator) " B9 \0 J+ ]' m& G1 D V x
2 p( @" h# b; g, j8 G# gplt.plot(t, r1, marker='o', color='green', label='1') : z2 \* k. ]' @1 m' G7 g% i
& N7 W7 u. ]) ~% ?
plt.plot(t, r2, marker='D',color='red', label='2')
" k* V X7 x9 u; w |( O& v/ r
. T6 T% E# ~. Vplt.plot(t, r3, marker='+',color='skyblue', label='3') ( R7 p0 K6 [7 N$ H9 g
. E5 c- {( t6 m+ S5 R% x/ n1 J5 \8 }
plt.plot(t, r4, marker='h', color='blue', label='4')
3 g5 ?* k! e" R. K/ r" R# X9 r/ b7 j7 @6 f o+ ^( s
plt.plot(t, r5, marker='_',color='yellow', label='5') * i) X `. C* ^6 n
: Q u" {. n; Y. M- D
#plt.plot(t, r6, color='red', label='6')
# M4 Z6 i' i+ k3 C( P: C$ t- q+ \% q) [
w+ P5 r/ I; Y( ^ i
8 @! u' M" U3 s: R8 ]: ]/ pplt.legend() # 显示图例 - B/ [# I8 Z3 r4 |& W* v e
; W! o. X3 F( U I
plt.xlabel('iteration times') # g+ ^9 h6 _& A5 r2 h4 A) L7 `
( m/ t0 n. R0 a' F
plt.ylabel('r')
8 Q9 g$ D7 T! R4 j3 j1 K. ^( w6 s
plt.show() ) C4 E4 t; u9 d& Y6 z% S1 ^/ \. s
$ G! x) B" ]0 R) J- e* A+ @
6 G* q9 p0 D* u- k$ P3 t0 E$ B
独立编组结果如图:* T1 [& F6 g3 P2 D
7 {: N/ B/ Q& L8 \+ _3 u% d: V+ Z* a/ U, s3 I N, ^4 _. o1 J
, \8 T8 d1 h# K. y3 T- Y ck1独立编组8 C3 S' p2 D% c
好的,从图像我们来看看Kuramoto模型在描述这个编组的时候,5组最终稳定,我们说这个团队编组还算科学,但我们改变一下K的值,换成分散编组:) T3 l; M; p8 ^5 T' F# ? e
X2 r8 \* q* d6 m8 pk2 = [
; @+ }7 w0 s' o1 {# A# t1 B) d; @
8 d4 l$ P4 O& J. L( 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],
{, o( S3 w- e" R! r& \2 @, H# `' K# z4 e. E S
[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], 5 [9 D! d4 |- F* {! H6 {+ U2 H- k
3 k1 Q( ]; C; Z8 R9 A9 K5 W[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$ e2 Y+ S9 W8 M R0 I
1 u6 Z9 m0 {* k; b, K[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],
) Q _+ `- u' S8 U0 O
# @5 ^7 P) J& C. ?. W: Q4 D, F[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],
) ~$ j' F8 h# g8 a! k4 t2 P% m, [0 M7 w/ u
[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],
% v2 O8 f7 v! H1 n3 f. W! I; m: }; C4 K5 `1 {
[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], ( W" S) j: {' l
- [5 X* B) {/ 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], 5 B U& B, x$ G& B6 v3 i
$ v6 B* s0 Y Y- N3 }# W$ E[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],
* j$ s4 s. r' ]5 Y# \
5 o( A4 W8 O$ ?' z[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], & T8 [: e" ~; V+ p9 v. R4 U! x9 G, H
" A0 J/ c$ N; I( V8 q! l" r[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], + x. ^, j H4 k! ~
$ n+ A5 J; t9 U) b. R' f
[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], 4 [7 T! n$ s/ A7 S% ~( l4 H$ Z- E
5 V c; w, d$ b/ m; L% m
[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],
' b% c9 C8 ~1 G' |* c# S3 @) W6 Q R' w
[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],
1 D$ |$ V' v, J# _
. W9 Z& O/ L$ e' t d) p t[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 m' f5 Y1 l; L% E$ ]8 ]
2 B( P) V7 H. }+ s0 T% z[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],
w, V; b8 ?1 z0 z! |
+ ^; z& ?$ R, j- v3 s; E* j[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 @ }4 d% J' [* f) t& W8 w6 A& u4 W
8 }, ?2 c, W8 a1 n( C! ]3 ~[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],
0 }+ S( F+ r3 ?! G8 [! O1 L3 g& N6 v# I+ Q; D
[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],
0 g% Q! g% Y- }, s6 v$ ?
0 j. c- y0 w" q$ |& s[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], 7 ?4 `$ F4 }3 ~. I- J
) M& ]" d, G- r6 J+ S[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],
) n1 E9 i8 j% h& B) M6 p8 |) I
; @+ I8 k) N' T' K[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],
J% e( J# C" }4 Z3 l' w' f3 e# e7 Y* @
[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],
) }6 M( W0 m& i% V, U; _
P! j) g7 ]9 a6 F* e3 ]! w# s[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],
1 Y% o3 b0 C# D" S7 [, Q' h5 n3 K+ E# R2 Z9 e
[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],
8 X; C* W6 r5 _8 j& P' I0 v, x5 i# J7 H" z" Y
[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]
* w: l* _2 X! X
+ y1 q, c1 o9 L# z2 n, A$ `/ E3 t1 m0 T. j8 ]1 N
# A7 V# |. a- l8 G4 ?; w9 u9 o
k2独立编组
( m) T# G# M- k/ M
/ ~3 J# H$ `8 Q; ~! l2 b9 X* Y5 R. u# v0 Y3 u. p
/ O" i9 O, t( {5 d5 v
这两幅图像都在开始阶段大幅波动,而后在一定范围内趋于稳定,那么到底哪个分组模式最符合实际,最能突出编组能力呢?
9 N6 m/ ?0 {9 \/ Q: q
7 Z! {) a8 M& B# T这里还有一个公式,来解决这个问题,编组同步能力的量化:3 L% R7 H# }% @% }
3 K& D, d, Y) e, ~" x
' }2 u* `5 F w" h+ C& C: }) }
M_{s} 就可以描述某编组的同步效果,r_{s} 是达到稳定状态后序参量的均值,β∈(0,1)是调节因子。我们可以用M_{s} 比较编组内部的好坏。那编组间能力的好坏怎样比较呢?# f& Z% W: p5 D
. f8 d+ K' @& k* q8 P
这个Kuramoto模型同样有所考虑,它有一个描述整个系统编组能力的公式:+ i- c3 `) a) M
0 F( k/ [; A) p5 g9 I b x% _8 X: b) B4 E9 i2 g
其中,P是编组的数量,M_{i} 是第i个编组的同步能力,\omega _{i} 是编组在整个系统中的权重,\psi {e} 是各编组平均 相位的均值,\Delta \psi 是各编组平均相位的标准差。具体的计算不是这篇文章的重点,就不在计算M{s} 和M的值来比较上述例子独立编组和分散编组的好坏了,本篇文章主要是讲下Kuramoto模型的解决思路,尤其是上面解决\theta 值的方法可以套用在其他Kuramoto模型中,做一个目标估计绰绰有余的。 Z2 K+ P9 f9 M2 Y, L2 V4 x! _
" s. T4 s/ |/ R, M! i8 H ]/ M: h下面是解决Kuramoto模型常用的MATLAB编程方法,具体思路与上述基本一致,这里不再赘述,K的值我们给另一种编组模式:不完全分散编组模式,也是现在实际上最长用的编组方式,直接上代码:( m; E+ d# f) ?
' I$ c% p8 R# q+ N3 D9 O
clc; P% U" f$ _; o0 b! Z
9 `8 t% K/ W1 l) H) J/ Kclear all; & E. C# p7 u# w) {9 @& j: X, l" X
" t# x# k3 a% \/ m$ J
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; 8 J# [$ l" f* Y
8 Y) w1 ^, z# ?; a0 H; n 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;
, }9 f7 [: u8 L; z* B B( g
# | C7 K5 T! g, z 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;
; w u: o4 F. ^% J) K
& c" m' g! W V! B 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; ! k6 l0 `! c7 T0 @# g
6 X4 z J7 I0 ^. b% n {7 ~ ?/ 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; : h. y# T- b: b$ @; o& O8 I" G5 Z
; c6 |( o* h5 Y& R7 ~9 }9 d' ]
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;
$ v$ i! o( v) l$ R4 c. a' q
* M: {: ? X4 f9 z t. {8 Z0 H 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; $ h# W7 B% K6 x' }. h
- e" K/ r1 R3 o% n
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;
[. E8 D7 G, K4 e) k) M2 `0 J" [" P+ G9 Q1 p
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 v& B1 X2 y( U% w. d2 J6 w. r% g* k
$ S( `4 U4 A, i4 Q/ b 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 N* Z4 G" \6 x6 B; r- u& s* V$ U' ]/ Y2 e& ^/ @1 [
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; 8 N' }4 n; l& I. J' I% O
( [, @9 y9 ]2 m; G
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;
H% V5 u: y3 L( a E; ~& M7 W1 o: l9 L+ |2 P4 L
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+ {/ W% T: g* N/ P' r7 ~5 a! l0 q- t9 g/ j
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; 5 C' a4 k6 u, h+ [
5 K% \/ @1 m2 O8 I- Q% 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;
+ `1 @3 r9 ~2 p# |7 Z
& E0 m9 F6 n$ b, h; ]% o 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; ; Q3 `+ F3 n6 e, Q% q. A9 p
9 V3 `# J& T5 I, I. ]
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; 0 i9 A! p9 i! B0 L) q7 c+ `* B
* L, ?0 \, e8 P8 ?5 @ 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;
8 ?$ ]: K4 A" | e+ m
& a# a. F9 {0 `5 ?& @" F' b& q 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; : L3 k! _! j$ u' } S" Q
# J7 U8 |# h/ W8 r 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- L3 s; r" c. f7 @6 u" p: ?: S8 `" |4 Z' {5 K
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;
8 J2 |* v) @' c1 s5 F2 d7 N
" Q. k; @$ q9 C0 W3 ~ 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; 1 B# C$ b6 W7 ]9 R* R
* i; D% I' c: s
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; : Q9 R$ p" c+ O$ A. I
! O: V ?. d2 d. a+ c 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;
, `/ c: @" i X5 w5 e4 t; }! z! x6 o2 h4 \, O
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;
" X+ L! h; A9 {+ }" R2 Z; S5 U0 `& b
] % }$ i: q7 C/ z# P5 K
, {+ G( S- A* p5 g0 z# |6 W
N = 25;
( q+ G: I& F" w5 ^/ N" v- c, s3 N8 m3 c; [( C2 u! p& `; x" d
Step= 10000;
8 C- |+ \- O$ r, k* N* {
* ]( x* Q7 \" | S4 U0 x. u. C# uTheta=zeros(Step,N); * Y% J% q$ F, a. b7 n
4 I1 s- w0 C7 u4 C
Omega =zeros(Step,N);
7 h+ A x7 G' O( Y' ? [: b# T# H7 k* r u
DeltaT=0.01 + R! O: ?1 P- u: i6 g
8 ?4 J% _) f2 j) y) Y" F
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 N3 B, J: }; N/ c, A! Q
: X% K; a6 `/ h+ \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]; 3 q% }$ e7 a; \8 Q
2 _0 m, P! O* X* u8 a0 Z# i% 求解微分方程
4 ^% s7 S' a( u+ }- t3 @; H, i/ ~0 Q$ K# j9 ?1 P0 Z
for n = 1:Step
% i4 V$ ^ d) L$ v, o" D/ j2 O# Z9 V1 ]# A
for i = 1:N
( m3 x8 f* M) e0 v1 G, I
& c8 H6 E' M1 M* e& _- Q) b0 W, t Sigma = 0; ) O2 V+ [ p; \
, p N; X( ]6 n- A7 w
for j = 1:N # N" C2 x$ ^% d3 C5 {7 ^& r7 ~
3 h4 w& [1 v0 g4 ?. g
%%判断k对同步效果的影响 ! g: l# t3 Q* P9 q5 I
4 U/ V" _1 X: h5 ]5 Q3 a= Sigma + k(i,j) * sin( Theta(n,i) - Theta(n,j) ); - i4 q) G; ~1 s& O1 {3 l0 D5 k
0 j. I& B# p; J& g6 ^ end
9 e' o! r0 f4 G1 m' J$ a
; R5 F6 j+ R" | Omega(n+1,i) = Omega(n,i) - Sigma;
, u* M4 }5 Z4 j3 b3 s) `& j4 |/ t, m0 G
Theta(n+1,i) = Omega(n+1,i)*DeltaT + Theta(n,i); 9 P/ e9 i! k4 f& N- F
# t: m% T3 l5 k" h/ H3 W8 @. K/ e ] end
/ t8 ^# `; A. t0 v$ I1 }
+ _- J7 p! Q5 x! A) b2 L) ^end # |( u8 o6 y6 J# s( {
. O L! _: T2 L7 A# q( E0 \; _% 求解序参量r(t)
! E7 x# Z) J: [6 v) y
, l) x4 c0 D- i- jgroupN = 5; 1 x) l1 z- e( e% |
) a, ~- c$ W+ t$ dStep = 1000; 7 u+ p) ? Y5 v3 g) M' r4 r; f
6 N( ]6 b& {* s, ] ?2 r6 ?for i = 1:Step 2 B/ x9 V: Y% m. V2 ]- C
: C* ?# t' g4 m
sigma1 = 0;
" Y$ o" G$ d5 U1 Y; ~: A! v! n% ? H. w& M+ n
sigma2 = 0; & @; {" i1 b/ g w6 x1 | q$ ~8 n+ ?
5 S& Q) N) x7 Q/ B$ D sumTheta = 0; , ` W' e- a6 a2 \: r l: X/ t
/ q* K1 G% |8 }0 s0 c& W
for j =6:10 %表示相应的群组 $ _2 ?% f# v& l" B8 W
6 z, Q" n$ ^: U; ^- _# b9 @1 k* [ sigma1=sigma1+cos(Theta(i,j)); 3 O9 |2 y% ?, z" Q* ^$ ^, ]4 P
! u8 T" X9 K+ L, q* w sigma2=sigma2+sin(Theta(i,j));
4 R7 I: x! J- o
u8 L' `+ T3 [ V; h; }; K end
3 d5 b) m% X, H# }, q' ~4 t. U4 x+ R4 x& e- R/ ` @
r(i)= sqrt( sigma1^2+sigma2^2 )/groupN; , ~8 P: o% r- j0 W
- s8 \$ e0 W# t" d9 w% P! hend
( S0 Z5 j) Q: d
% Q7 x* [$ b8 Q4 k; Ix= 0.01:DeltaT:DeltaT*Step; + s5 W5 m! R1 }) U: w. b( G) V+ ^
5 L, s* E3 `7 d- y. T4 Q# {# K
plot(x,r);
7 G3 m+ Q( {3 L/ I4 N Z- Y# NMATLAB版不完全分散编组结果如下图:
?) h5 S, F+ C9 U
* c- o! Z9 O% A# U1 y7 d) T |