智能分单算法

智能分单算法

算法描述

目前在物流,企业用工等领域,都有着大量的通过算法对接到的订单进行智能分配的需求。本文模拟的是用户下订单,然后商家接到订单,由配送人员进行派送的场景。在实际的应用中类似于百度外卖等有着非常多的实际应用。这种问题因为算法的复杂度太高,很难在短的时间周期内求解成功,所以有了像遗传算法,退火算法等启发式算法,以便在短的时间内能够求出近似的最优解。

image

本文模拟8个骑士,40个订单和40个商家进行计算。

算法描述

目前在物流,企业用工等领域,都有着大量的通过算法对接到的订单进行智能分配的需求。首先设计bean,商家接到订单的bean,这里需要商家和订单的坐标信息。

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
public  class  BusinessmenAndOrder {
     
     private  String id; //job标号
     private  String businessX; //商家坐标x
     private  String businessy; //商家坐标y
     private  String orderx; //订单坐标x
     private  String ordery; //订单坐标y
     
     public  BusinessmenAndOrder(){
         
     }
     
     public  BusinessmenAndOrder(String id,String businessX,String businessy,String orderx,String ordery){
         this .id=id;
         this .businessX=businessX;
         this .businessy=businessy;
         this .orderx=orderx;
         this .ordery=ordery;
     }
     
     public  String getId() {
         return  id;
     }
     public  void  setId(String id) {
         this .id = id;
     }
     public  String getBusinessX() {
         return  businessX;
     }
     public  void  setBusinessX(String businessX) {
         this .businessX = businessX;
     }
     public  String getBusinessy() {
         return  businessy;
     }
     public  void  setBusinessy(String businessy) {
         this .businessy = businessy;
     }
     public  String getOrderx() {
         return  orderx;
     }
     public  void  setOrderx(String orderx) {
         this .orderx = orderx;
     }
     public  String getOrdery() {
         return  ordery;
     }
     public  void  setOrdery(String ordery) {
         this .ordery = ordery;
     }
 
}

