《复杂网络建模》课程project

A.前言

昨天晚上顺利考完张海军老师《复杂网络建模》的final exam,这门课算是彻底结束了。于是想把跟这门课有关的东西整理一下(但其实从时间线的角度来说,这部分这部分内容不该属于这里)。

B. project内容

在这里插入图片描述
总结来说就是:三人一组,自己搞数据构建一个网络,然后去分析这个网络的一些特征。
老师之前提到过,网络的节点越多,得分也会相应更高。我所做的是深圳的公交网络,小组三人分工,一人做UI、绘图,一人收集和处理数据并写报告什么的,我负责写核心代码。

C.实验过程

a.数据来源

深圳公交线路的数据在网上直接能找到,最后拿到了944条公交线路的数据。每条线路存成一个文件,文件内容如下:
车站名之间用权值分割,终点站后的权值为0
车站名之间用权值分割,终点站后的权值为0
理想的权值是两站之间的时间,但由于拿不到这个数据,这里的权值是随机生成的。

b.数据结构

点(node)

typedef struct node {
    int id;
    int *line;
    int edge_num;  //  degree.    
} node;

边(edge)

typedef struct edge {
    node *node_id;
    int weight;    
    struct edge *next;
} edge;

网络(network)

struct {
    int sum;    
    char **name;    
    edge **e;    
    node **subway_station;
} bus_net;

有了这些接下来的就好说了。

c. 特点

1、我们的节点数是班上所有小组里最多的:5800+。我记得第二名有3000+,大家普遍在1000以内。当然节点多不代表一定好,节点少也不代表一定差。
2、由于节点太多,会导致运算时间爆炸长(一个用python跑300+节点的同学说要40分钟,一个用matlib跑800+节点的同学也说要40分钟)。于是我选择使用C语言写核心代码来提高效率(其实是自己的研究方向经常写C,所以C最熟练 ^ _ ^)。
3、大家普遍采用邻接矩阵保存图,似乎只有我采用了邻接链表。第一个原因同上,使用邻接链表可以很快速地定位到节点的边;第二个原因是公交线路节点的度大多数都为2,所以采用邻接矩阵太浪费空间,效率太低。
4、负责做UI和绘图的同学用的python,所以为了配合他,我将C代码编译成了动态链接库;并写好了python接口。

d.测试

测试的具体结果就不贴了,平台是WSL-Ubuntu 18.04。只攻击一次的话,运行时间大概5分钟,时间上的优势可以说非常大了。
放几张队友根据结果画的图:
网络结构,红色点代表度大于等于5,蓝色为2-4,黄色为1
网络结构,红色点代表度大于等于5,蓝色为2-4,黄色为1

网络的度分布图
网络的度分布图
刻意攻击80%的节点后网络的结构
刻意攻击80%的节点后网络的结构

值得一提的是,这些结果都是在Windows下跑出来的,据我测试这跟真实值是有一定出入的。具体结果应该以在Linux下跑出的结果为准。

C. 结束与反思

1、最后这个project是要做一个presentation来介绍的,然后同学之间打分占60%,老师打分占40%。这就决定了UI的重要性,因为根据我的经验,同学打分受UI的影响极大。而我们的UI就是一个窗口加几个button,我在台上讲的时候真是尴尬死了,其他组的那些大佬们UI一个比一个酷炫。
2、报告也没写好,队友在临交之前才写;PPT也是,马上要上台了我还在做PPT。
3、以上主要原因:动手太晚,应该在国庆假期就开始做;我分工没做好,一门心思钻进代码里,也没督促队友进度;想carry全场却没那个实力,中间大大小小出了无数次bug,浪费了很长时间。

扫描二维码关注公众号,回复: 9285658 查看本文章

总的来说,分工+实力都不够好,班上很多大佬都做得很好,自己还需修行。

D.一个印象深刻的BUG

在创建网络的produce_net_from_files()函数中,因为要打开900+个线路文件读取信息,所以在循环里用了一个fopen函数。这么个小细节导致了意想不到的bug,我找了很久也没找到问题所在,浪费了很长时间。最终我的同门帮我找到问题所在:没有fclose。这里出bug的具体原理留待以后分析。

E.完整代码和数据

只包含我写的C代码和python代码(均可运行)。
代码 Github 链接

发布了10 篇原创文章 · 获赞 0 · 访问量 454

猜你喜欢

转载自blog.csdn.net/dc199706/article/details/102805903