信标组灯序设计

简 介: 本文给出了第十七届全国大学生智能车竞赛信标比赛路径设计。路径参数: 亮灯个数为18盏灯; 路径难易程度定位 5975 ~ 5990;待选的路径总共6888条,本文给出了其中50条路径的。
关键词 智能车竞赛信标组路径

01 标路径

   第十七届全国大学生智能车竞赛[1] 中的信标组比赛中,要求每次发车都使用不同的路径。下面给出了 十七届智能车竞赛线上赛道设计[2] 中关于信标组赛道规格,在此基础上,设计出八条信标比赛路径。

▲ 图1.1 平衡信标组比赛场地

一、比赛路径设计

  下图给出了信标组中四个信标以及发车区的位置坐标。

▲ 图1.1.1 信标组中的信标与发车区的坐标位置

1、搜索所有可能路径

  设计一条合理的比赛路径,遵循以下几条原则:

  • 从给定的区域出发,到指定的信标灯结束,比如从发车区出发,到 4号灯结束;
  • 给定亮灯的个数,比如12个;
  • 去除路径中相连比较近的灯序,比如 1-2, 2-3;

  下面是通过程序获得的从发车区出发,到 4号灯结束,点亮5个信标灯的所有的25条灯序。

[-113134]
[-113414]
[-113424]
[-113434]
[-114134]
[-114314]
[-124134]
[-124314]
[-131314]
[-131414]
[-131424]
[-131434]
[-134134]
[-134314]
[-141314]
[-141414]
[-141424]
[-141434]
[-142414]
[-142424]
[-142434]
[-143134]
[-143414]
[-143424]
[-143434]

  随着点亮灯的个数增加,灯序的总数呈现指数增加趋势。下面表格给出了灯序长度与个数的关系。

亮灯个数567891011121314151617181920
灯序总数255912127357712752733598112905281156084913228928672162273913506132932109

2、度量路径难易程度

  在所有可能路径中,车模运行的难易程度主要由两个因素决定:

  • 路径的长度(L):它决定了车模运行时间和信标定位的难易程度;
  • 车模转向角度(A):它影响了车模转向时间以及对信标搜索的难易程度;

  综合以上因素,将路径中的长度(单位:厘米)和角度(单位 度)以 4:1 的比例加权在一起,即路径的难易程度(H)表示为:  


  下图是对 622739 个 18盏灯的难易程度进行统计的直方图。可以看到其中存在着大量的低分值的路径,还有一些路径的难易程度在 5000 以上。

▲ 亮灯18盏灯的难易分数统计结果

  下图是将所有难度超过5000分的路径进行直方图统计。得分平均值为5903, 标准方差为:231。

▲ 路径难度超过5000的路径直方图

  对于路径难易得分为5991分的路径,总共有105条。这些路径的前两个都是 2号灯 与 4号灯。

[2 4 1 3 1 4 1 4 1 4 2 4 2 4 2 4 2 4]
[2 4 1 3 1 4 1 4 2 4 1 4 2 4 2 4 2 4]
[2 4 1 3 1 4 1 4 2 4 2 4 1 4 2 4 2 4]
[2 4 1 3 1 4 1 4 2 4 2 4 2 4 1 4 2 4]
[2 4 1 3 1 4 1 4 2 4 2 4 2 4 2 4 1 4]
[2 4 1 3 1 4 2 4 1 4 1 4 2 4 2 4 2 4]
[2 4 1 3 1 4 2 4 1 4 2 4 1 4 2 4 2 4]
[2 4 1 3 1 4 2 4 2 4 2 4 1 4 2 4 1 4]
[2 4 1 3 1 4 2 4 2 4 2 4 2 4 1 4 1 4]
[2 4 1 4 1 3 1 4 1 4 2 4 2 4 2 4 2 4]
[2 4 1 4 1 3 1 4 2 4 1 4 2 4 2 4 2 4]

.....................
.....................

[2 4 2 4 2 4 1 4 2 4 1 3 1 4 1 4 2 4]
[2 4 2 4 2 4 1 4 2 4 1 3 1 4 2 4 1 4]
[2 4 2 4 2 4 1 4 2 4 1 4 1 3 1 4 2 4]
[2 4 2 4 2 4 1 4 2 4 1 4 2 4 1 3 1 4]
[2 4 2 4 2 4 1 4 2 4 2 4 1 3 1 4 1 4]
[2 4 2 4 2 4 1 4 2 4 2 4 1 4 1 3 1 4]
[2 4 2 4 2 4 2 4 1 3 1 4 1 4 1 4 2 4]

