ALIVE321 / TaxiSharing

Course Project.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Task1

Question 1

双拼显然:

编号 序列顺序 累计次数
1 $p_cp_o^1p_o^2p_d^1p_d^2$ 4
2 $p_cp_o^1p_o^2p_d^2p_d^1$ 6
3 $p_cp_o^2p_o^1p_d^2p_d^1$ 9
4 $p_cp_o^2p_o^1p_d^1p_d^2$ 10

三拼的判断方式是:回溯法生成所有可能的序列,在每一步选择新操作(某人上车或下车)时,判断车上是否还有人。

编号 序列顺序 累计次数
1 $pcp_o^1p_o^2p_o^3p_d^1p_d^2p_d^3$ 6
2 $pcp_o^1p_o^2p_o^3p_d^1p_d^3p_d^2$ 8
3 $pcp_o^1p_o^2p_o^3p_d^2p_d^3p_d^1$ 10
4 $pcp_o^1p_o^2p_o^3p_d^2p_d^1p_d^3$ 11
5 $pcp_o^1p_o^2p_o^3p_d^3p_d^1p_d^2$ 12
6 $pcp_o^1p_o^2p_o^3p_d^3p_d^2p_d^1$ 12
7 $pcp_o^1p_o^2p_d^1p_o^3p_d^2p_d^3$ 14
8 $pcp_o^1p_o^2p_d^1p_o^3p_d^3p_d^2$ 14
9 $pcp_o^1p_o^2p_d^2p_o^3p_d^3p_d^1$ 16
10 $pcp_o^1p_o^2p_d^2p_o^3p_d^1p_d^3$ 16
11 $pcp_o^1p_o^3p_d^3p_o^2p_d^1p_d^2$ 18
12 $pcp_o^1p_o^3p_d^3p_o^2p_d^2p_d^1$ 18
13 $pcp_o^1p_o^3p_d^1p_o^2p_d^2p_d^3$ 19
14 $pcp_o^1p_o^3p_d^1p_o^2p_d^3p_d^2$ 20
15 $pcp_o^1p_o^3p_o^2p_d^2p_d^3p_d^1$ 21
16 $pcp_o^1p_o^3p_o^2p_d^2p_d^1p_d^3$ 21
17 $pcp_o^1p_o^3p_o^2p_d^3p_d^1p_d^2$ 21
18 $pcp_o^1p_o^3p_o^2p_d^3p_d^2p_d^1$ 21
19 $pcp_o^1p_o^3p_o^2p_d^1p_d^2p_d^3$ 21
20 $pcp_o^1p_o^3p_o^2p_d^1p_d^3p_d^2$ 21
21 $pcp_o^2p_o^3p_d^2p_o^1p_d^3p_d^1$ 24
22 $pcp_o^2p_o^3p_d^2p_o^1p_d^1p_d^3$ 25
23 $pcp_o^2p_o^3p_d^3p_o^1p_d^1p_d^2$ 26
24 $pcp_o^2p_o^3p_d^3p_o^1p_d^2p_d^1$ 27
25 $pcp_o^2p_o^3p_o^1p_d^1p_d^2p_d^3$ 28
26 $pcp_o^2p_o^3p_o^1p_d^1p_d^3p_d^2$ 28
27 $pcp_o^2p_o^3p_o^1p_d^2p_d^3p_d^1$ 28
28 $pcp_o^2p_o^3p_o^1p_d^2p_d^1p_d^3$ 28
29 $pcp_o^2p_o^3p_o^1p_d^3p_d^1p_d^2$ 28
30 $pcp_o^2p_o^3p_o^1p_d^3p_d^2p_d^1$ 28
31 $pcp_o^2p_o^1p_d^1p_o^3p_d^2p_d^3$ 29
32 $pcp_o^2p_o^1p_d^1p_o^3p_d^3p_d^2$ 29
33 $pcp_o^2p_o^1p_d^2p_o^3p_d^3p_d^1$ 29
34 $pcp_o^2p_o^1p_d^2p_o^3p_d^1p_d^3$ 29
35 $pcp_o^2p_o^1p_o^3p_d^3p_d^1p_d^2$ 29
36 $pcp_o^2p_o^1p_o^3p_d^3p_d^2p_d^1$ 29
37 $pcp_o^2p_o^1p_o^3p_d^1p_d^2p_d^3$ 29
38 $pcp_o^2p_o^1p_o^3p_d^1p_d^3p_d^2$ 29
39 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 29
40 $pcp_o^2p_o^1p_o^3p_d^2p_d^1p_d^3$ 29
41 $pcp_o^3p_o^1p_d^3p_o^2p_d^1p_d^2$ 30
42 $pcp_o^3p_o^1p_d^3p_o^2p_d^2p_d^1$ 30
43 $pcp_o^3p_o^1p_d^1p_o^2p_d^2p_d^3$ 30
44 $pcp_o^3p_o^1p_d^1p_o^2p_d^3p_d^2$ 30
45 $pcp_o^3p_o^1p_o^2p_d^2p_d^3p_d^1$ 30
46 $pcp_o^3p_o^1p_o^2p_d^2p_d^1p_d^3$ 30
47 $pcp_o^3p_o^1p_o^2p_d^3p_d^1p_d^2$ 30
48 $pcp_o^3p_o^1p_o^2p_d^3p_d^2p_d^1$ 30
49 $pcp_o^3p_o^1p_o^2p_d^1p_d^2p_d^3$ 30
50 $pcp_o^3p_o^1p_o^2p_d^1p_d^3p_d^2$ 30
51 $pcp_o^3p_o^2p_d^2p_o^1p_d^3p_d^1$ 30
52 $pcp_o^3p_o^2p_d^2p_o^1p_d^1p_d^3$ 30
53 $pcp_o^3p_o^2p_d^3p_o^1p_d^1p_d^2$ 30
54 $pcp_o^3p_o^2p_d^3p_o^1p_d^2p_d^1$ 30
55 $pcp_o^3p_o^2p_o^1p_d^1p_d^2p_d^3$ 30
56 $pcp_o^3p_o^2p_o^1p_d^1p_d^3p_d^2$ 30
57 $pcp_o^3p_o^2p_o^1p_d^2p_d^3p_d^1$ 30
58 $pcp_o^3p_o^2p_o^1p_d^2p_d^1p_d^3$ 30
59 $pcp_o^3p_o^2p_o^1p_d^3p_d^1p_d^2$ 30
60 $pcp_o^3p_o^2p_o^1p_d^3p_d^2p_d^1$ 30

