一、简介
基于matlab 小区基站最优化选址问题
二、源代码
function [C,P] = GetPlan()
clc
clear
Get_OptimalCombination(1);
Get_OptimalCombination(2);
Get_OptimalCombination(3);
Get_OptimalCombination(4);
Get_OptimalCombination(5);
end
%function [Plan_BuildStation, Plan_BuildCost, Plan_CoverCommunity, Plan_CoverPeople] = Get_OptimalCombination(SelectNum)
function Result = Get_OptimalCombination(SelectNum)
%基站建设费用
Cost = [1.8, 1.3, 4.0, 3.5,3.8,2.6,2.1];
%基站对应的社区
BaseStation_Community = [1,2,4,0,0; 2,3,5,0,0; 4,7,8,10,0; 5,6,8,9,0; 8,9,12,0,0; 7,10,11,12,15; 12,13,14,15,0];
%社区对应的人口数
Community_Person = [2, 4, 13, 6, 9, 4, 8, 12, 10, 11, 6, 14, 9, 3, 6];
CB_num = combntns(1:7, SelectNum);%求排列组合数
[Size_row, Size_column] = size(CB_num);%求组合的行数和列数
CB_num;%测试项
%求出每种组合的价格
for i = 1:1:Size_row
Build_Cost(i) = 0;
for j = 1:1:Size_column
Temp1 = Cost(CB_num(i,j));
Build_Cost(i) = Build_Cost(i) + Temp1;
end
end
Build_Cost;%测试项
%判断是否超出预算,并删除不符合要求的组合
abcd1 = 0;
for i = 1:1:Size_row
if Build_Cost(i) > 10
abcd2 = i;
abcd1 = [abcd1 abcd2]; %取出不合适的序号
end
end
abcd1(:,1) = [];%删除第一项0
for i = length(abcd1):-1:1
abcd1(i);
CB_num(abcd1(i),:) = [];
Build_Cost(:,abcd1(i)) = [];
end
[Size_row, Size_column] = size(CB_num);%更新数组参数
if Size_row == 0
return;
end
%求每种组合覆盖的社区
for i = 1:1:Size_row
Temp2 = 0;
for j = 1:1:Size_column;
Temp3 = BaseStation_Community(CB_num(i,j),:);
Temp2 = [Temp2 Temp3];%数组组合
Cover_Community{i} = Temp2(Temp2~=0);%组成元包数组
end
end
Cover_Community{1};%测试项
%Cover_Community{1}(:,4)
%求覆盖的人数
for i = 1:1:Size_row
Temp4 = Cover_Community{i};
Temp6 = 0;
for j = 1:1:length(Cover_Community{i});
Temp7 = Cover_Community{i}(:,j);%读覆盖的社区
Temp6 = Temp6 + Temp5;%求和
Plan_TotlePeople(i) = Temp6;
end
三、运行结果
四、备注
版本:2014a