模拟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
// 得到取件坐标和送达坐标(相当于商家和订单)
     List<BusinessmenAndOrder> baoList = new  ArrayList<BusinessmenAndOrder>();
     BusinessmenAndOrder bao1 = new  BusinessmenAndOrder( "商家订单1" , "137.45" , "554.19" , "138.83" , "557.56" );
     BusinessmenAndOrder bao2 = new  BusinessmenAndOrder( "商家订单2" , "840.6" , "532.46" , "139.37" , "558.54" );
     BusinessmenAndOrder bao3 = new  BusinessmenAndOrder( "商家订单3" , "157.38" , "573.96" , "359.96" , "794.99" );
     BusinessmenAndOrder bao4 = new  BusinessmenAndOrder( "商家订单4" , "120.45" , "604.18" , "193.49" , "571.18" );
     BusinessmenAndOrder bao5 = new  BusinessmenAndOrder( "商家订单5" , "137.50" , "564.16" , "357.33" , "784.03" );
     BusinessmenAndOrder bao6 = new  BusinessmenAndOrder( "商家订单6" , "131.90" , "570.68" , "118.60" , "597.49" );
     BusinessmenAndOrder bao7 = new  BusinessmenAndOrder( "商家订单7" , "150.21" , "557.68" , "140.98" , "573.79" );
     BusinessmenAndOrder bao8 = new  BusinessmenAndOrder( "商家订单8" , "115.13" , "585.43" , "115.01" , "596.83" );
     BusinessmenAndOrder bao9 = new  BusinessmenAndOrder( "商家订单9" , "120.13" , "641.55" , "141.20" , "593.01" );
     BusinessmenAndOrder bao10 = new  BusinessmenAndOrder( "商家订单10" , "150.06" , "575.78" , "355.11" , "784.26" );
     BusinessmenAndOrder bao11 = new  BusinessmenAndOrder( "商家订单11" , "114.50" , "588.19" , "119.16" , "583.38" );
     BusinessmenAndOrder bao12 = new  BusinessmenAndOrder( "商家订单12" , "137.28" , "563.04" , "355.24" , "790.13" );
     BusinessmenAndOrder bao13 = new  BusinessmenAndOrder( "商家订单13" , "151.04" , "609.23" , "179.37" , "570.66" );
     BusinessmenAndOrder bao14 = new  BusinessmenAndOrder( "商家订单14" , "113.73" , "583.88" , "139.83" , "538.04" );
     BusinessmenAndOrder bao15 = new  BusinessmenAndOrder( "商家订单15" , "185.75" , "551.86" , "187.18" , "543.81" );
     BusinessmenAndOrder bao16 = new  BusinessmenAndOrder( "商家订单16" , "116.39" , "500.71" , "173.63" , "583.75" );
     BusinessmenAndOrder bao17 = new  BusinessmenAndOrder( "商家订单17" , "112.73" , "534.10" , "108.60" , "604.41" );
     BusinessmenAndOrder bao18 = new  BusinessmenAndOrder( "商家订单18" , "137.66" , "590.41" , "139.63" , "577.69" );
     BusinessmenAndOrder bao19 = new  BusinessmenAndOrder( "商家订单19" , "161.38" , "558.01" , "161.83" , "560.24" );
     BusinessmenAndOrder bao20 = new  BusinessmenAndOrder( "商家订单20" , "137.28" , "561.46" , "143.01" , "616.94" );
     BusinessmenAndOrder bao21 = new  BusinessmenAndOrder( "商家订单21" , "128.48" , "570.59" , "135.86" , "597.34" );
     BusinessmenAndOrder bao22 = new  BusinessmenAndOrder( "商家订单22" , "136.45" , "564.88" , "139.55" , "558.59" );
     BusinessmenAndOrder bao23 = new  BusinessmenAndOrder( "商家订单23" , "128.96" , "568.38" , "139.37" , "559.08" );
     BusinessmenAndOrder bao24 = new  BusinessmenAndOrder( "商家订单24" , "133.41" , "581.50" , "357.09" , "789.24" );
     BusinessmenAndOrder bao25 = new  BusinessmenAndOrder( "商家订单25" , "134.83" , "573.03" , "136.14" , "578.20" );
     BusinessmenAndOrder bao26 = new  BusinessmenAndOrder( "商家订单26" , "146.76" , "516.91" , "165.01" , "483.61" );
     BusinessmenAndOrder bao27 = new  BusinessmenAndOrder( "商家订单27" , "127.41" , "634.78" , "152.30" , "598.38" );
     BusinessmenAndOrder bao28 = new  BusinessmenAndOrder( "商家订单28" , "137.48" , "549.33" , "141.20" , "561.10" );
     BusinessmenAndOrder bao29 = new  BusinessmenAndOrder( "商家订单29" , "178.75" , "595.65" , "204.53" , "619.03" );
     BusinessmenAndOrder bao30 = new  BusinessmenAndOrder( "商家订单30" , "97.72" , "564.24" , "640.4" , "556.01" );
     BusinessmenAndOrder bao31 = new  BusinessmenAndOrder( "商家订单31" , "628.48" , "260.59" , "125.86" , "497.34" );
     BusinessmenAndOrder bao32 = new  BusinessmenAndOrder( "商家订单32" , "336.45" , "364.88" , "439.55" , "458.59" );
     BusinessmenAndOrder bao33 = new  BusinessmenAndOrder( "商家订单33" , "228.96" , "268.38" , "239.37" , "559.08" );
     BusinessmenAndOrder bao34 = new  BusinessmenAndOrder( "商家订单34" , "153.41" , "291.50" , "257.09" , "489.24" );
     BusinessmenAndOrder bao35 = new  BusinessmenAndOrder( "商家订单35" , "136.83" , "363.03" , "276.14" , "168.20" );
     BusinessmenAndOrder bao36 = new  BusinessmenAndOrder( "商家订单36" , "446.76" , "216.91" , "465.01" , "283.61" );
     BusinessmenAndOrder bao37 = new  BusinessmenAndOrder( "商家订单37" , "527.41" , "674.78" , "158.30" , "528.38" );
     BusinessmenAndOrder bao38 = new  BusinessmenAndOrder( "商家订单38" , "637.48" , "549.33" , "191.20" , "591.10" );
     BusinessmenAndOrder bao39 = new  BusinessmenAndOrder( "商家订单39" , "637.48" , "549.33" , "291.20" , "491.10" );
     BusinessmenAndOrder bao40 = new  BusinessmenAndOrder( "商家订单40" , "637.48" , "549.33" , "691.20" , "291.10" );

