总结——复杂网络动力学

来源:互联网 发布:差额计算法步骤 编辑:程序博客网 时间:2024/06/06 01:45

“用复杂网络的动力学理论来分析软件系统方法调用网络的动态演化过程

1、动力学是什么,在复杂网络中是如何体现的?

       看了这么久的复杂网络动力学,却突然发现头脑里面竟然没有一个清晰的概念,只知道埋头看书、读文献,不断地灌输新的知识,却忽视了最重要的是自己的思考能力。

       把近来看过的相关方面的书籍都拿出来比照,没有一本书上给出了明确的定义,都是直接就开始对五花八门的网络系统进行“动力学”分析,诸如互联网上网络流量的分配,疾病和谣言的传播,结点或边故障的传播,网络上的随机游走和搜索,网络中的同步问题,网络中的拥塞控制,社会网络的集体涌现,生物网络、神经网络的动力学……

       我这里先给自己一个明确的定义,回到最本质的地方,然后才能进行接下来的工作。

       复杂网络是对我们要研究的复杂系统,用结点和边将他们抽象成一张关系网络图,而动力学就是在“外部刺激”的推动下,或者是“内部消息”的触发下,网络中结点自身信息状态发生改变(消息的传播),或者结点间连接关系(反映在网络拓扑结构图:增长或退化)的变化,从而导致整个网络发生明显或者不明显的“质变”,这种改变可以是在某种规则约束下执行的,也可能是随机的。

2、软件网络的特点

       看了武汉大学做“软件工程与复杂网络交叉研究”的老师们编的一本书《软件网络》,很系统地进行了分析与总结,但是还是基于静态的网络结构。(软件网络的度分布服从幂律分布,而且直径都小于10,这些都是很基本的东西了;除此之外就是不同软件集聚系数、出入度、直径等相关参数,得到的散列点图分析起来觉得没有很大的意义。)

       这本书帮助我对软件系统的网络化有了一个整体的系统的认识,但是跟我们的研究方向是分岔的,他们侧重的是整个软件系统的演化,范围比较笼统,而我们还是应该从系统的动力学来入手,深入研究。

       但是,静态方面现在还是要关注一下软件网络的集聚性耦合性,具有高集聚低耦合的软件系统是比较好的(这个还是不太能理解为什么),这些软件的静态特征在understand里面的metrics里面,有完整的CK度量套件,可以得到分析。

3、根据动力学得到的整体思路——从随机过程到确定性过程

      随机过程是由概率演算处理的,描述各阶段的统计特性及他们的统计关联,忽略个体的特性。而确定性过程是由微分方程描述的动力学规则支配,是细粒描述,描述一个组分阶段的特征及其相继阶段之间的关系。

       动力学里面的态空间动力学规则是重点要研究的部分。

       复杂系统在外部或内部作用下,总会执行出不同的复杂路径,而态空间就包含了所有这些路径。为系统定义合适的态空间,用一组组态表示,这其中用到到一些概率论(随机变量)和随机过程的方法,在态空间与概率分布函数之间形成一种映射关系,反映出系统的统计特性(《复杂系统理论基础》第九章35)。这一部分是初期的“粗粒度”工作。

       动力学规则约束了复杂系统路径的执行,统计特性毕竟是粗粒度的描述,而更重要的信息还隐藏在确定性的执行过程中,比如说用户的操作(反映在方法的依次调用)会有周期性,而且根据当前的操作也可以推测出下一步的执行。这些规律就是动力学的规则,我们的目的就是找到一种概率推演来模拟这一套规则。这一部分就是方法的核心了。

 

4、更为具体的方法——方法调用网具体怎么分析?

       每个t时刻对应一张子图,研究对象是单个的子图,动态性体现在子图之间的变迁。

       对网络中每个结点(方法)赋以状态值:

         0——unused

        -1——called by

         1——call

         2——both call and called by

       根据网络前T时刻的状态,以及其邻居结点的状态推演当前的状态,转移概率的定义是最关键的部分,要最能反映方法网络的动态变化。

       这个概率的推演需要从结点的状态值出发,定义整个拓扑图的统计特性;对每个结点的状态出现频率和状态变化频率进行统计分析,得到一些规律;方法执行的路径在态空间上的分布。

       这些还是很简单的框架,没有很清晰具体的步骤,但是目前最难的部分还是在组态的定义和概率演算上面。根据已有的研究成果以及我们自己分析得到的结果,可以确定出“由动力学支配的与运动有关的系统信息”(所有的有用信息),准确地描述出动态变化的过程。概率的演算中包含了很多的内容,可以从很多方面来分析,我还没有仔细研究它们之间的联系和区别,也只是将那些觉得可能有用的东西记了下来。

5、基于静态特征的分析

       静态指标随时间推进的变化,也算是方法网络动态变化的一个部分,因为静态特征相当于是物理上系统的“固有特征”,分析它们的变化过程,如果能从中找出一些规律来反映整个网络的宏观特性,对后面的工作也会有很大帮助。

还有,我觉得非常重要的一点,定义描述层次性模块性的指标,这和集聚性耦合性一样,能反映系统的性能的好坏。

 

        初步思路就是这些,先学习一下前面说的方法,再找找动力学相关的论文,看看别人是怎么研究的。最后要描述出一个模型,先能够证明方法网络的动态变化符合这个模型,最后再考虑对软件设计的指导意义。

        数据处理部分,问了同学,.dot文件处理不了还是windows的问题,回去装一下linux系统来做。这最后几天的工作,一方面具体在概率论和动力学上深入学习,另一方面 sourceforge可以用了,学习在tomcat上部署web程序,然后先把方法动态调用的监控记录得到。