移动通讯基站建设问题 结课
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学建模结课作业
论文题目:移动通讯基站建设问题
班级:材科112班姓名:贺文杰学号:201101524215 班级:材科112班姓名:胡小磨学号:201101524207
2013年 5月25日 移动通讯基站最优选址模型
背景:移动基站的选址工作是基站前期建设至关重要的环节,它不仅关系到通信网络覆盖优化,还
直接影响到工程投资效果、建设进度、后期维护、施工难度等方面。
基站选址中,通常情况下讲 “就高不就低”,是说尽量将基站选在地势较高的场地,以减少铁塔设计高度,达到节约工程投资的目的。
具体操作中应结合实际情况,不要走向极端 随着城市乡村经济建设的步伐加快,生活生产规划用地愈加紧缺,基站的可选择区域越来越小。
人们在工程建设中往往把一些原生的、根子上的不足推到工程设计上,设计人员也是无法解决的,采取避开建设不利地段是最根本的选择。
因此,在决策选址用地问题上,必须把基站通信安全放在首位。
在我国移动通信建设正处在新的一轮发展竞争的阶段,“村通工程”、“补点工程”、“季度工程” 时间紧,任务重。
这就要求工程管理、地质勘探、网络设计及土建设计人员,各执其责,密切配合。
综合分析基站建设各种因素,选择安全可靠,经济合理移动站址,为当地社会提供优质安全的通信网络。
摘 要
本文综合利用多种模型,在资金和备选地址确定的情况下,对手机中继站的选址问题进行了求解和优化。
我们首先对题中所给的数据进行了整理和分析,引入了回溯模型、0-1规划模型,为以下问题的解决作了准备。
对于问题一,我们运用两种方法,并用不同的软件求解:
方法一:我们引入0-1变量,建立目标函数:覆盖人口最大数=所有被覆盖的社区人
口之和,即max ∑==15
1j j j b p M ,根据题目要求建立约束条件,并用数学软件LINGO
很容易解得题目最优解;
方法二:联系问题的性质,我们引入了回溯模型,采用迭代加深搜索的思想,可以
在满足题目所给条件下搜索到一条到达解空间的路径。
然后,根据所有的路径对应的中继站的建设情况求解出相应的中继站覆盖的人口,然后经过比较即可求得最终结果,我们运用软件MATLAB 进行编程求解。
对于问题二,我们同样运用以上两种方法,只是针对题目要求略微改变目标函数,并用不同的软件求得相同解,最优方案不变,和问题一相同。
法,我们会发现总共有72种情况,但因为数据比较少,运用LINGO 软件求解,程序简
单;对于第二种方法,我们采用回溯算法,需要遍历的分支相对减少,但是程序相对较复杂,比较适合数据较多的模型。
本文还对“仅有一个中继站信号覆盖的小区通讯资费按正常资费的10%~90%区间内的收取”做了讨论,得出了最优方案随百分比的改变的变化曲线图。
关键字:0-1规划 回溯算法 中继站 LINGO 软件 MATLAB 软件
一. 问题重述
某手机运营商准备在一个目前尚未覆盖的区域开展业务,计划投资5000万元来建设中继站。
该区域由15个社区组成,有7个位置可以建设中继站,每个中继站只能覆盖有限个社区。
图1是该区域的示意图,每个社区简化为一个多边形,每个可以建设中继站的位置已用黑点标出。
由于地理位置等各种条件的不同,每个位置建设中继站的费用也不同,且覆盖范围也不同。
表1中列出了每个位置建设中继站的费用以及能够覆盖的社区,表2列出了每个社区的人口数。
表1 每个位置建设中继站的费用及所能覆盖的社区
百分比
覆盖总人数(千)
百分比
总费用(百万)
表2 每个社区的人口数量
问题一:在不超过5000万建设费用的情况下,在何处建设中继站,能够覆盖尽可能多的人口;
问题二:考虑到中继站出现故障维修的时候可能会出现所覆盖的社区信号中断等问题,为此对通讯资费进行了调整,规定,仅有一个中继站信号覆盖的小区通讯资费按正常资费的70%收取,有两个或两个以上中继站信号覆盖的小区的通讯资费按正常收取,针对于5000万元的预算,应该如何建设中继站,才能够使得资费的收入达到最大
二.问题分析
众所周知手机是通过在地面上建立了大量的无线中继站来传递信号,达到通话目的。
若某手机运营商准备在一个目前尚未覆盖的区域开展业务,则需要考虑中继站的覆盖能力,即某中继站覆盖的那些社区以及社区的人数等问题,在此基础上建立中继站网络,最大程度上服务于小区的居民。
根据题目条件,为了更好地分析问题,我们将基站对于
表3
考虑到有的小区仅仅只有一个中继站覆盖,因此要想实现所有社区的全面覆盖,有些中继站是不能缺少的。
例如,1 号、3 号、6 号、11 号、13 号、14 号社区均只可能有一个中继站覆盖,那么为这些社区服务的中继站是必不可少的。
因此,中继站1 号、2 号、4 号、6号、7 号必须要设。
建设这些中继站的费用9+6.5+14.5+13+10.5=53.5>50;此时,仅仅必须建设的中继站的费用已经不能满足要求。
因此,要想在实现不超过5000万建设费用的情况下实现对所有社区的覆盖是不可能的。
针对问题一,我们采用了两种方法:
建立0-1 规划模型,通过对题目条件和问题的挖掘,列写出规划模型中的目标函数和约束条件。
运用数学软件lingo求解,最终也得到了合理的中继站建设方案。
我们已经知道了中继站的建立不可能完全覆盖所有的社区,只可能竟可能的建设其
中的几个中继站,如果采用枚举法,我们会发现总共有72种情况。
发现数据有点大,
即使采用MATLAB进行编程来遍历满二叉树,所需的时间过长,也可能发生误差,再加上在总资金上的约束。
这样就会显得又写程序的运行显得多余,因此在此约束条件上我们可以采用分支定界法来删除部分的枝叶,再加上一些其他的约束,比如人数上的约束,又可以删除一些枝叶这样大大的增加了速度。
具体的思想还要套用回溯法的思想,这样得到了中继站的建立规划,我们就可以根据相应的已知数据进行求解相关的信息,比如花费的资金,所覆盖的社区与人数。
针对问题二,在满足中继站建设成本不超过5000 万元的情况下,确定一个合理的中继站建设方案,使得运营商的资费收入最高。
我们也采用了两种方法:
问题关键在于确定每一个社区用那几个社区覆盖,然后计算根据题目中的“仅有一个中继站信号覆盖的小区通讯资费按正常资费的70%收取,有两个或两个以上中继站信号覆盖的小区的通讯资费按正常收取”的原则,可以列写出关于资费收入的函数表达式。
运用数学软件lingo最终把满足条件的中继站建设方案对应的资费收入进行比较,最终确定出最理想的中继站建设方案。
只要在问题一第二种方法程序的运行结果中得到社区的覆盖信息进行判断在求出总的资金。
既利用相应的有效人数与总费用的投入进行判断标准。
三.模型假设及符号说明
3.1模型假设
(1)若某社区处在某一中继站覆盖范围内,则该社区中的人口全部被该中继站覆盖;(2)各社区的手机使用率相同;
(3)每位手机使用者的通讯资费相同;
(4)该区域只存在这一种通信网络;
(5)每个中继站覆盖且仅覆盖表1上所列出的覆盖区域;
(6)通讯信号不受地形地貌,气候变化等因素影响;
(7)社区人口保持不变;
(8)不考虑手机漫游等情况;
(9)每个中继站位置最多只建一个中继站。
四. 模型建立及求解
4.1 问题一
0—1 整型规划 4.1.1模型建立
设i k (7,2,1 =i 表示7个中继站)表述每一个中继站的建设情况。
引入0-1变量,即
⎩
⎨⎧=个中继站不建设表示第个中继站要建设表示第i i k i ,0,1 k 在此模型的建立过程中,由于同一个社区可能有多个中继站覆盖,如果覆盖同一社区的中继站都要建设时,那么中继站覆盖的人口就会被重复计算。
故我们将目标转移到社区上,每个社区的被覆盖情况只有两种,要么被覆盖要么不被覆盖,我们也引入0-1变量,即
⎩
⎨⎧=个社区不被覆盖表示第个社区被覆盖表示第j j b j ,0,1 这样就可避免了对同一社区人口的重复计算。
本问题的目标是使得中继站覆盖的人口尽量多。
根据表1,2,3我们可以得到目标函数:∑==15
1j j j b p M
题目要求建设中继站的费用不超过5000 万元,故约束条件:507
1
≤∑=i i i k c
4.1.2 模型求解:
可知模型为:max ∑==15
1j j j b p M
⎪⎪⎪⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎧===+========++======+===+===++===+======+===+======+====≤∑=0
;00;100;100;
100;100;
100;100;100;100;
100;100;100;100;100;
10;5015157614131413712127651111610106
39
9548854377636645542443133222211117
1b b k k b b b b k b b k k k b b k b
b k k b b k k b b k k k b b k k b b k b b k k b b k k b b k b b k k b b k k
k c i i i i 否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当;否则时,当或
回溯算法 4.1.3模型建立
回溯模型可以系统的搜索一个问题的所有解或任一解,按深度优先策略,从根节点如图所示就是I 层出发搜索该模型可以搜索至解空间树的任一点时,先判断该首先我们节点是否包含问题的解。
如果肯定不包含,则跳过对以该节点为根的字数的搜索,逐层向其回溯。
否则进入该子树,继续按深度优先策略搜索。
回溯法求问题的所有解时,要回溯到根,且根节点的所有子树都已被搜索便才结束。
回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。
回溯算法的基本思 想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。
在回溯模型中,我们采用了迭代加深搜索的思想。
可以在满足题目所给条件下搜索到一条到达解空间的路径。
然后,根据所有的路径对应的中继站的建设情况求解出相应的中继站覆盖的人口,然后经过比较即可求得最终结果。
如图
1)当在I层的时候往左端行驶检验I层点是否满足条件若满足则同样对II层进行同样的检验,若不满足则退回回I层往右端行驶,进入第II层,接着就这样逐步的搜索下去,知道最后的一层。
在这其中满足的条件是在搜索过程中,需要考虑终止搜索的条件:中继站的建设费用不能超过5000万。
一旦在搜索路径上,发现中继站的建设费用超过5000万,就立即停止对这一搜索路径的进一步搜索。
2)满足了这些条件后得到的数据再进行判断是否满足人数上的约束,若满足则这个就是符合条件的。
4.1.4 模型求解:
1)数据准备:
定义数组存储每个社区的人数:p=[2,4,13,6,9,4,8,12,10,11,6,14,9,3,6];
建设7个中继站所需要的价钱:c =[9 6.5 20 14.5 19 13 10.5];
生成中继站的覆盖矩阵:a
a=zeros(7,15);a(1,[1,2,4])=1;a(2,[2,3,5])=1;
a(3,[4,7,8,10])=1;a(4,[5,6,8,9])=1;a(5,[8,9,12])=1;
a(6,[7,10,11,12,15])=1;a(7,[12,13,14,15])=1;
即如下面表示:
a =[1 1 0 1 0 0 0 0 0 0 0 0 0 0 0;0 1 1 0 1 0 0 0 0 0 0 0 0 0 0;0 0 0 1 0 0 1 1 0 1 0 0 0 0 0;
0 0 0 0 1 1 0 1 1 0 0 0 0 0 0;0 0 0 0 0 0 0 1 1 0 0 1 0 0 0;0 0 0 0 0 0 1 0 0 1 1 1 0 0 1;0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 ]
花费的资金为:l*c'
数组中的0-1表示的是中继站对社区的覆盖与否。
2)程序设计:
定义location1函数来计算相关的数据,并且函数结果用数组来进行存储,包含各种情况的总资金,总覆盖人数。
利用for循环从根节点进行搜索,用0-1变量来表示是否将该中继站进行建设,并且每进入一个节点时都要进行判断总资金是否少于50即用约束条件if l*c'<=50进行判断;否则将t退回节点即转入else。
在得到的所有数组中我们要根据总人数来进行刷选:这里我们限制最小的人数为90千人。
这里还需要利用函数sign 函数来确定社区的覆盖与否。
继而可得到相应的总人覆盖。
刷选出适合的数组后,得到相应的资金花费并存入数组loc1给予输出。
3)模型结果:
且对应所花费的费用是44.5百万在这里面也不是最大的因此是比较好的方案,则对于
4.2 问题二
0—1 整型规划 4.2.1 模型建立
题中考虑到中继站出现故障维修的时候可能会出现所覆盖的社区信号中断等问 题,为此对通讯资费进行了调整,规定,仅有一个中继站信号覆盖的小区通讯资费按正常资费的70%收取,有两个或两个以上中继站信号覆盖的小区的通讯资费按正常收取,为此,我们需要得到新的模型来进行求解,因为假设每个用户的正常资费相同,所以70%可以用减少人口来求最优值,故问题二的目标函数为:∑==15
1j j j r p M
题目要求建设中继站的费用不超过5000 万元,故约束条件:507
1
≤∑=i i i k c
4.2.2 模型求解:
可知模型为:max ∑==15
1j j j r p M
⎪⎩⎪⎨⎧=≤∑=1
0;
507
1
或i i i i k k c
回溯算法
4.2.3 模型建立:
同样的是选择最优深度搜索,一旦在搜索路径上出现不满足限制约束条件的情况,就终止此路径的进一步搜索,去寻求另外的搜 索路径。
解决此问题中,关键在于那几个社区最终有几个中继站覆盖的确定,因为这一确定的结论将会影响到资费的收入。
而且两者必须联系起来一起考虑。
在迭代搜索模型中,终止搜索的条件为:搜索路径在未达到最终解空间时,建设中继站的费用超过5000万元,或者搜索路径到达了解空间。
这样可以将搜索路径达到解空间的中继站的建设情况,确定每个社区有几个中继站覆盖,以便确定应对社区用户是按照正常收取资费还是收取资费的70%。
在计算总资费的时候,我们用有效人数来进行表示,有效人数就是在只有一个中继站覆盖的社区:人数*0.7就是这个社区的有效人数。
为此,可以将搜索路径上各中继站的建设情况全部列出。
然后根据题目中的表一来确定为每一社区服务的中继站的个数。
再算出有效地人数;还应考虑到投入和收入的关系问题,应尽量投入尽量少的钱,取得尽量多的收入。
因此,我们在考虑资费收入时,把社区内移动用户数与建设中继站的投入的比值作为研究的最终目标量。
这样,最终选择出资费收入高的搜索路径。
从而解决了满足条件的收益最大的 中继站建设方案的确定。
4.2.2 模型求解: 1)数据准备:
定义数组存储每个社区的人数:p=[2,4,13,6,9,4,8,12,10,11,6,14,9,3,6]; 建设7个中继站所需要的价钱:c =[9 6.5 20 14.5 19 13 10.5]; 生成中继站的覆盖矩阵:a
a=zeros(7,15);a(1,[1,2,4])=1;a(2,[2,3,5])=1;
a(3,[4,7,8,10])=1;a(4,[5,6,8,9])=1;a(5,[8,9,12])=1;
a(6,[7,10,11,12,15])=1;a(7,[12,13,14,15])=1;即如下面表示:
a =[1 1 0 1 0 0 0 0 0 0 0 0 0 0 0;0 1 1 0 1 0 0 0 0 0 0 0 0 0 0;0 0 0 1 0 0 1 1 0 1 0 0 0 0 0;0 0 0 0 1 1 0 1 1 0 0 0 0 0 0;0 0 0 0 0 0 0 1 1 0 0 1 0 0 0;0 0 0 0 0 0 1 0 0 1 1 1 0 0 1;0 0 0 0 0 0 0 0 0 0 1 1 1 1]
花费的资金为:l*c'
数组中的0-1表示的是中继站对社区的覆盖与否。
2)程序设计:
定义location1函数来计算相关的数据,并且函数结果用数组来进行存储,包含各种情况的总资金,总覆盖人数。
利用for 循环从根节点进行搜索,用0-1变量来表示是否将该中继站进行建设,并且每进入一个节点时都要进行判断总资金是否少于50即用约束条件 if l*c'<=50进行判断;否则将t 退回节点即转入else 。
在得到的所有数组中我们要根据总人数来进行刷选:这里我们限制最小的人数为60。
这里还需要利用函数sign函数来确定社区的覆盖与否。
接着总人数的确定中一个中继站覆盖的社区人数需要乘以0.7继而可得到相应的总人覆盖。
刷选出适合的数组后,得到相应的资金花费并存入数组loc1给予。
3)模型结果
则具体
这时,要建设的中继站有2号、4号、6号和7号。
其中第一和第四区域没有被任何中继站覆盖,不产生资费收入;而第五、第十二、第十五区域被两个或两个以上的中继站覆盖,
通信资费按正常资费收取;其他区域只有一个基站覆盖,通信资费按照正常资费的70%
收取。
在此种方案下,中继站建设总费用 44.50(百万元) ,有效人数为8.5(万)。
五. 结果分析及检验
对于问题一,由两种方法建立模型求解的结果都相同,得到最佳的建站点2,4,6,7,所需费用44.5 万元,覆盖人口109 千人,结果正确,但方法一在编程上较简单,方法二遍历次数较少,但编程难度系数较高,需要一定的编程能力。
对于问题二,两种方法也都能求出同样的结果,得到最佳的建站点2,4,6,7,所需费用47.3 万元,获得资费为85c 千元。
由上图可以清晰看出,收取资费的百分比增大,再摸范围内覆盖总人数也随之增大,但不会全部覆盖。
00.10.20.30.4
0.50.60.70.80.91
百分比
覆盖总人数(千)
由上图可以看出,收取资费的百分比增大,获得的总费用呈分段函数,在一定区间内数值不发生改变。
六. 优化方向
该模型巧妙的解决了相邻信号站重复覆盖的人口数的问题,使得在LINGO 求解方便,缺点是放数据量更大时计算会比较复杂,所以可以考虑用MATLAB 编程求解,列出基站和小区的关系矩阵。
但是本文的缺点是考虑问题时我们只考虑了两个重要的因素,因此在问题的延伸中,本文加入更多的约束条件,使得模型和求解更加的实用。
中继站的后续研究还可以从它建设时的各种技术因素、社会因素、安全因素等来考虑,在通过各种方法将对这些因素进行定量分析,建立合理的中继站最大覆盖模型。
对于本问题的延伸,可更改规划目标,并加入更多的约束条件,如:通过研究得出地区信号覆盖层数对信号质量的影响,继而影响用户数量及收费标准,以最大收益为目标函数。
新问题的规划方法可以再上述两个模型为框架的基础上修改而得。
对于0、1 规划类问题,利用电工学数字信号处理的方法也可以方便的解决,就本问题而言,其目标函数利用数字信号寄存器的工作逻辑十分相似,可尝试其他软件求解。
七. 参考文献
[1].胡运权 编著《运筹学教程》 清华大学出版社 2007.04 第三版; [2].蒋启源 编著《数学模型》 高等教育出版社 2003.08 第三版;
[3].上官士青 辛浩然 《数学建模通信基站选址问题的lingo 求解》 机械电子 2009,23: 92-93。
[4] 吴礼斌,李柏年,数学实验与建模[M],北京:国防工业出版社,2007 年; [5] 王兵团,数学建模基础[M],北京:北京交通大学出版社,2004 年;
[6] 胡守信,李柏年,基于MATLAB 的数学试验[M],北京:科学出版社,2004 年;
程序一(问题一法一):
max = 2*k1+4*b1+13*k2+6*b2+9*b3+4*k4+8*b4+12*b5+10*b6+11*b7+6*k6+14*b8+9*k7+3*k7+6*b9;
百分比
总费用(百万)
9*k1+6.5*k2+20*k3+14.5*k4+19*k5+13*k6+10.5*k7<=50;
b1=@IF( k1+k2#eq#0, 0, 1);
b2=@IF( k3+k1#eq#0, 0, 1);
b3=@IF(k4+k2 #eq#0, 0, 1);
b4=@IF( k3+k6#eq#0, 0, 1);
b5=@IF(k3+k4+k5 #eq#0, 0, 1);
b6=@IF(k4+k5 #eq#0, 0, 1);
b7=@IF(k3+k6 #eq#0, 0, 1);
b8=@IF(k5+k6+k7 #eq#0, 0, 1);
b9=@IF(k6+k7 #eq#0, 0, 1);
@BIN(k1);
@BIN(k2);
@BIN(k3);
@BIN(k4);
@BIN(k5);
@BIN(k6);
@BIN(k7);
end
Local optimal solution found.
Objective value: 109.0000
Objective bound: 109.0000
Infeasibilities: 0.000000
Extended solver steps: 0
Total solver iterations: 67
Variable Value Reduced Cost K1 0.000000 -2.000000 B1 1.000000 0.000000 K2 1.000000 -13.00000 B2 0.000000 0.000000 B3 1.000000 0.000000 K4 1.000000 -4.000000 B4 1.000000 0.000000 B5 1.000000 0.000000 B6 1.000000 0.000000 B7 1.000000 0.000000 K6 1.000000 -6.000000 B8 1.000000 0.000000 K7 1.000000 -12.00000 B9 1.000000 0.000000 K3 0.000000 0.000000 K5 0.000000 0.000000
Row Slack or Surplus Dual Price
1 109.0000 1.000000
2 5.500000 0.000000
3 0.000000 4.000000
4 0.000000 6.000000
5 0.000000 9.000000
6 0.000000 8.000000
7 0.000000 12.00000
8 0.000000 10.00000
9 0.000000 11.00000
10 0.000000 14.00000
11 0.000000 6.000000
程序二:(问题二法一)
max=
2*k1*0.7+4*b1+13*k2*0.7+6*b2+9*b3+4*k4*0.7+8*b4+12*b5+10*b6+11*b7+6*k6*0.7+14*b8+9*k7* 0.7+3*k7*0.7+6*b9;
9*k1+6.5*k2+20*k3+14.5*k4+19*k5+13*k6+10.5*k7<=50;
b1=@IF( k1+k2#gt#1, 1, @IF( k1+k2#eq#1, 0.7, 0));
b2=@IF( k3+k1#gt#1, 1, @IF( k3+k1#eq#1, 0.7, 0));
b3=@IF(k4+k2 #gt#1, 1, @IF(k4+k2 #eq#1, 0.7, 0));
b4=@IF( k3+k6#gt#1, 1, @IF( k3+k6#eq#1, 0.7, 0));
b5=@IF(k3+k4+k5 #gt#1, 1, @IF(k3+k4+k5 #eq#1, 0.7, 0));
b6=@IF(k4+k5#gt#1, 1, @IF(k4+k5 #eq#1, 0.7, 0));
b7=@IF(k3+k6 #gt#1, 1, @IF(k3+k6 #eq#1, 0.7, 0));
b8=@IF(k5+k6+k7#gt#1, 1, @IF(k5+k6+k7 #eq#1, 0.7, 0));
b9=@IF(k6+k7#gt#1, 1, @IF(k6+k7 #eq#1, 0.7, 0));
@BIN(k1);
@BIN(k2);
@BIN(k3);
@BIN(k4);
@BIN(k5);
@BIN(k6);
@BIN(k7);
end
Local optimal solution found.
Objective value: 85.00000
Objective bound: 85.00000
Infeasibilities: 0.000000
Extended solver steps: 10
Total solver iterations: 421
Variable Value Reduced Cost
K1 0.000000 -1.400000
B1 0.7000000 0.000000 K2 1.000000 -9.100000 B2 0.000000 0.000000 B3 1.000000 0.000000 K4 1.000000 -2.800000 B4 0.7000000 0.000000 B5 0.7000000 0.000000 B6 0.7000000 0.000000 B7 0.7000000 0.000000 K6 1.000000 -4.200000 B8 1.000000 0.000000 K7 1.000000 -8.400000 B9 1.000000 0.000000 K3 0.000000 0.000000 K5 0.000000 0.000000
Row Slack or Surplus Dual Price
1 85.00000 1.000000
2 5.500000 0.000000
3 0.000000 4.000000
4 0.000000 6.000000
5 0.000000 9.000000
6 0.000000 8.000000
7 0.000000 12.00000
8 0.000000 10.00000
9 0.000000 11.00000
10 0.000000 14.00000
11 0.000000 6.000000 程序三:(问题一法二)
function loc1=location1(a)
c =[9.0000 6.5000 20.0000 14.5000 19.0000 13.0000 10.5000];
p=[2,4,13,6,9,4,8,12,10,11,6,14,9,3,6];
i=1;
a1=[1,0];
a2=[1,0];
a3=[1,0];
a4=[1,0];
a5=[1,0];
a6=[1,0];
for i1=1:2
l=zeros(1,7);
l(1)=a1(i1);
if l*c'<=50
for i2=1:2
l(2)=a2(i2);
if l*c'<=50
for i3=1:2
l(3)=a3(i3);
if l*c'<=50
for i4=1:2
l(4)=a4(i4);
if l*c'<=50
for i5=1:2
l(5)=a5(i5);
if l*c'<=50
for i6=1:2
l(6)=a6(i6);
if l*c'<=50
l(7)=1;
if l*c'<=50
for j=1:7
b(j,:)=a(j,:)*l(j);
end
s=sum(b,1);
for j=1:15
s(j)=sign(s(j));
end
po=p.*s;
if sum(po)>=90
loc1(i,1:7)=l;
loc1(i,8)=sum(po);
loc1(i,9)=l*c';
i=i+1;
end
else l(7)=0;
if l*c'<=50
for j=1:7
b(j,:)=a(j,:)*l(j);
end
s=sum(b,1);
for j=1:15
s(j)=sign(s(j));
end
po=p.*s;
if sum(po)>=90
loc1(i,1:7)=l;
loc1(i,8)=sum(po);
loc1(i,9)=l*c';
i=i+1;
end
end
end
else l(6)=1-sign(l(6));
end
end
else l(5)=1-sign(l(5));
end
end
else l(4)=1-sign(l(4));
end
end
else l(3)=1-sign(l(3));
end
end
else l(2)=1-sign(l(2));
end
end
else l(1)=1-sign(l(1));
end
end
程序四:(问题二法二)
function loc2=location2(a)
c =[9.0000 6.5000 20.0000 14.5000 19.0000 13.0000 10.5000]; p=[2,4,13,6,9,4,8,12,10,11,6,14,9,3,6];
i=1;
m=zeros(1,15);
d=zeros(1,15);
a1=[1,0];
a2=[1,0];
a3=[1,0];
a4=[1,0];
a5=[1,0];
a6=[1,0];
for i1=1:2
l=zeros(1,7);
l(1)=a1(i1);
if l*c'<=50
for i2=1:2
l(2)=a2(i2);
if l*c'<=50
for i3=1:2
l(3)=a3(i3);
if l*c'<=50
for i4=1:2
l(4)=a4(i4);
if l*c'<=50
for i5=1:2
l(5)=a5(i5);
if l*c'<=50
for i6=1:2
l(6)=a6(i6);
if l*c'<=50
l(7)=1;
if l*c'<=50
for j=1:7
b(j,:)=a(j,:)*l(j);
end
s=sum(b,1);
for j=1:15
m(j)=sign(s(j)-sign(s(j))); %超过两个覆盖的 s(j)=sign(s(j));%有覆盖的
d(j)=s(j)-m(j);%一个覆盖的
end
r=m+0.7*d;
po=p.*r;
if sum(po)>=70
loc2(i,1:7)=l;
loc2(i,8)=sum(po);
loc2(i,9)=l*c';
i=i+1;
end
else l(7)=0;
if l*c'<=50
for j=1:7
b(j,:)=a(j,:)*l(j);
end
s=sum(b,1);
for j=1:15
m(j)=sign(s(j)-sign(s(j))); %超过两个覆盖的 s(j)=sign(s(j));%有覆盖的
d(j)=s(j)-m(j);%一个覆盖的
end
r=m+0.7*d;
po=p.*r;
if sum(po)>=70
loc2(i,1:7)=l;
loc2(i,8)=sum(po);
loc2(i,9)=l*c';
i=i+1;
end
end
end
else l(6)=1-sign(l(6));
end
end
else l(5)=1-sign(l(5));
end
end
else l(4)=1-sign(l(4));
end
end
else l(3)=1-sign(l(3));
end
end
else l(2)=1-sign(l(2));
end
end
else l(1)=1-sign(l(1));
end
end
end
程序五(优化)
function loc3=location3(t)
a=zeros(7,15);a(1,[1,2,4])=1;a(2,[2,3,5])=1;
a(3,[4,7,8,10])=1;a(4,[5,6,8,9])=1;a(5,[8,9,12])=1;
a(6,[7,10,11,12,15])=1;a(7,[12,13,14,15])=1;
c =[9.0000 6.5000 20.0000 14.5000 19.0000 13.0000 10.5000]; p=[2,4,13,6,9,4,8,12,10,11,6,14,9,3,6];
i=1;
m=zeros(1,15);
d=zeros(1,15);
a1=[1,0];
a2=[1,0];
a3=[1,0];
a4=[1,0];
a5=[1,0];
a6=[1,0];
for i1=1:2
l=zeros(1,7);
l(1)=a1(i1);
if l*c'<=50
for i2=1:2
l(2)=a2(i2);
if l*c'<=50
for i3=1:2
l(3)=a3(i3);
if l*c'<=50
for i4=1:2
l(4)=a4(i4);
if l*c'<=50
for i5=1:2
l(5)=a5(i5);
if l*c'<=50
for i6=1:2
l(6)=a6(i6);
if l*c'<=50
l(7)=1;
if l*c'<=50&&l*c'>=40
for j=1:7
b(j,:)=a(j,:)*l(j);
end
s=sum(b,1);
for j=1:15
m(j)=sign(s(j)-sign(s(j))); %超过两个覆盖的 s(j)=sign(s(j));%有覆盖的
d(j)=s(j)-m(j);%一个覆盖的
end
r=m+t*d;
po=p.*r;
if sum(po)>=20
loc3(i,1:7)=l;
loc3(i,8)=sum(po);
loc3(i,9)=l*c';
i=i+1;
end
else l(7)=0;
if l*c'<=50&&l*c'>=40
for j=1:7
b(j,:)=a(j,:)*l(j);
end
s=sum(b,1);
for j=1:15
m(j)=sign(s(j)-sign(s(j))); %超过两个覆盖的 s(j)=sign(s(j));%有覆盖的
d(j)=s(j)-m(j);%一个覆盖的
end
r=m+t*d;
po=p.*r;
if sum(po)>=20
loc3(i,1:7)=l;
loc3(i,8)=sum(po);
loc3(i,9)=l*c';
i=i+1;
end
end
end
else l(6)=1-sign(l(6));
end
end
else l(5)=1-sign(l(5));
end
end
else l(4)=1-sign(l(4));
end
end
else l(3)=1-sign(l(3));
end
end
else l(2)=1-sign(l(2));
end
end
else l(1)=1-sign(l(1));
end
end
end
function f=f(t)
b1=location3(t);
f1=max(b1(:,8)./b1(:,9));
t1=size(b1);
t2=t1(1);
for i1=1:t2
if f1==b1(i1,8)/b1(i1,9)
f(1)= b1(i1,9);
f(2)=b1(i1,8);
break;
end
end
end
k1=1;
k2=0:0.01:1;
for k3=0:0.01:1
f1(k1,1:2)=f(k3);% 第一列是总费用,第二列是总人数。
k1=k1+1;
end
0000。