[2 4 2 4 2 4 2 4 1 4 2 4 1 4 1 3 1 4]
[2 4 2 4 2 4 2 4 2 4 1 3 1 4 1 4 1 4]
[2 4 2 4 2 4 2 4 2 4 1 4 1 3 1 4 1 4]
[2 4 2 4 2 4 2 4 2 4 1 4 1 4 1 3 1 4]

  为了增加路径的随机性,将路径得分在5975 至 5990 之间的 6888 条路径挑选出来作为比赛路径候选者。这些路径中前 50 个路径如下图所示:

[1 3 1 3 1 4 2 4 2 4 2 4 2 4 3 4 3 4]
[1 3 1 3 4 2 4 3 1 4 2 4 3 4 2 4 2 4]
[1 3 1 4 3 4 2 4 2 4 2 4 2 4 3 1 3 4]
[1 3 4 2 4 2 4 2 4 3 4 2 4 1 3 1 3 4]
[1 3 4 3 1 3 4 1 3 4 2 4 2 4 2 4 2 4]
[1 4 2 4 3 1 3 4 3 1 3 4 2 4 2 4 2 4]
[2 4 1 3 1 4 2 4 1 4 1 4 2 4 1 4 1 4]
[2 4 1 4 1 4 1 3 1 4 2 4 2 4 1 4 1 4]
[2 4 1 4 1 4 2 4 1 4 2 4 1 3 1 4 1 4]
[2 4 1 4 2 4 1 4 2 4 2 4 1 3 1 4 1 4]
[2 4 2 4 1 4 1 4 1 3 1 4 2 4 1 4 2 4]
[2 4 2 4 2 4 1 4 1 4 1 3 1 4 2 4 1 4]
[2 4 2 4 3 4 3 1 3 4 2 4 3 4 3 1 3 4]
[2 4 3 1 3 4 3 4 3 1 3 4 3 4 2 4 2 4]
[2 4 3 4 3 4 2 4 3 1 3 1 3 4 3 4 2 4]
[3 1 3 4 1 4 1 4 1 4 3 4 2 4 2 4 1 4]
[3 1 3 4 1 4 2 4 1 4 1 4 2 4 2 4 3 4]
[3 1 3 4 1 4 3 4 1 4 1 4 1 4 1 4 1 4]
[3 1 3 4 2 4 1 4 1 4 3 4 1 4 2 4 2 4]
[3 1 3 4 2 4 2 4 2 4 3 4 1 4 1 4 1 4]
[3 1 3 4 3 4 1 4 2 4 1 4 1 4 2 4 2 4]
[3 1 4 1 3 4 1 4 1 4 1 4 2 4 3 4 1 4]
[3 1 4 1 3 4 1 4 2 4 3 4 1 4 2 4 2 4]
[3 1 4 1 3 4 2 4 2 4 1 4 1 4 3 4 2 4]
[3 1 4 1 4 1 3 4 1 4 1 4 1 4 1 4 3 4]
[3 1 4 1 4 1 3 4 2 4 2 4 3 4 1 4 1 4]
[3 1 4 1 4 1 4 1 3 4 3 4 1 4 1 4 2 4]
[3 1 4 1 4 1 4 1 4 2 4 1 4 3 4 3 1 4]
[3 1 4 1 4 1 4 1 4 3 4 3 1 4 1 4 2 4]
[3 1 4 1 4 1 4 2 4 2 4 2 4 3 4 3 1 4]
[3 1 4 1 4 1 4 3 1 4 1 4 1 4 2 4 3 4]
[3 1 4 1 4 1 4 3 4 1 4 1 4 3 1 4 2 4]
[3 1 4 1 4 2 4 1 3 4 1 4 2 4 2 4 3 4]
[3 1 4 1 4 2 4 1 4 1 4 3 1 4 3 4 2 4]
[3 1 4 1 4 2 4 1 4 3 4 1 4 1 3 4 2 4]
[3 1 4 1 4 2 4 2 4 1 4 3 4 3 1 4 1 4]
[3 1 4 1 4 2 4 3 1 4 1 4 3 4 1 4 2 4]
[3 1 4 1 4 2 4 3 4 2 4 1 3 4 1 4 1 4]
[3 1 4 1 4 3 1 4 1 4 3 4 1 4 1 4 2 4]
[3 1 4 1 4 3 4 1 3 4 1 4 1 4 1 4 1 4]
[3 1 4 1 4 3 4 1 4 2 4 1 3 4 2 4 2 4]
[3 1 4 1 4 3 4 2 4 1 4 2 4 1 4 1 3 4]
[3 1 4 2 4 1 3 4 1 4 1 4 1 4 1 4 3 4]
[3 1 4 2 4 1 3 4 3 4 1 4 2 4 2 4 1 4]
[3 1 4 2 4 1 4 1 4 1 4 1 4 3 1 4 3 4]
[3 1 4 2 4 1 4 1 4 3 1 4 2 4 3 4 2 4]
[3 1 4 2 4 1 4 2 4 1 4 3 1 4 1 4 3 4]
[3 1 4 2 4 1 4 2 4 3 4 3 1 4 2 4 1 4]
[3 1 4 2 4 1 4 3 4 1 4 2 4 1 4 1 3 4]
[3 1 4 2 4 2 4 1 3 4 3 4 2 4 1 4 1 4]
▲ 路径难易得分在5975至5990之间得分分布

  结 ※

  文给出了第十七届全国大学生智能车竞赛信标比赛路径设计。路径参数:

  • 亮灯个数为18盏灯;
  • 路径难易程度定位 5975 ~ 5990;

  待选的路径总共6888条,本文给出了其中50条路径的。

