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