然后将商家和订单加入到集合中。

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
public  class  Driver {
     private  String driverId; //骑士编号
     private  String driverx; //骑士坐标x
     private  String drivery; //骑士坐标y
     public  Driver(){
         
     }
     public  Driver(String driverId,String driverx,String drivery){
         this .driverId=driverId;
         this .driverx=driverx;
         this .drivery=drivery;
     }
     public  String getDriverId() {
         return  driverId;
     }
     public  void  setDriverId(String driverId) {
         this .driverId = driverId;
     }
     public  String getDriverx() {
         return  driverx;
     }
     public  void  setDriverx(String driverx) {
         this .driverx = driverx;
     }
     public  String getDrivery() {
         return  drivery;
     }
     public  void  setDrivery(String drivery) {
         this .drivery = drivery;
     }
}

 

模拟8个骑士

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 模拟骑士
         List<Driver> driveList = new  ArrayList<Driver>();
         Driver driver1 = new  Driver( "driveA" , "137.50" , "575.78" );
         Driver driver2 = new  Driver( "driveB" , "151.04" , "534.10" );
         Driver driver3 = new  Driver( "driveC" , "137.28" , "558.01" );
         Driver driver4 = new  Driver( "driveD" , "127.41" , "634.78" );
         Driver driver5 = new  Driver( "driveE" , "46.76" , "285.75" );
         Driver driver6 = new  Driver( "driveF" , "176.76" , "485.75" );
         Driver driver7 = new  Driver( "driveG" , "386.76" , "405.75" );
         Driver driver8 = new  Driver( "driveH" , "246.76" , "685.75" );
 
         driveList.add(driver1);
         driveList.add(driver2);
         driveList.add(driver3);
         driveList.add(driver4);
         driveList.add(driver5);
         driveList.add(driver6);
         driveList.add(driver7);
         driveList.add(driver8);

 

将模拟数据代入算法

1
2
3
4
5
6
7
8
9
List<DistributionSep> distList = new  ArrayList<DistributionSep>();
         distList = autoSeperateOrder(baoList, driveList);
         for  (DistributionSep distribution : distList) {
             System. out .println( "配送人员 " +distribution.getDriverName());
             List<OrderSort> orderSet = distribution.getDist();
             for  (OrderSort order : orderSet) {
                 System. out .println(order.getOrder() + " "  + order.getPors() + " "  + order.getBussinessOrder());
             }
         }

结果查看

