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