Question 2

编号 场景 序列顺序 $S^*$长度 计算次数
1 双拼 $pcp_o^2p_o^1p_d^2p_d^1$ 16238.69 10
2 双拼 $pcp_o^1p_o^2p_d^2p_d^1$ 22143.40 10
3 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 23042.19 10
4 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 10417.09 10
5 双拼 $pcp_o^2p_o^1p_d^1p_d^2$ 16918.74 10
6 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 13903.36 30
7 三拼 $pcp_o^1p_o^2p_o^3p_d^2p_d^1p_d^3$ 13350.40 30
8 三拼 $pcp_o^2p_o^1p_o^3p_d^1p_d^3p_d^2$ 19324.21 29
9 三拼 $pcp_o^2p_o^3p_o^1p_d^2p_d^3p_d^1$ 15757.84 30
10 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 33871.15 23

Task 2

基于(平均+最小)方向角的排序剪枝(k=(1,7)全对,(1,6)、(1,1)如下)

根据球面方向角计算候选路径的所有三点间夹角,然后分别计算其最小值和平均值,加起来作为指标。对所有候选路径的指标做排序,取前k大的再做枚举。

编号 场景 序列顺序 $S^*$长度 计算次数 与$S^*$比值
1 双拼 $pcp_o^2p_o^1p_d^2p_d^1$ 16238.69 4 100.00%
2 双拼 $pcp_o^1p_o^2p_d^2p_d^1$ 22143.40 4 100.00%
3 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 23042.19 4 100.00%
4 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 10417.09 4 100.00%
5 双拼 $pcp_o^2p_o^1p_d^1p_d^2$ 16918.74 4 100.00%
6 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 13903.36 21 100.00%
7 三拼 $pcp_o^1p_o^2p_o^3p_d^2p_d^1p_d^3$ 13350.40 16 100.00%
8 三拼 $pcp_o^2p_o^1p_o^3p_d^1p_d^3p_d^2$ 19324.21 11 100.00%
9 三拼 $pcp_o^3p_o^1p_o^2p_d^2p_d^3p_d^1$ 16046.75 18 101.83%
10 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 33871.15 15 100.00%
:----: :----: :---------: :--------: :--------: :--------:
1 双拼 $pcp_o^2p_o^1p_d^2p_d^1$ 16238.69 4 100.00%
2 双拼 $pcp_o^1p_o^2p_d^2p_d^1$ 22143.40 4 100.00%
3 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 23042.19 4 100.00%
4 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 10417.09 4 100.00%
5 双拼 $pcp_o^2p_o^1p_d^1p_d^2$ 16918.74 4 100.00%
6 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 13903.36 6 100.00%
7 三拼 $pcp_o^1p_o^2p_o^3p_d^2p_d^3p_d^1$ 14264.10 6 106.84%
8 三拼 $pcp_o^2p_o^1p_o^3p_d^1p_d^3p_d^2$ 19324.21 5 100.00%
9 三拼 $pcp_o^1p_o^2p_o^3p_d^2p_d^3p_d^1$ 16301.20 6 103.45%
10 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^1p_d^3$ 34100.83 6 100.68%

