演算法設計與分析期末專案
演算法設計與分析期末專案
1. 題目 固定容量設施分配問題
1.1 題目描述
假設有\(n\)個設施和\(m\)位客戶,希望從中選擇:
- 在\(n\)個設施中選擇開啟哪些設施
- 將客戶分配給開啟的設施
要求開啟設施的總費用和客戶分配到設施的總費用之和最小,且設施的容量不能超過設施中客戶分配費用的總和。
1.2 題目要求
至少兩種演算法解答題目
獲得71種測例的執行結果(具體格式略,在文章中體現)
2. 數學模型分析
2.1 變數定義
在本題目中,為方便分析,定義如下的變數:
\(I = \lbrace 0, 1, \cdots, n-1 \rbrace 表示設施 0, 1, \cdots, n-1\)
$J = \lbrace 0, 1, \cdots, m-1 \rbrace 表示客戶0, 1, \cdots, m-1 $
\(y_{i}\)表示設施\(i\)的開啟狀況,具體如下所示:\[y_{i}=\begin{cases} 1, 設施i開啟 \\ 0, 設施i未開啟 \\ \end{cases}\]
\(x_{ij}\)表示客戶\(j\)的分配情況,具體如下所示:\[x_{ij}=\begin{cases} 1, 表示客戶j被分配到設施i \\ 0, 表示客戶j未被分配到設施i \\ \end{cases}\]
\(V_{i}\)表示設施\(i\)的容量
\(C_{i}\)
\(D_{ij}\)表示客戶\(j\)分配到設施\(i\)的需求容量
\(G_{ij}\)表示客戶\(j\)分到到設施\(i\)的分配費用
\(L\)表示分配的總費用
2.2 目標函式
題目的目標函式可以寫成如下數學形式,即求所以開啟設施所需要的費用和所用客戶分配到相應工廠所需的費用之和:
\[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\]
2.3 約束條件
目標函式的約束條件如下所示,即每個設施中客戶需求量\(D_{ij}\)
\[\sum_{j=0}^{m-1}D_{ij}x_{ij} \leq V_{i}y_{i}, i \in I \\ \sum_{i=0}^{n-1}x_{ij}=1,j \in J \\ x_{ij},y_{j} \in \lbrace 0, 1\rbrace, i \in I, j \in J\]
3. 演算法設計與分析
3.1 貪心演算法
解決這個問題的第一種解法是採用貪心演算法,貪心的方式是遍歷每一位客戶\(j \in J\),在設施集合\(I\)中尋找最佳的設施\(i\),使得到分配客戶\(j\)為止,所得到的總費用\(F_{j}\)最小,則:\[i=\underset{i \in I}{\operatorname{argmin}}\,\lbrace F_{j-1}+y_{i}C_{i}+G_{ij}\rbrace [V_{i}-D_{j} \geq 0] \\ F_{-1} = 0,G = F_{m-1}\]
3.1.1 演算法分析
固定容量的設施問題在常數時間下是不可解的,因此可以使用一些近似的演算法來求解,貪心演算法就是其中的一種。在實驗中,使用顧客設施的分配序列\(S=[s_1,s_2,\cdots,s_m],s_i \in I\),作為問題的解,使用\(E=[e_1,e_2,\cdots,e_n],n \in \lbrace0,1\rbrace\)表示設施的開啟狀態,總在貪心的過程中,總共需要經歷兩層迴圈,因此演算法的時間複雜度為\(O(n^2)\)。但是貪心演算法畢竟是不是求解固定容量設施的準確解法,因此不可避免會存在誤差,隨著資料規\(n\)模的增大,誤差會以\(lgn\)增大,因此在大資料下,貪心演算法的準確度不高,跟最優解之間的差距可以達到40%,但是在規模較小或者中等的時候,貪心演算法的速度和解的質量還是非常好的,能夠在10%以內。
演算法在C++程式碼中的關鍵部分如下所示:
// Greedy Algorithm.
// For every Costomer t.
for (int t = 0; t < cosNum; t++) {
int minCos = INT_MAX;
int bestServe = -1;
// Costomers t choose facility j.
// Assume all the facility are open at first.
for (int j = 0; j < facNum; j++) {
// fct[j].volumn-csm[t].demand >= 0 means
// the fct[j] have enough space to satisfy the demand.
if ((fct[j].volumn - csm[t].demand >= 0)
&& (minCos >= G+csm[t].assignment_cost[j])) {
bestServe = j;
minCos = G+csm[t].assignment_cost[j];
}
}
serveList[t] = bestServe;
// Update the current volumns of fct.
fct[serveList[t]].volumn -= csm[t].demand;
// Update the specific fct to open.
isOpen[serveList[t]] = 1;
// Update the current total cost.
G = minCos;
}
3.1.2 測例分析
測例 | 結果 | 執行時間 | 設施開啟狀態 | 設施分配狀態 |
---|---|---|---|---|
p1 | 9440 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3 |
p2 | 8126 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3 |
p3 | 10126 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3 |
p4 | 12126 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3 |
p5 | 9375 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1 |
p6 | 8061 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1 |
p7 | 10061 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1 |
p8 | 12061 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1 |
p9 | 9040 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 |
p10 | 7726 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 |
p11 | 9726 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 |
p12 | 11726 | 0s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 |
p13 | 12032 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p14 | 9180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p15 | 13180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p16 | 17180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p17 | 12032 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p18 | 9180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p19 | 13180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p20 | 17180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p21 | 12032 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p22 | 9180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p23 | 13180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p24 | 17180 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 |
p25 | 17956 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 14 25 2 29 7 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5 |
p26 | 15231 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 14 25 2 29 7 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5 |
p27 | 20031 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 14 25 2 29 7 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5 |
p28 | 24831 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 14 25 2 29 7 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5 |
p29 | 19395 | 0.001s | 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 5 5 8 14 17 29 13 17 0 8 13 17 8 25 25 11 2 11 |
p30 | 16397 | 0s | 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 5 5 8 14 17 29 13 17 0 8 13 17 8 25 25 11 2 11 |
p31 | 21397 | 0s | 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 5 5 8 14 17 29 13 17 0 8 13 17 8 25 25 11 2 11 |
p32 | 26397 | 0s | 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 5 5 8 14 17 29 13 17 0 8 13 17 8 25 25 11 2 11 |
p33 | 17814 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p34 | 15089 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p35 | 19889 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p36 | 24689 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p37 | 17814 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p38 | 15089 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p39 | 19889 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p40 | 24689 | 0s | 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 | 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 23 14 0 14 15 28 24 14 7 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 24 0 24 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 |
p41 | 7226 | 0s | 1 1 1 1 1 1 1 1 1 1 | 5 6 4 1 7 9 3 7 8 8 4 9 2 6 2 7 7 3 0 6 6 1 4 1 6 5 5 4 8 5 8 0 0 0 3 9 2 6 6 9 2 7 3 3 3 5 0 5 6 4 1 1 6 6 9 7 2 8 8 8 0 0 1 5 0 6 6 6 4 4 0 4 4 0 7 7 9 2 6 5 7 2 2 7 7 9 2 2 7 2 |
p42 | 9957 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 12 10 11 9 15 18 16 13 17 1 11 18 6 10 6 15 0 2 14 14 5 11 9 8 12 8 11 16 17 13 7 19 6 8 14 10 10 0 0 1 1 3 3 16 9 14 8 19 15 15 16 17 7 13 13 5 2 14 14 14 11 11 4 3 11 3 0 15 19 6 10 18 19 19 19 18 18 19 19 19 |
p43 | 12448 | 0s | 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 15 24 25 22 26 21 27 29 24 23 3 9 18 11 8 15 12 7 25 26 22 20 17 13 29 6 29 4 5 2 2 13 0 22 7 12 21 11 4 12 28 23 5 25 26 17 17 11 21 0 9 18 6 6 19 20 2 29 5 27 1 29 27 28 1 27 28 29 |
p44 | 7585 | 0s | 1 1 1 1 1 1 1 1 1 1 | 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 1 1 1 1 1 7 6 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 6 8 8 8 8 7 5 9 9 7 6 5 5 8 8 7 7 9 5 5 5 9 3 0 6 6 8 1 5 4 9 9 7 7 9 6 6 5 2 7 9 7 9 9 7 6 5 7 5 |
p45 | 9848 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 0 0 0 0 0 0 0 1 1 1 1 6 6 6 6 2 3 3 2 3 2 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 0 0 2 3 11 12 18 16 19 7 15 16 8 13 11 16 18 19 14 15 10 9 12 9 15 17 13 13 8 12 7 10 18 12 13 17 14 17 8 16 10 7 |
p46 | 12639 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 | 10 0 10 10 10 0 10 1 1 1 1 11 11 11 11 2 3 3 2 3 2 4 4 5 6 6 5 7 7 8 8 8 9 9 10 2 3 17 24 28 29 12 21 22 24 14 18 17 16 28 29 27 13 22 25 26 13 18 18 24 19 15 28 18 26 27 14 13 15 12 |
p47 | 6638 | 0s | 1 1 1 1 1 1 1 1 1 1 | 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 7 7 6 7 6 0 7 7 7 7 7 8 8 8 8 8 9 8 6 0 9 9 9 6 2 9 2 2 |
p48 | 9044 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 0 0 0 0 1 0 1 1 1 2 3 3 2 3 3 4 4 4 5 5 5 5 5 5 6 6 6 6 6 7 7 8 8 8 8 8 8 8 9 9 9 9 10 11 11 10 11 10 12 13 12 13 13 12 13 14 15 12 14 12 0 15 14 14 15 16 16 17 17 17 17 17 17 18 18 19 19 19 19 19 |
p49 | 12867 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 0 1 1 2 1 2 2 2 3 5 3 5 4 6 6 6 7 7 7 7 7 7 9 10 8 11 10 12 12 14 13 13 13 14 15 15 16 17 17 16 17 16 20 19 18 19 18 20 21 18 21 18 0 22 23 23 22 24 24 26 25 26 25 26 27 27 28 29 28 29 |
p50 | 10085 | 0s | 1 1 1 1 1 1 1 1 1 1 | 3 6 3 0 9 9 5 5 3 7 7 4 9 9 9 9 9 5 5 3 6 0 0 4 0 0 8 4 4 7 7 7 3 3 3 5 9 1 0 6 0 9 9 1 5 5 5 5 5 3 3 5 6 0 0 0 6 6 1 2 1 7 7 7 3 3 0 4 8 7 3 6 6 0 6 4 4 3 3 4 3 5 2 2 1 2 6 7 2 7 1 1 2 2 2 2 2 2 2 2 |
p51 | 11616 | 0s | 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 15 6 19 10 12 13 5 16 15 1 5 3 13 13 6 13 12 16 2 15 0 0 10 14 14 14 9 3 19 7 1 1 17 19 15 5 13 13 10 0 0 13 13 13 16 5 5 5 5 17 15 5 11 14 14 10 6 6 13 12 13 5 1 5 15 15 10 3 9 7 15 0 0 0 10 19 19 19 19 3 19 5 16 12 13 13 6 8 12 1 13 13 18 18 18 13 18 18 18 18 |
p52 | 10364 | 0s | 1 1 1 1 1 1 1 1 1 1 | 7 7 7 7 7 7 7 7 3 4 4 4 3 4 4 4 4 8 8 8 8 3 8 3 3 9 9 9 9 9 9 9 9 5 6 6 6 6 6 6 6 6 6 6 7 7 4 5 5 5 5 3 4 6 2 5 3 3 3 4 6 5 5 5 0 5 5 6 4 7 6 6 4 3 3 5 3 4 7 1 6 3 3 5 5 3 3 7 5 3 1 1 1 1 5 1 3 4 3 7 |
p53 | 12839 | 0s | 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 5 5 5 5 5 5 5 5 19 19 19 7 7 7 7 7 7 12 12 12 12 13 13 12 3 9 9 9 9 9 9 9 9 15 18 18 18 18 18 18 18 18 18 18 5 5 7 12 13 15 15 4 7 18 5 11 3 3 1 6 18 2 15 13 3 13 2 18 10 5 17 18 6 3 3 15 3 6 6 8 14 19 13 15 15 3 1 6 15 4 15 8 17 17 15 17 1 10 1 16 |
p54 | 10354 | 0s | 1 1 1 1 1 1 1 1 1 1 | 9 9 7 7 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 6 6 8 8 8 8 8 8 8 8 3 6 3 6 6 6 6 6 6 6 6 6 5 5 6 5 5 5 6 6 0 0 6 0 0 9 0 0 0 0 0 4 4 0 4 4 4 4 4 4 4 4 9 9 4 4 4 4 4 2 2 |
p55 | 12099 | 0s | 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 17 18 16 18 16 4 4 4 8 8 8 8 8 8 2 2 2 2 8 12 12 12 12 12 6 12 12 6 6 6 6 14 14 6 6 6 6 6 6 7 19 19 19 7 0 0 0 0 0 0 0 0 7 7 7 7 10 7 7 7 11 11 9 11 3 11 11 7 11 9 9 11 9 11 18 13 9 13 13 13 13 15 15 15 15 15 15 15 5 15 5 18 18 18 18 18 18 18 18 18 |
p56 | 23882 | 0.001s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p57 | 32882 | 0.001s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p58 | 53882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p59 | 39121 | 0.001s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p60 | 23882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p61 | 32882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p62 | 53882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p63 | 39121 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p64 | 23882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p65 | 32882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p66 | 53882 | 0.001s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p67 | 39671 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 22 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 15 18 9 6 26 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 19 5 27 7 28 6 25 25 2 3 27 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p68 | 23882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p69 | 32882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p70 | 53882 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
p71 | 39121 | 0s | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 |
3.2 多鄰域搜尋與模擬退火演算法
多鄰域搜尋演算法常與模擬退火演算法相結合,是一種啟發式演算法。模擬退火的出發點是基於物理中固體物質的退火過程與一般組合優化問題的相似性,其物理退火過程由加溫過程、等溫過程和冷卻過程兩部分組成。多鄰域搜尋是指利用多種鄰域搜尋演算法對解進行遍歷搜尋,這種方法容易陷入區域性最優解中,因此利用模擬退火演算法可以在一定的概率上接受差解,從而跳出區域性最優解,最終收斂到全域性最優解。
3.2.1 多鄰域搜尋
3.2.1.1 更改分配設施
第一種鄰域搜尋的方式是隨機選擇一個客戶\(j \in J\),在設施集\(I\)中隨機選擇一個不同於當前分配設施的設施\(i\),如果\(i\)的剩餘容量能夠滿足\(j\)的需求\(D_{ij}\),則將\(x_{ij}\)的值置為1,原來的設施置為0。實際操作中發現,如果在選擇設施的時候能夠加入貪心,效果會更好,更好後的相關程式碼如下所示:
if (p <= 0.5) {
int cosIndex = random(0, cosNum);
//int newServe = random(0, facNum);
// New serve should have enough space
/*
while ((newServe == serveList[cosIndex])
|| (fctTemp[newServe].volumn < csm[cosIndex].demand)) {
// If do not have enough space.
// create a new index.
newServe = random(0, facNum);
}*/
// Find the best new serve.
int newServe = serveList[cosIndex];
int minCost = currentBestSolution;
for (int i = 0; i < facNum; i++) {
// The i-th facility.
// If the facility has enough space and not currently facility.
if (serveList[cosIndex] != i
&& fctTemp[i].volumn >= csm[cosIndex].demand) {
// Check whether current serve facility is close after csm[cosIndex] is not assigned.
int currentOpen = (fctTemp[serveList[cosIndex]].volumn
+csm[cosIndex].demand == fctTemp[serveList[cosIndex]].Max) ? -1 : 0;
int newCost = minCost
- csm[cosIndex].assignment_cost[serveList[cosIndex]]
+ csm[cosIndex].assignment_cost[i]
+ currentOpen * fctTemp[serveList[cosIndex]].cost;
if (newCost < minCost) {
// Accept the new solution.
minCost = newCost;
newServe = i;
}
}
}
3.2.1.2 交換設施
第二種鄰域搜尋的方式,是隨機選取兩個不相同的客戶\(j_1\)和\(j_2\),如果原先兩個客戶所服務的設施\(i_1\)和\(i_2\)不相同,而且容量能夠分別滿足\(j_2\)和\(j_1\)的需求,則將兩個客戶所服務的設施交換,在程式碼中的部分如下所示:
// Case2: swap.
else if (p > 0.33 && p <= 0.66) {
// Random select two costomer position.
int cosNumOne = random(0, cosNum);
int cosNumTwo = random(0, cosNum);
// Prevent the two position to be same.
// Comfiren that the two position have enough space.
while ((cosNumOne == cosNumTwo)
|| (fctTemp[serveList[cosNumOne]].volumn + csm[cosNumOne].demand < csm[cosNumTwo].demand)
|| (fctTemp[serveList[cosNumTwo]].volumn + csm[cosNumTwo].demand < csm[cosNumOne].demand)) {
cosNumOne = random(0, cosNum);
cosNumTwo = random(0, cosNum);
}
fctTemp[serveList[cosNumOne]].volumn = fctTemp[serveList[cosNumOne]].volumn + csm[cosNumOne].demand - csm[cosNumTwo].demand;
fctTemp[serveList[cosNumTwo]].volumn = fctTemp[serveList[cosNumTwo]].volumn + csm[cosNumTwo].demand - csm[cosNumOne].demand;
newList[cosNumOne] = serveList[cosNumTwo];
newList[cosNumTwo] = serveList[cosNumOne];
}
3.2.2 模擬退火
由於多鄰域搜尋容易陷入區域性最優值,因此可以引入模擬退火來跳出區域性最優解,並最終收斂到全域性最優解。
模擬退火可以按照如下步驟進行描述:
給定初溫T=T0,隨機產生出事狀態s=s0,令k=0;
Repeat:
Repeat:
產生新狀態sj=Generate(s)
if min{1, exp[-(C(sj)-C(s))/tk]}>=random[0,1] s=sj;
Until 抽樣穩定準則滿足;
退溫tk+1=update(tk),並令k=k+1;
Until 演算法終止準則滿足
輸出演算法搜尋結果
結合三種鄰域搜尋,在程式碼中模擬退火的過程程式碼如下所示:
while (T_begin > T_end) {
vector<facility> oldTemp = fct;
vector<int> oldOpen = isOpen;
vector<int> serveTemp = serveList;
for (int i = 0; i < iterator; i++) {
// According to serveList.
fctTemp = fct;
vector<int> newSolution = createNewSolution(fctTemp); // A new serveList.
for (int i = 0; i < fctTemp.size(); i++) {
openTemp[i] = (fctTemp[i].volumn == fctTemp[i].Max) ? 0 : 1;
}
int newSolutionLength = getCurrentCost(newSolution, openTemp);
int delta = newSolutionLength - currentBestSolution;
// Annealing.
if (delta >= 0) {
double r = (double)rand() / (RAND_MAX);
// Keep the original solution.
if (exp(-delta / T_begin) <= r) {
// Accept the bad solution.
serveList = newSolution;
fct = fctTemp;
isOpen = openTemp;
currentBestSolution = newSolutionLength;
}
}
// Else Accept the solution.
else {
serveList = newSolution;
fct = fctTemp;
isOpen = openTemp;
currentBestSolution = newSolutionLength;
}
}
if (globalBest > currentBestSolution) {
globalBest = currentBestSolution;
fct = oldTemp;
isOpen = oldOpen;
serveList = serveTemp;
}
cout << T_begin << " 當前全域性最優結果為: " << globalBest << endl;
// Update the temperature.
T_begin *= q_rate;
}
演算法分析
相對於貪心演算法,模擬退火演算法和多鄰域演算法在某些測例中的準度都要高很多,但是程式碼執行的速度會比較慢,而且經驗表明,初溫通常設定為50000,退火率為0.99,內迴圈次數為5000,因此程式碼執行的時間往往會比較長,但是通常如果多鄰域演算法比較好的話,會收斂到一個比較好的結果。
測例分析
測例 | 結果 | 執行時間 | 設施開啟狀態 | 設施分配狀態 |
---|---|---|---|---|
p1 | 9307 | 23.939s | 1 1 1 1 1 1 1 1 1 1 | 9 7 1 6 8 3 2 4 5 6 0 7 7 5 0 3 5 4 9 6 9 8 6 5 8 5 1 6 7 5 5 4 7 3 9 4 9 3 3 4 6 8 1 7 8 3 1 0 6 0 |
p2 | 7942 | 23.73s | 1 0 1 1 1 1 1 1 1 1 | 8 8 3 6 6 8 2 4 4 6 9 0 8 7 9 3 9 0 6 7 6 9 4 9 3 5 5 6 2 5 5 6 0 3 9 9 5 9 2 4 5 3 6 5 7 5 7 0 9 6 |
p3 | 9912 | 24.129s | 1 1 1 1 1 1 1 1 1 1 | 4 8 1 0 3 0 7 6 8 6 9 0 3 9 0 6 4 2 6 7 9 7 5 4 5 9 1 3 0 9 4 9 3 9 9 4 6 8 0 4 2 8 1 3 2 6 4 2 9 5 |
p4 | 11807 | 23.752s | 1 1 1 1 1 1 1 1 1 1 | 4 3 3 6 9 8 6 5 4 3 4 8 6 2 9 1 9 7 4 7 3 8 6 5 5 0 3 5 0 4 9 9 4 2 9 9 7 3 5 4 8 8 5 5 4 5 7 0 9 1 |
p5 | 9228 | 23.93s | 1 1 1 1 1 1 1 1 1 1 | 6 2 1 6 3 8 4 7 4 7 9 8 8 2 8 4 2 0 7 9 5 2 1 4 8 0 5 5 3 0 7 9 5 9 9 1 3 5 8 4 9 9 8 2 7 8 4 5 5 0 |
p6 | 7926 | 24.044s | 1 1 1 1 1 1 1 1 1 1 | 8 2 4 9 6 7 2 6 4 2 9 0 3 8 8 2 9 0 2 7 9 9 6 7 3 3 1 9 8 2 3 6 3 1 7 4 4 8 6 3 5 7 5 5 8 5 4 8 7 0 |
p7 | 9934 | 23.953s | 1 1 1 1 1 1 1 1 1 1 | 7 2 6 0 5 8 2 2 8 8 9 4 5 0 9 5 6 4 7 8 7 6 2 3 5 9 1 9 4 5 2 9 0 9 2 5 7 3 3 4 0 8 6 8 7 0 9 8 7 1 |
p8 | 11927 | 24.141s | 1 1 1 1 1 1 1 1 1 1 | 4 8 6 9 5 7 3 2 4 6 9 8 8 2 8 1 4 0 6 7 3 9 5 1 9 5 1 9 8 7 0 8 0 9 8 4 0 8 3 4 3 7 1 5 2 6 2 4 7 5 |
p9 | 9040 | 23.968s | 1 1 1 1 1 1 1 1 1 1 | 7 8 1 9 3 8 6 4 4 2 2 5 8 6 9 3 4 8 0 4 8 8 3 0 8 5 3 5 2 8 9 3 8 4 9 7 3 8 9 4 6 8 5 5 3 7 7 9 8 7 |
p10 | 7726 | 23.709s | 1 1 1 1 1 1 1 1 1 1 | 8 8 1 6 3 4 4 9 6 1 0 8 3 7 8 9 6 1 9 4 3 8 6 7 2 5 6 2 9 5 3 9 6 3 9 6 4 8 3 6 4 8 6 4 0 8 9 8 4 0 |
p11 | 9726 | 24.315s | 1 1 1 1 1 1 1 1 1 1 | 7 9 4 8 5 9 2 4 6 4 9 3 9 3 8 2 8 2 9 8 8 8 7 5 2 9 8 5 8 8 9 6 7 5 9 7 1 3 3 7 5 8 8 5 9 0 5 3 4 7 |
p12 | 11691 | 23.38s | 1 1 0 1 1 1 1 1 1 1 | 5 8 8 6 3 9 8 4 4 5 9 5 3 6 0 8 7 0 3 0 3 8 9 9 6 7 1 6 3 5 9 4 8 3 8 6 9 4 8 4 6 8 1 0 9 7 9 5 8 5 |
p13 | 9805 | 28.876s | 1 1 0 0 0 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 | 16 18 19 10 7 18 17 13 19 17 13 19 19 16 19 15 14 10 19 12 17 15 15 14 9 18 16 17 19 12 18 15 12 18 16 16 15 1 15 19 14 17 7 0 14 19 14 16 18 9 |
p14 | 8244 | 28.253s | 1 0 0 0 1 0 0 1 0 1 1 0 0 1 1 1 1 1 1 1 | 16 16 14 10 16 18 19 18 16 19 10 4 18 10 13 17 15 15 17 14 17 15 15 19 15 17 4 17 17 19 10 7 13 18 18 13 14 18 7 18 19 0 19 19 17 4 14 10 18 9 |
p15 | 9972 | 28.289s | 0 1 1 0 1 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 | 16 18 16 10 19 17 17 17 14 17 16 10 1 14 14 11 15 18 14 11 17 16 15 19 12 19 18 4 2 15 10 11 4 19 19 17 11 19 15 16 14 16 15 16 19 18 12 4 19 18 |
p16 | 13022 | 28.272s | 1 0 1 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 | 16 17 18 18 19 14 19 16 16 18 16 19 17 19 0 19 15 19 13 14 12 18 15 17 15 13 13 17 18 12 12 15 16 10 11 14 16 16 18 4 17 4 18 15 2 17 18 15 17 19 |
p17 | 9585 | 28.107s | 0 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 | 18 12 10 18 1 18 4 14 14 17 15 17 19 16 14 17 15 10 19 16 17 15 14 11 13 17 16 17 12 12 18 19 14 16 19 10 19 19 13 15 15 18 5 16 14 17 14 5 18 15 |
p18 | 7632 | 26.701s | 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 | 18 17 10 18 14 19 17 19 18 17 16 19 12 10 13 14 18 19 11 13 12 13 14 19 16 1 14 16 19 12 13 15 19 16 14 10 11 18 18 16 16 15 5 19 13 18 17 17 15 15 |
p19 | 10906 | 27.243s | 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 | 16 12 17 14 17 10 17 18 18 15 19 4 1 15 13 19 7 15 18 18 19 12 15 16 10 17 12 17 19 17 16 18 16 7 10 14 14 19 19 13 14 15 14 10 12 18 15 18 19 14 |
p20 | 12757 | 27.153s | 1 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 | 19 11 14 10 17 18 17 15 14 17 15 4 16 13 13 17 14 13 12 17 17 15 15 19 4 14 11 17 3 18 13 19 1 16 19 14 16 19 9 16 12 0 19 18 17 5 15 18 18 13 |
p21 | 9871 | 29.177s | 1 0 0 0 1 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 | 16 17 10 18 14 18 18 18 13 19 16 4 19 10 14 17 19 18 16 18 19 15 17 19 9 13 18 18 14 17 13 16 19 16 17 15 13 18 19 17 14 0 15 0 17 18 15 14 19 17 |
p22 | 7812 | 29.165s | 0 1 0 0 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1 | 16 18 16 17 19 19 16 19 17 17 6 4 1 15 13 19 16 15 18 17 15 19 15 19 13 14 16 18 19 19 13 18 13 14 11 18 11 17 19 13 10 15 5 17 15 18 18 10 13 17 |
p23 | 9943 | 28.862s | 0 0 0 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 | 19 17 16 17 12 18 17 10 18 17 16 10 18 14 19 10 15 17 15 18 14 15 15 19 19 17 16 17 19 17 15 15 13 16 3 13 15 15 19 18 18 16 10 16 16 18 18 18 19 19 |
p24 | 11893 | 29.007s | 0 1 0 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 | 13 17 10 10 17 15 17 18 14 16 15 13 19 16 19 14 18 1 4 19 18 15 15 8 10 17 16 11 19 19 19 7 19 15 19 16 17 16 19 13 18 16 15 16 12 17 17 18 4 18 |
p25 | 15807 | 59.412s | 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 | 28 29 28 20 20 17 11 17 28 16 26 28 20 29 25 24 28 27 5 29 19 28 29 27 28 28 14 28 5 29 29 24 8 27 20 19 25 24 27 27 17 29 25 20 24 29 29 27 29 8 28 14 29 24 24 20 19 20 11 20 11 5 28 25 11 27 24 27 14 19 20 24 11 25 29 20 26 20 19 20 28 25 11 14 27 17 29 24 20 24 2 11 28 11 17 24 27 19 28 18 8 8 25 25 28 17 17 27 27 28 14 24 28 27 25 27 5 29 27 17 26 3 29 20 27 28 25 17 17 29 27 8 24 29 28 28 25 14 20 14 20 28 29 5 8 29 25 24 25 5 |
p26 |