天天看點

【優化選址】窮舉法求解小區基站選址優化問題【Matlab 439期】

一、背景簡介

【案例】有一個行動電話營運商計劃在一個目前尚未覆寫的區域開展業務,預算為1000萬元。調查表明,此區域有7個位置可以安設基站,每個基站隻能覆寫一定數目的社群,具體資料見下表:

【優化選址】窮舉法求解小區基站選址優化問題【Matlab 439期】

解決思路:

1)窮舉基站建造的可能性(排列組合,7選1至7選7)

2)去掉預算超标的

3)計算每個組合覆寫的社群

4)計算覆寫的人數

5)求人數最大值找出最優方案

二、部分源代碼

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
           

三、運作結果

【優化選址】窮舉法求解小區基站選址優化問題【Matlab 439期】

四、matlab版本及參考文獻

1 matlab版本

2014a

2 參考文獻

[1] 包子陽,餘繼周,楊杉.智能優化算法及其MATLAB執行個體(第2版)[M].電子工業出版社,2016.

[2]張岩,吳水根.MATLAB優化算法源代碼[M].清華大學出版社,2017.

繼續閱讀