一、处理程序

1、路径生成与得分计算

#!/usr/local/bin/python
# -*- coding: gbk -*-
#******************************
# TEST1.PY                     -- by Dr. ZhuoQing 2022-07-19
#
# Note:
#******************************

from headm import *
import math

#------------------------------------------------------------
posdim = [(100,325), (75200), (75,75), (425,200)]
start1 = (25022.5)

def routearg(r, s):
    global posdim
    lenall = 0
    angleall = 0

    lastangle = 0
    lastr = s
    for id,rr in enumerate(r):
        rrr = posdim[rr-1]
        deltax = rrr[0] - lastr[0]
        deltay = rrr[1] - lastr[1]
        lenall += sqrt(deltax**2 + deltay**2)

        angle = math.atan2(deltay, deltax)

        lastr = rrr

        if id > 0:
            deltaangle = angle - lastangle

            while deltaangle < -pi:
                deltaangle += pi
            while deltaangle > pi:
                deltaangle -= pi

            angleall += abs(deltaangle)

        lastangle = angle
    return lenall, angleall

#------------------------------------------------------------
'''
r = tspload('route18', 'r')

rscore = []

for id,rr in enumerate(r):
    rscore.append(routearg(rr[1:], start1))

    if id % 10000 * 0:
        printf(id)

tspsave('score', rscore=rscore)
'''

#------------------------------------------------------------
rscore = tspload('score''rscore')

plt.hist(rscore, 50)
plt.xlabel("路径难易")
plt.ylabel("出现频次")
plt.grid(True)
plt.tight_layout()
plt.show()

exit()



#------------------------------------------------------------
def routerandall(r, endp, num):
    global routeall

#    printff(r, endp, num)
    if len(r) >= num - 1:
        rc = r.copy()
        rc.append(endp)
        routeall.append(rc)
        return


    rr = list(range(1,5))

    if r[-1in rr:
        rr.remove(r[-1])

    if r[-1] * 1:
        if 2 in rr: rr.remove(2)

    if r[-1] * 2:
        if 1 in rr: rr.remove(1)
        if 3 in rr: rr.remove(3)

    if r[-1] * 3:
        if 2 in rr: rr.remove(2)

    if len(r) >= num - 2:
        if endp in rr:
            rr.remove(endp)

    for rrr in rr:
        rc = r.copy()
        rc.append(rrr)
        routerandall(rc, endp, num)

#------------------------------------------------------------
routeall = []
r = [-1]
routerandall(r, 419)
tspsave('route18', r = routeall)

#------------------------------------------------------------
printf(len(routeall))
#for r in routeall:
#    printf(r)

#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#******************************

2、路径统计

#!/usr/local/bin/python
# -*- coding: gbk -*-
#******************************
# TEST2.PY                     -- by Dr. ZhuoQing 2022-07-19
#
# Note:
#******************************

from headm import *

r = tspload('route18''r')
rscore = tspload('score''rscore')

printf(shape(r))

c = where((rscore >= 5975) & (rscore < 5990))
rhigh = rscore[c]
route = r[c[0],1:]

printf(len(route), len(route))
printf(shape(route))

rsel = route[::50][:50]

for rr in rsel:
    printf(rr)




#------------------------------------------------------------
#for r in route:
#    printf(r)

#------------------------------------------------------------
printf(mean(rhigh), std(rhigh))

plt.hist(rhigh, 500)

plt.xlabel("路径难易")
plt.ylabel("出现频次")
plt.grid(True)
plt.tight_layout()
plt.show()

#------------------------------------------------------------
#        END OF FILE : TEST2.PY
#******************************

参考资料

[1]

第十七届全国大学生智能车竞赛: https://blog.csdn.net/zhuoqingjoking97298/article/details/121187014

[2]

十七届智能车竞赛线上赛道设计: https://zhuoqing.blog.csdn.net/article/details/125355706