查看运行结果,可知,迭代了1024次,耗时10秒。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2017-06-30 14:49:38,888 INFO  [main] problem.VehicleRoutingProblem - setup problem: [fleetSize=FINITE][#jobs=40][#vehicles=8][#vehicleTypes=1][transportCost=[name=crowFlyCosts]][activityCosts=com.graphhopper.jsprit.core.problem.cost.WaitingTimeCosts@47d90b9e]
2017-06-30 14:49:38,970 INFO  [main] algorithm.VehicleRoutingAlgorithm - algorithm starts: [maxIterations=2000]
2017-06-30 14:49:38,972 INFO  [main] algorithm.InsertionInitialSolutionFactory - create initial solution
2017-06-30 14:49:39,823 INFO  [main] algorithm.VehicleRoutingAlgorithm - iterations start
2017-06-30 14:49:39,825 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 1
2017-06-30 14:49:39,843 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 2
2017-06-30 14:49:39,910 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 4
2017-06-30 14:49:40,032 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 8
2017-06-30 14:49:40,142 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 16
2017-06-30 14:49:41,014 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 32
2017-06-30 14:49:41,194 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 64
2017-06-30 14:49:41,728 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 128
2017-06-30 14:49:42,439 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 256
2017-06-30 14:49:43,599 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 512
2017-06-30 14:49:45,723 INFO  [main] algorithm.VehicleRoutingAlgorithm$Counter - iterations 1024
2017-06-30 14:49:49,703 INFO  [main] algorithm.VehicleRoutingAlgorithm - iterations end at 2000 iterations
2017-06-30 14:49:49,703 INFO  [main] algorithm.VehicleRoutingAlgorithm - took 10.732 seconds

分配的结果及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
+--------------------------------------------------------------------------------------------------------------------------------+
| detailed solution                                                                                                              |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| route   | vehicle              | activity              | job             | arrTime         | endTime         | costs           |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| 1       | driveA               | start                 | -               | undef           | 0               | 0               |
| 1       | driveA               | pickupShipment        | 商家订单25          | 4               | 4               | 4               |
| 1       | driveA               | deliverShipment       | 商家订单25          | 9               | 9               | 9               |
| 1       | driveA               | pickupShipment        | 商家订单21          | 20              | 20              | 20              |
| 1       | driveA               | pickupShipment        | 商家订单23          | 22              | 22              | 22              |
| 1       | driveA               | pickupShipment        | 商家订单22          | 30              | 30              | 30              |
| 1       | driveA               | pickupShipment        | 商家订单20          | 34              | 34              | 34              |
| 1       | driveA               | deliverShipment       | 商家订单22          | 38              | 38              | 38              |
| 1       | driveA               | deliverShipment       | 商家订单23          | 38              | 38              | 38              |
| 1       | driveA               | pickupShipment        | 商家订单18          | 70              | 70              | 70              |
| 1       | driveA               | deliverShipment       | 商家订单18          | 82              | 82              | 82              |
| 1       | driveA               | deliverShipment       | 商家订单21          | 102             | 102             | 102             |
| 1       | driveA               | deliverShipment       | 商家订单20          | 123             | 123             | 123             |
| 1       | driveA               | end                   | -               | 123             | undef           | 123             |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| 2       | driveB               | start                 | -               | undef           | 0               | 0               |
| 2       | driveB               | pickupShipment        | 商家订单7           | 24              | 24              | 24              |
| 2       | driveB               | deliverShipment       | 商家订单7           | 42              | 42              | 42              |
| 2       | driveB               | pickupShipment        | 商家订单19          | 68              | 68              | 68              |
| 2       | driveB               | deliverShipment       | 商家订单19          | 70              | 70              | 70              |
| 2       | driveB               | pickupShipment        | 商家订单15          | 96              | 96              | 96              |
| 2       | driveB               | deliverShipment       | 商家订单15          | 104             | 104             | 104             |
| 2       | driveB               | end                   | -               | 104             | undef           | 104             |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| 3       | driveC               | start                 | -               | undef           | 0               | 0               |
| 3       | driveC               | pickupShipment        | 商家订单1           | 4               | 4               | 4               |
| 3       | driveC               | pickupShipment        | 商家订单28          | 9               | 9               | 9               |
| 3       | driveC               | deliverShipment       | 商家订单1           | 17              | 17              | 17              |
| 3       | driveC               | deliverShipment       | 商家订单28          | 21              | 21              | 21              |
| 3       | driveC               | pickupShipment        | 商家订单12          | 26              | 26              | 26              |
| 3       | driveC               | pickupShipment        | 商家订单5           | 27              | 27              | 27              |
| 3       | driveC               | pickupShipment        | 商家订单6           | 35              | 35              | 35              |
| 3       | driveC               | pickupShipment        | 商家订单8           | 58              | 58              | 58              |
| 3       | driveC               | pickupShipment        | 商家订单11          | 61              | 61              | 61              |
| 3       | driveC               | deliverShipment       | 商家订单8           | 69              | 69              | 69              |
| 3       | driveC               | deliverShipment       | 商家订单6           | 73              | 73              | 73              |
| 3       | driveC               | deliverShipment       | 商家订单11          | 87              | 87              | 87              |
| 3       | driveC               | pickupShipment        | 商家订单24          | 101             | 101             | 101             |
| 3       | driveC               | pickupShipment        | 商家订单10          | 119             | 119             | 119             |
| 3       | driveC               | pickupShipment        | 商家订单3           | 127             | 127             | 127             |
| 3       | driveC               | pickupShipment        | 商家订单29          | 157             | 157             | 157             |
| 3       | driveC               | deliverShipment       | 商家订单29          | 192             | 192             | 192             |
| 3       | driveC               | deliverShipment       | 商家订单10          | 415             | 415             | 415             |
| 3       | driveC               | deliverShipment       | 商家订单5           | 418             | 418             | 418             |
| 3       | driveC               | deliverShipment       | 商家订单24          | 423             | 423             | 423             |
| 3       | driveC               | deliverShipment       | 商家订单12          | 425             | 425             | 425             |
| 3       | driveC               | deliverShipment       | 商家订单3           | 432             | 432             | 432             |
| 3       | driveC               | end                   | -               | 432             | undef           | 432             |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| 4       | driveD               | start                 | -               | undef           | 0               | 0               |
| 4       | driveD               | pickupShipment        | 商家订单27          | 0               | 0               | 0               |
| 4       | driveD               | pickupShipment        | 商家订单9           | 10              | 10              | 10              |
| 4       | driveD               | pickupShipment        | 商家订单13          | 55              | 55              | 55              |
| 4       | driveD               | deliverShipment       | 商家订单27          | 66              | 66              | 66              |
| 4       | driveD               | deliverShipment       | 商家订单9           | 78              | 78              | 78              |
| 4       | driveD               | pickupShipment        | 商家订单14          | 107             | 107             | 107             |
| 4       | driveD               | pickupShipment        | 商家订单30          | 132             | 132             | 132             |
| 4       | driveD               | deliverShipment       | 商家订单14          | 182             | 182             | 182             |
| 4       | driveD               | deliverShipment       | 商家订单13          | 233             | 233             | 233             |
| 4       | driveD               | pickupShipment        | 商家订单37          | 596             | 596             | 596             |
| 4       | driveD               | deliverShipment       | 商家订单30          | 760             | 760             | 760             |
| 4       | driveD               | pickupShipment        | 商家订单40          | 768             | 768             | 768             |
| 4       | driveD               | pickupShipment        | 商家订单39          | 768             | 768             | 768             |
| 4       | driveD               | pickupShipment        | 商家订单38          | 768             | 768             | 768             |
| 4       | driveD               | pickupShipment        | 商家订单2           | 971             | 971             | 971             |
| 4       | driveD               | deliverShipment       | 商家订单40          | 1255            | 1255            | 1255            |
| 4       | driveD               | pickupShipment        | 商家订单31          | 1325            | 1325            | 1325            |
| 4       | driveD               | deliverShipment       | 商家订单39          | 1734            | 1734            | 1734            |
| 4       | driveD               | deliverShipment       | 商家订单38          | 1875            | 1875            | 1875            |
| 4       | driveD               | deliverShipment       | 商家订单2           | 1936            | 1936            | 1936            |
| 4       | driveD               | deliverShipment       | 商家订单37          | 1972            | 1972            | 1972            |
| 4       | driveD               | deliverShipment       | 商家订单31          | 2017            | 2017            | 2017            |
| 4       | driveD               | end                   | -               | 2017            | undef           | 2017            |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| 5       | driveE               | start                 | -               | undef           | 0               | 0               |
| 5       | driveE               | pickupShipment        | 商家订单35          | 119             | 119             | 119             |
| 5       | driveE               | pickupShipment        | 商家订单34          | 192             | 192             | 192             |
| 5       | driveE               | pickupShipment        | 商家订单33          | 271             | 271             | 271             |
| 5       | driveE               | deliverShipment       | 商家订单35          | 382             | 382             | 382             |
| 5       | driveE               | pickupShipment        | 商家订单36          | 559             | 559             | 559             |
| 5       | driveE               | deliverShipment       | 商家订单36          | 628             | 628             | 628             |
| 5       | driveE               | deliverShipment       | 商家订单34          | 921             | 921             | 921             |
| 5       | driveE               | deliverShipment       | 商家订单33          | 993             | 993             | 993             |
| 5       | driveE               | end                   | -               | 993             | undef           | 993             |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| 6       | driveF               | start                 | -               | undef           | 0               | 0               |
| 6       | driveF               | pickupShipment        | 商家订单26          | 43              | 43              | 43              |
| 6       | driveF               | deliverShipment       | 商家订单26          | 81              | 81              | 81              |
| 6       | driveF               | pickupShipment        | 商家订单16          | 133             | 133             | 133             |
| 6       | driveF               | pickupShipment        | 商家订单17          | 166             | 166             | 166             |
| 6       | driveF               | deliverShipment       | 商家订单17          | 237             | 237             | 237             |
| 6       | driveF               | pickupShipment        | 商家订单4           | 249             | 249             | 249             |
| 6       | driveF               | deliverShipment       | 商家订单16          | 306             | 306             | 306             |
| 6       | driveF               | deliverShipment       | 商家订单4           | 329             | 329             | 329             |
| 6       | driveF               | end                   | -               | 329             | undef           | 329             |
+---------+----------------------+-----------------------+-----------------+-----------------+-----------------+-----------------+
| 7       | driveG               | start                 | -               | undef           | 0               | 0               |
| 7       | driveG               | pickupShipment        | 商家订单32          | 65              | 65              | 65              |
| 7       | driveG               | deliverShipment       | 商家订单32          | 204             | 204             | 204             |
| 7       | driveG               | end                   | -               | 204             | undef           | 204             |
+--------------------------------------------------------------------------------------------------------------------------------+

 

这样就可以得到

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
配送人员 driveA
1 取 商家订单25
2 送 商家订单25
3 取 商家订单21
4 取 商家订单23
5 取 商家订单22
6 取 商家订单20
7 送 商家订单22
8 送 商家订单23
9 取 商家订单18
10 送 商家订单18
11 送 商家订单21
12 送 商家订单20
配送人员 driveB
1 取 商家订单7
2 送 商家订单7
3 取 商家订单19
4 送 商家订单19
5 取 商家订单15
6 送 商家订单15
配送人员 driveC
1 取 商家订单1
2 取 商家订单28
3 送 商家订单1
4 送 商家订单28
5 取 商家订单12
6 取 商家订单5
7 取 商家订单6
8 取 商家订单8
9 取 商家订单11
10 送 商家订单8
11 送 商家订单6
12 送 商家订单11
13 取 商家订单24
14 取 商家订单10
15 取 商家订单3
16 取 商家订单29
17 送 商家订单29
18 送 商家订单10
19 送 商家订单5
20 送 商家订单24
21 送 商家订单12
22 送 商家订单3
配送人员 driveD
1 取 商家订单27
2 取 商家订单9
3 取 商家订单13
4 送 商家订单27
5 送 商家订单9
6 取 商家订单14
7 取 商家订单30
8 送 商家订单14
9 送 商家订单13
10 取 商家订单37
11 送 商家订单30
12 取 商家订单40
13 取 商家订单39
14 取 商家订单38
15 取 商家订单2
16 送 商家订单40
17 取 商家订单31
18 送 商家订单39
19 送 商家订单38
20 送 商家订单2
21 送 商家订单37
22 送 商家订单31
配送人员 driveE
1 取 商家订单35
2 取 商家订单34
3 取 商家订单33
4 送 商家订单35
5 取 商家订单36
6 送 商家订单36
7 送 商家订单34
8 送 商家订单33
配送人员 driveF
1 取 商家订单26
2 送 商家订单26
3 取 商家订单16
4 取 商家订单17
5 送 商家订单17
6 取 商家订单4
7 送 商家订单16
8 送 商家订单4
配送人员 driveG
1 取 商家订单32
2 送 商家订单32

 

配送人员的配送顺序。

总结

目前算法中使用的是欧式距离来进行两个点之间距离的计算,运算的时间随着单子数量的增加会加长,并且在某些情况下还会有很多的约束条件,这些都是下一步算法需要改进的重点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值