基于总球面距离的排序剪枝(k=(1,5)全对,(1,4)、(1,1)如下)

根据球面距离计算候选路径的所有两点间距离,然后加起来作为指标。对所有候选路径的指标做排序,取前k小的再做枚举。

编号 场景 序列顺序 $S^*$长度 计算次数 与$S^*$比值
1 双拼 $pcp_o^2p_o^1p_d^2p_d^1$ 16238.69 4 100.00%
2 双拼 $pcp_o^1p_o^2p_d^2p_d^1$ 22143.40 4 100.00%
3 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 23042.19 4 100.00%
4 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 10417.09 4 100.00%
5 双拼 $pcp_o^2p_o^1p_d^1p_d^2$ 16918.74 4 100.00%
6 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 13903.36 12 100.00%
7 三拼 $pcp_o^1p_o^2p_o^3p_d^2p_d^1p_d^3$ 13350.40 11 100.00%
8 三拼 $pcp_o^2p_o^1p_o^3p_d^1p_d^3p_d^2$ 19324.21 10 100.00%
9 三拼 $pcp_o^3p_o^1p_o^2p_d^2p_d^3p_d^1$ 16046.75 13 101.83%
10 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 33871.15 9 100.00%
:----: :----: :---------: :--------: :--------: :--------:
1 双拼 $pcp_o^2p_o^1p_d^2p_d^1$ 16238.69 4 100.00%
2 双拼 $pcp_o^1p_o^2p_d^2p_d^1$ 22143.40 4 100.00%
3 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 23042.19 4 100.00%
4 双拼 $pcp_o^1p_o^2p_d^1p_d^2$ 10417.09 4 100.00%
5 双拼 $pcp_o^2p_o^1p_d^1p_d^2$ 16918.74 4 100.00%
6 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^3p_d^1$ 13903.36 6 100.00%
7 三拼 $pcp_o^1p_o^2p_o^3p_d^2p_d^3p_d^1$ 14264.10 6 106.84%
8 三拼 $pcp_o^2p_o^1p_o^3p_d^1p_d^3p_d^2$ 19324.21 5 100.00%
9 三拼 $pcp_o^1p_o^2p_o^3p_d^2p_d^3p_d^1$ 16301.20 6 103.45%
10 三拼 $pcp_o^2p_o^1p_o^3p_d^2p_d^1p_d^3$ 34100.83 6 100.68%

Task3

  • Step 1: 枚举所有情况 对于每种序列,DFS计算所有候选点的选择,三拼中总共大约有60x7^6种情况。

case1: 13506.873184310927 查表190次 运行时间300ms case6: 11977.745265270445 查表548次 运行时间3min

  • Step 2: 剪枝 由于计算量太大,不采用直接枚举+剪枝的思路。

采用多个策略组合的方式:

  1. 先确定序列,再考虑上车点 如果保留前N小的序列,这样只有Nx7^6种情况。

  2. 根据其所在马路到邻近节点的距离对候选点进行排序剪枝 d = 马路起点到上一节点的距离 + 马路终点到下一节点的距离 保留前k小的候选点,还剩Nxk^6种情况。

结果

从task2的结果分析,case1/6可以用N=1做第一步剪枝,然后k取(4,2)全对,取(1,1)结果:

case1: 13892.215120194916 查表4次 比例1.0285293221181337 case6: 12195.516433070448 查表6次 比例1.018181315679791

About

Course Project.

License:MIT License


Languages

Language:Python 100.0%