基于TSP路径绘图的python学习

基于TSP路径绘图的python学习,第1张

关于遗传算法的介绍与研究已经不算新鲜,但每年物流工程相关专业都会产生相当数量路径相关学位论文,无论优劣。

希望我的系列笔记可以帮助像我一样,已经接触优化理论而计算机编程薄弱的朋友。

基于TSP路径绘图的笔记,用于理解python。原完整代码👇👇👇👇👇👇👇👇👇👇👇
https://blog.csdn.net/lovetaozibaby/article/details/88671377

一、 参数问题:

route1里的参数(N_begin, N_end)与range()里的参数(N_begin, N_end)有什么区别?

def route1(x0, y0, x, y, N_begin, N_end,color):             
    for i in range(N_begin, N_end):               
    
        if i == N_begin:                                           
            x_begin,y_begin = x0, y0
            x_end, y_end = x[i], y[i]
            plt_arrow(x_begin, y_begin, x_end, y_end, color)
        
        if i < N_end - 1:                                 #尾巴加1
            x_begin, y_begin = x[i], y[i]
            x_end, y_end = x[i+1], y[i+1]
        
        if i == N_end - 1:                                #尾巴赋值回家                                                       
            x_begin, y_begin = x[i], y[i]
            x_end, y_end = x0, y0

        plt_arrow(x_begin, y_begin, x_end, y_end, color )在这里插入代码片

前者的参数用于声明变量,比如N_begin∈{0,3,6}, N_end={3,6,9}

后者的参数是范围,不知道是不是引用?range(N_begin, N_end) → range(0,9)(9取不到)

二、连接配送点的判定问题:

i 为什么与 end-1 比较?

def DrawPointMap():                               	#这是主函数

    plt.figure()
    x0 = 5
    y0 = 5
    x = np.random.rand(9) * 10                      #产生9个随机数,每个数乘10
    y = np.random.rand(9) * 10
    print(x,'\n',y)
    plt.scatter(x, y, color = 'k', marker = '+'      # 要标记的点的坐标、大小及颜色
                ,label = 'Location')

    # annotate an important value
    plt.scatter(x0, y0, s = 200, color = 'r',
                marker='.',label = 'Center')          # 中心点的坐标、大小及颜色

    route1(x0, y0, x, y, 0, 3, 'orange')
    route1(x0, y0, x, y, 3, 6, 'blue')
    route1(x0, y0, x, y, 6, 9, 'green')在这里插入代码片

    # 配送路线

def route1(x0, y0, x, y, N_begin, N_end,color):         #这里的N_begin是0,3,6   N_end是3,6,9
    for i in range(N_begin, N_end):                     #对于这个集合每个元素i∈[0,8],range右边的9取不到
    
        if i == N_begin:                                           
            x_begin,y_begin = x0, y0
            x_end, y_end = x[i], y[i]
            plt_arrow(x_begin, y_begin, x_end, y_end, color)
        
        if i < N_end - 1:                                 #尾巴加1
            x_begin, y_begin = x[i], y[i]
            x_end, y_end = x[i+1], y[i+1]
        
        if i == N_end - 1:                                #尾巴赋值回家                                                       
            x_begin, y_begin = x[i], y[i]
            x_end, y_end = x0, y0

        plt_arrow(x_begin, y_begin, x_end, y_end, color )

首先,i 代表 range(N_begin, N_end) 里面所有元素,一共9个。

在主函数里面,也就是传值的时候:每3个元素依次组成一组,取每组最末尾一个元素的序号{3,6,9}为N_end,取第一个元素的序号{0,3,6}为N_begin。

例如:第一组数为{0,1,2} ,即 i=(0,1,2),其N_begin、N_end不变,分别为0、3。那么 i=0 触发第一个if ,i=1 触发第二个if,i=2时,触发第3个if。第二、三组同理。

但执行顺序是第一个if,第2个if ,第3个if。

三、函数问题:

这是个啥?

if __name__=='__main__':
    DrawPointMap()在这里插入代码片

魔法函数,调用自己。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/725253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存