2018年数学建模校赛

最近每个周末都有好多作业,上周趁有空就参加了数学建模校赛,就用今年“深圳杯”数学建模挑战赛作题目。连续打了两天,最后已经没有时间做结果分析了,写的论文也不算理想,不过我觉得模型做得还不错,所以想记录一下。

我们选了B题——无线回传拓扑规划,其实就是一道图论题,重点是设计算法。题目输入为1000个节点的位置,用经纬度表示,输出为各节点的布置、连接关系以及总体成本。题目限制各节点只能为宿主站或者子站,所以可以用01来区分。计算节点间距要使用球面距离公式,距离不超过50的两个宿主站可以连接,距离不超过20的宿主站和子站可以连接,距离不超过10的两个子站可以连接。每个子站最多只能连接2个节点,任意子站只能归属一个宿主站,任意子站到达所属宿主站有且仅有一条通路,且跳数不能超过3。宿主站有两种站型,分别有一个扇区和两个扇区,节点站型已经在输入中确定。每个扇区第一级最大接入子站数为4,最大总接入子站数为6。任意宿主站都有且只有一颗卫星负责回传,成片连接的宿主站可以共享一颗卫星,但一颗卫星最多负责8个宿主站。题目给出了各站点的成本,子站5,宿主站10,卫星50,总体成本越小越好,各节点的布置要满足所有限制条件,而连接关系要求子站回传距离的对数和越小越好。

我们决定采用模拟退火算法,用1000位表示各节点设置为宿主站还是子站,然后在每一次迭代中求当前设置方案的最低总体成本和最佳连接关系,最后就能得出一个比较好的结果了。我们的设计不太符合模拟退火的思想,因为迭代的方案有可能无法产生满足条件的连接关系,不过我们最后已经很接近解决这个问题了。

在我们的算法中,首先要确定初始方案,我们可以将所有节点设置为宿主站,这是一个满足条件的解。然后是随机产生新解,在这个部分我们并没有一个很好的算法,但思路上肯定前期要将尽可能多的宿主站改成子站,后期要以调整宿主站的位置为主,还要允许子站有可能被改成宿主站。接着就是计算最低总体成本。这一部分我们想到了正解,由于宿主站和子站已经确定,我们只需要确定最小卫星数就行了。将所有能连接的宿主站都连接,形成连通块,那么每个连通块需要的最小卫星数为连通块中宿主站数除以8再向上取整,所以我们可以用并查集算法确定各连通块的大小并得出结果。

最重要的一个部分也是我们花了太多时间的一个部分就是如何判断一个设置方案可以建立满足条件的连接关系并求出最佳连接关系。我们的思路是构建一个模型并应用最大流算法。首先建立超源和超汇,分别连接所有宿主站和子站,超源到宿主站的容量均为6,子站到超汇的容量均为1,然后将所有可以连接的两个子站连接,将所有可以连接的宿主站和子站连接,那么当最大流等于子站数时,就能保证所有子站都归属一个宿主站,且宿主站最大总接入子站数为6(两个扇区对应最大总接入子站数为12)。然后接下来的难点在于最大跳数为3,第一级最大接入子站数为4(两个扇区对应第一级最大接入子站数为8)以及保证所有子站都只归属一个宿主站。我们直到最后都没有处理好这些问题,只是简单地把超源到宿主站的容量改成4,然后把宿主站到子站的容量设置为3,子站之间的容量设置为1,这样求得的结果是有问题的,并不能保证满足限制。如果能够求得合理的模型,那么求解最佳连接关系就可以在每个连接上设置费用并应用最小费用最大流算法,至此整个算法就完整了。

这次数模非常遗憾构建不出一个完美的模型,我们在很多方面都还有待锻炼。下次一定不要选那么刚的题目,希望可以认认真真做数据分析写论文。

猜你喜欢

转载自blog.csdn.net/fast_g/article/details/80420833