目前在物流,企業用工等領域,都有着大量的經過算法對接到的訂單進行智能分配的需求。本文模擬的是用戶下訂單,而後商家接到訂單,由配送人員進行派送的場景。在實際的應用中相似於百度外賣等有着很是多的實際應用。這種問題由於算法的複雜度過高,很難在短的時間週期內求解成功,因此有了像遺傳算法,退火算法等啓發式算法,以便在短的時間內可以求出近似的最優解。算法
本文模擬8個騎士,40個訂單和40個商家進行計算。jsp
目前在物流,企業用工等領域,都有着大量的經過算法對接到的訂單進行智能分配的需求。首先設計bean,商家接到訂單的bean,這裏須要商家和訂單的座標信息。this
1spa 2設計 3code 4blog 5ip 6ci 7get 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
模擬40個商家接到40個訂單,其中商家和訂單均可以是同一座標位置,後續會考慮將座標相近的位置進行聚類計算。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
而後將商家和訂單加入到集合中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
baoList.add(bao1);
baoList.add(bao2);
baoList.add(bao3);
baoList.add(bao4);
baoList.add(bao5);
baoList.add(bao6);
baoList.add(bao7);
baoList.add(bao8);
baoList.add(bao9);
baoList.add(bao10);
baoList.add(bao11);
baoList.add(bao12);
baoList.add(bao13);
baoList.add(bao14);
baoList.add(bao15);
baoList.add(bao16);
baoList.add(bao17);
baoList.add(bao18);
baoList.add(bao19);
baoList.add(bao20);
baoList.add(bao21);
baoList.add(bao22);
baoList.add(bao23);
baoList.add(bao24);
baoList.add(bao25);
baoList.add(bao26);
baoList.add(bao27);
baoList.add(bao28);
baoList.add(bao29);
baoList.add(bao30);
baoList.add(bao31);
baoList.add(bao32);
baoList.add(bao33);
baoList.add(bao34);
baoList.add(bao35);
baoList.add(bao36);
baoList.add(bao37);
baoList.add(bao38);
baoList.add(bao39);
baoList.add(bao40);
而後將商家和訂單加入到集合中。
接着模擬騎士,假設騎士位置散落在不一樣的座標點。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
模擬8個騎士
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
將模擬數據代入算法
1 2 3 4 5 6 7 8 9 |
|
查看運行結果,可知,迭代了1024次,耗時10秒。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
分配的結果及cost計算結果爲:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
|
這樣就能夠獲得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
|
配送人員的配送順序。
目前算法中使用的是歐式距離來進行兩個點之間距離的計算,運算的時間隨着單子數量的增長會加長,而且在某些狀況下還會有不少的約束條件,這些都是下一步算法須要改進的重點。