我们的成员分工:
1、负责调试代码、纠错和上传代码
2、负责查找算法思路3、负责查找算法并且写代码框架
步骤:
1、通过各个同学的专长进行分工,如上所示,确定一有思路就开小组会议讨论。
2、3号同学在网上查找到一个最基本的直连程序,该程序有错误,需要修改。
3、1号同学同过3号同学给的直连代码进行调试和改错,与此同时,由于要使用官方给定的环境运行,所以在调代码的同时熟悉开发环境(Linux系统)。
4、1号同学实现了直连代码的功能,并且上传到官网,等待结果。其他同学继续寻找算法。(此阶段非常重要,如果有结果,则我们后面的步骤才有可行性)。
5、直连代码有结果之后,初始想法是从消费节点向上依次选择网络节点作为消费节点,一跳、两跳、三跳。(先确定服务器节点,在寻找路径,盲目探索中)。
6、在实现上一步想法的同时,我们找到了关于寻找最短路径的算法(在知道服务器节点的前提下)。并且进行调试,查错,检测其可行性。
7、由于第5步的可行性不高,而且跳数越高,代码复杂度越大,所以放弃了这种方法,选择了遍历的方法(服务器从1个增加到消费节点数那么多个,依次遍历,选取所有方案)。
8、遍历的想法很简单可行,但是实际写代码时,遇到了数值太大的情况,而且很快就由无穷中方案,从而该方法没有可行性。
8、为了验证最小费用最大流代码的可行性,我们采取了选择特定数量的服务器,并且随机选择方案。方法在一定数量的范围内可以找到某些最优解。
10、但是随机解在后面案例改变之后无法固定的找到可行性方案,随机性很大,有时可行,;有是不可行。我们想到遗传算法和多支路算法。
11、我们先是准备用多支路算法来实现,多支路的意思是先对个节点的支路进行从大到小排序,然后在选取多支路的几点从1到多进行放置服务器,这样的概率比较大。
12、但是这种算法也具有一定的不科学性,考虑到最终优化问题,选择了遗传算法,但是由于遗传算法难度大,而且最后的时间紧张,我们没能完成遗传算法的选址,还是用的随机选择方案。
最终结果:可以定义为失败,排名太靠后,没有进入复赛。
失败原因:由于三个人之前没有合作过,导致分工不够明确,耽误了很多的时间;努力还不够,没有做到全力以赴,没有那种拼死一搏的决心;交流不够,由于大家的时间比较零散,导致很多想法不能及时的讨论;没有坚持到最后,越到后面,进复赛的希望越小,从而有一种坐等结束的心态。