2011 MCM-B 中继站分布问题 粒子群算法实现

这次是2022美赛前的一次模拟赛,指导老师给定了2011MCM-B这道题,此题是如何分布中继站最优问题,题目先是给出了一种中继站分配带宽的系统(CTCSS),可以将带宽分为很多个 private line(PL),通过这个可以估计出在平均人口密度下,每个中继站的覆盖半径,然后求在 4040 英里范围中,有 100010001000010000 个用户时,如何设置中继站的位置,使得用最少的中继站将所有用户覆盖。最后讨论下在山区环境下中继站分布要注意的因素。

之前学习的粒子群算法一般用于寻找高维空间下的最值问题,每个粒子运动速度每次都带有随机性,但我们可以利用它的思路,将每一个粒子视为一个中继站,然后先均匀随机生成中继站的位置,每个粒子都向还没有被信号覆盖的用户的方向前进,距离近的移动幅度较大,距离远的移动幅度较小,因此可以定义出每个粒子的速度,再经过迭代就可以获得非常好的解。

题目

PROBLEM B: Repeater Coordination

  • The VHF radio spectrum involves line-of-sight transmission and reception. This limitation can be overcome by “repeaters,” which pick up weak signals, amplify them, and retransmit them on a different frequency. Thus, using a repeater, low-power users (such as mobile stations) can communicate with one another in situations where direct user-to-user contact would not be possible. However, repeaters can interfere with one another unless they are far enough apart or transmit on sufficiently separated frequencies.
  • In addition to geographical separation, the “continuous tone-coded squelch system” (CTCSS), sometimes nicknamed “private line” (PL), technology can be used to mitigate interference problems. This system associates to each repeater a separate subaudible tone that is transmitted by all users who wish to communicate through that repeater. The repeater responds only to received signals with its specific PL tone. With this system, two nearby repeaters can share the same frequency pair (for receive and transmit); so more repeaters (and hence more users) can be accommodated in a particular area.
  • For a circular flat area of radius 40 miles radius, determine the minimum number of repeaters necessary to accommodate 1,000 simultaneous users. Assume that the spectrum available is 145 to 148 MHz, the transmitter frequency in a repeater is either 600 kHz above or 600 kHz below the receiver frequency, and there are 54 different PL tones available.
  • How does your solution change if there are 10,000 users?
  • Discuss the case where there might be defects in line-of-sight propagation caused by mountainous areas.

以下的讨论都是没有障碍物的情况

中继站半径计算

  • RR:整个用户分布半径,此题取 4040
  • rr:每个中继站的覆盖半径。
  • NN:用户总量。

用户密度公式:

ρ=NπR2\rho = \frac{N}{\pi R^2}

容量公式(是从另一个论文上来的)

332r2ρ119\frac{3\sqrt{3}}{2}r^2\rho\leqslant 119

经过计算可以得出如下关系:

人口数目 1000 2000 4000 6000 8000 10000 15000
中继器半径 15.1734 10.7292 7.5867 6.1945 5.3646 4.7982 3.9178

有了半径就可以考虑覆盖算法了。

模型

蜂巢模型

这是一种非常简单的模型,可以证明用很多个相同半径的小圆覆盖大圆,完全覆盖的最优方法就是将每个小圆的圆心视为六边形的中心,六边形边长和小圆半径相同,然后将大圆放置到六边形构成的图形中,最后将六边形再换成小圆就行了。

12个小圆

12个六边形

下面这个MATLAB代码可以打出 1~13 个六边形能覆盖的最大圆。

下面这个代码能够打印以一个六边形为中心,画出对应的圈数下的图像

通过上图可以看出,要用半径为 15.173415.1734 的小圆完全覆盖 4040 半径的大圆,最少要用 1212 个。

但是现实情况下,并不一定要求全覆盖,而且因用户分布的不同,中继站的密度也会不同,所以直接用蜂巢模型并不能达到最优解。

粒子群模型

粒子群思路很简单:将每个中继站视为一个粒子,每个用户视为一个点,每次迭代时,粒子会有一个新的速度方向,每次会向这个方向移动一次。

核心:粒子只向还没有被覆盖的点方向移动,距离粒子越近的点对粒子吸引力越强,反之则越弱。(此处满足反比关系,所以公式中是利用反比例函数完成的)

  • MM:中继器的总数。
  • vi(k)v_i(k):第 kk 次迭代时的第 ii 个中继器的运动速度。
  • xi(k)x_i(k):第 kk 次迭代后的第 ii 个中继器的位置。
  • xjx_j:第 jj 个发送信号的人的位置。

P.S. xi(k)x_i(k)xjx_j 的下标都是从 11 开始的,即 i[1,M]i\in[1,M]j[1,N]j\in[1,N]

速度变化公式:

vi(k)=wvi(k1)+jJajxi(k1)xjxi(k1)xjv_i(k) = w\cdot v_i(k-1)+\sum_{j\in J}a_j\frac{x_i(k-1)-x_j}{|x_i(k-1)-x_j|}

其中:JJ 为当前第 k1k-1 次迭代时,所有未被中继站覆盖到的人的位置,即

J={j[1,N]:xjxi(k1)>r,i[1,M]}J=\{j\in[1,N]:|x_j-x_i(k-1)|>r, \forall i\in[1,M]\}

ww 称为惯性权重,aja_j 称为加速度常数,分别取值为(此处利用了反比例关系,要先减掉一个常数,使得变化较大一些)

w=0.6aj=1xi(k1)xjr/2w=0.6,a_j=\frac{1}{|x_i(k-1)-x_j|-r/2}

位置变化公式:

xi(k)=xi(k1)+vi(k)x_i(k) = x_i(k-1)+v_i(k)

最后为了有不同的效果还制作了两种用户生成分布的方法,一种是均匀分布,另一种是集群分布(模拟城市和乡村人口)

还加入了颜色区别,两个相交的小圆所用的颜色不能相同(避免信号冲突)

最后发现,PSO算出的结果要好很多,最下面两排为完全覆盖所需的中继站个数关系如下表

人口数目 1000 2000 4000 6000 8000 10000 15000
城市数目 4 6 7 7 7 8 8
中继站半径 15.1734 10.7292 7.5867 6.1945 5.3646 4.7982 3.9178
均匀分布 9 20 39 61 81 100 153
集群分布 8 18 35 55 74 91 140

效果图:

1000 均匀分布

1000 集中分布

10000 均匀分布

10000 集中分布

PSO算法部分均由C++实现:

绘图部分由MATLAB实现,只需将 sender.txtrepeater* 这些文件拷贝到MATLAB目录下即可,可以选择打印对应的圈的个数和迭代次数,只需选取对应的文件即可。

最麻烦的就是粒子群算法中速度定义,这个参数真滴难调,没调出来时候都不晓得能不能用(有点自闭了🤢),反复尝试调出来后,才发现可以的😆,而且效果不错。

最后还是要感谢队友的支持和共同努力,完成了整篇论文的写作部分😉

总结

这里总结一下这次学到的有意思的东西

两个网址:

  1. AI放大图片:效果非常好,可以在放上论文前先放大一遍。

  2. 好用的颜色搭配网站:在选取不同的小圈颜色时使用的(我根本不会搭配颜色,这个网站真的好用)


2011 MCM-B 中继站分布问题 粒子群算法实现
https://wty-yy.github.io/posts/29177/
作者
wty
发布于
2022年2月11日
许可协议