集合覆盖模型

集合覆盖模型

(一)模型介绍

    在这里,将采用集合覆盖模型进行营业厅选址的计算,集合覆盖模型的基础思想是用最小数量的变压器在规定的半径范围去覆盖所有的需求点。

覆盖模型的数学模型为:

约束条件为:

N——区域中的变压器全集合,N={1,2,…,n};

M——区域中所需建设营业厅的候选点集合,M={1,2,…,m};

di——第i个营业厅的需求量;

Dj——营业厅j的服务能力;

A(j)——营业厅节点j可以覆盖的变压器点i的集合;

B(i)——可以覆盖营业厅节点i的变压器节点j的集合;

Xj为0-1变量,Xj=1,在j点建立营业厅;Xj=0,不在j点建立营业厅;j属于集合M;

Yij——变压器节点i需求中被分配给营业厅点j的部分。

(二)计算过程

第一步:初始化。令所有Yi=0,Xj=0, (已分配的营业厅),并确定集合A(j)和集合B(i);

第二步:选择下一个营业厅。在M中选择Xj=0,且A(j)的规模为最大的点j’为营业厅备选点,即|A(j’)|=max{|A(j)|},令Xj’=1,并在M集合中剔除节点j’,即M=M\{j’}

第三步:确定节点j’的覆盖范围。将A(j’)中的元素按B(i)的规模从大到小的顺序指派给j’,直至j’的容量为Dj=0或A(j’)为空。其中对于i A(j’),且,Yi<1,将i支配给j’的方法为:若di(1-Yi)<=Dj’,则令Yij’=1-Yi,Dj’=Dj’-di(1-Yi),Yi=1,在A(j’)和N中剔除需求点i。

若:di(1-Yi)>Dj’,则令 。

第四步:若N或M为空,停止;否则,更新集合A(j)和集合B(i),转第二步。

(三)计算样例

    例如某个区域内共有9个变压器,每个变压器都有可能作为营业厅的备选点,各点的位置及其两两间的,如下图所示:


    在这里,设营业厅的最大服务半径为3km。

解法:

    N={1,2,3,4,5,6,7,8,9},M={1,2,3,4,5,6,7,8,9},由图中两点间的最短距离,根据最大服务半径为3km的约束,可以确定集合A(j)和集合B(i)。

第一步:初始化

变压器点号

A(j)

B(i)

1

1,2,3

1,2,3

2

1,2,3

1,2,3

3

1,2,3,4,5

1,2,3,4,5

4

1,3,4,5,6,7

1,3,4,5,6,7

5

3,4,5,6

3,4,5,6

6

4,5,6,7,8

4,5,6,7,8

7

4,6,7,8

4,6,7,8

8

6,7,8,9

6,7,8,9

9

8,9

8,9

 

第二步:确定一个营业厅。因为A(4)={1,3,4,5,6,7},|A(4)|=6最大,故首先选取j’=4。根据距离远近依次指派1,3,4,5,6,7归变压器节点4服务。

第三步:更新。此时,N={2,8,9},M={1,2,3,4,5,6,7,8,9},更新集合A(j)和集合B(i)后,如下表所示:

变压器点号

A(j)

B(i)

1

2

 

2

2

1,2,3

3

2

 

5

 

 

6

8

8

7

8

8

8

8,9

6,7,8,9

9

8,9

8,9

第四步,确定一个营业厅节点。因为A(8)={8,9},|A(8)|=2为最大,故首先选取j’=8,并且8,9两点归变压器节点8服务。

第五步,更新。此时,N={2},M={1,2,3,5,6,7,9},更新集合A(j)和集合B(i)后如下表所示。

变压器点号

A(j)

B(i)

1

2

 

2

2

1,2,3

3

2

 

4

 

 

5

 

 

6

 

 

7

 

 

8

 

 

9

 

 

第六步,确定一个营业厅点。因为A(2)={2},且B(i)中有值,|A(2)|=1为最大,故选取j’=2,并且点归节点2服务。

第七步,更新。此时,N={},M={1,3,5,6,7,9},结束。

因此,计算结果为(4,8,2)。
阅读更多
个人分类: Spark技术研究
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