算法设计与分析期末项目
1. 题目 固定容量设施分配问题
1.1 题目描述
假设有 n n n个设施和 m m m位客户,希望从中选择:
- 在 n n n个设施中选择开启哪些设施
- 将客户分配给开启的设施
要求开启设施的总费用和客户分配到设施的总费用之和最小,且设施的容量不能超过设施中客户分配费用的总和。
1.2 题目要求
-
至少两种算法解答题目
-
获得71种测例的运行结果(具体格式略,在文章中体现)
2. 数学模型分析
2.1 变量定义
在本题目中,为方便分析,定义如下的变量:
-
I = { 0 , 1 , ⋯   , n − 1 } 表 示 设 施 0 , 1 , ⋯   , n − 1 I = \lbrace 0, 1, \cdots, n-1 \rbrace 表示设施 0, 1, \cdots, n-1 I={ 0,1,⋯,n−1}表示设施0,1,⋯,n−1
-
J = { 0 , 1 , ⋯   , m − 1 } 表 示 客 户 0 , 1 , ⋯   , m − 1 J = \lbrace 0, 1, \cdots, m-1 \rbrace 表示客户0, 1, \cdots, m-1 J={ 0,1,⋯,m−1}表示客户0,1,⋯,m−1
-
y i y_{i} yi表示设施 i i i的开启状况,具体如下所示: y i = { 1 , 设 施 i 开 启 0 , 设 施 i 未 开 启 y_{i}=\begin{cases} 1, 设施i开启 \\ 0, 设施i未开启 \\ \end{cases} yi={ 1,设施i开启0,设施i未开启
-
x i j x_{ij} xij表示客户 j j j的分配情况,具体如下所示: x i j = { 1 , 表 示 客 户 j 被 分 配 到 设 施 i 0 , 表 示 客 户 j 未 被 分 配 到 设 施 i x_{ij}=\begin{cases} 1, 表示客户j被分配到设施i \\ 0, 表示客户j未被分配到设施i \\ \end{cases} xij={ 1,表示客户j被分配到设施i0,表示客户j未被分配到设施i
-
V i V_{i} Vi表示设施 i i i的容量
-
C i C_{i} Ci表示设施 i i i的开启费用
-
D i j D_{ij} Dij表示客户 j j j分配到设施 i i i的需求容量
-
G i j G_{ij} Gij表示客户 j j j分到到设施 i i i的分配费用
-
L L L表示分配的总费用
2.2 目标函数
题目的目标函数可以写成如下数学形式,即求所以开启设施所需要的费用和所用客户分配到相应工厂所需的费用之和:
L = m i n { ∑ i = 0 n − 1 C i y i + ∑ i = 0 n − 1 ∑ j = 0 m − 1 G i j x i j } L=min \lbrace \sum_{i=0}^{n-1}C_{i}y_{i}+\sum_{i=0}^{n-1}\sum_{j=0}^{m-1}G_{ij}x_{ij} \rbrace L=min{
i=0∑n−1Ciyi+i=0∑n−1j=0∑m−1Gijxij}