美文网首页
设施规划利用python求解从至表

设施规划利用python求解从至表

作者: 冯野Fancy | 来源:发表于2020-01-20 19:55 被阅读0次

    在设施规划中,求解从至表从而得到最优的厂房排序是必不可少的一环
    故利用python写了一段求解从至表的程序。对于不同的厂房数量与不同的零件加工程序,只需要修改对应内容即可,此程序通用性比较强。
    这是本程序对应案例的相关数据


    本案例对应的从至表.jpg

    带入到程序求解
    代码如下:

    #计算从至表
    import numpy as np
    import pandas as pd
    
    #————————————————————————————修改的内容————————————————————————————————#
    
    #原材料库A  铸造车间B  热处理车间C   机加工车间D   精密车间E    标准件半成品库F
    #仓库组成的序列
    obj=pd.Series(['A','B','C','D','E','F'],index=[1,2,3,4,5,6])
    #print(obj)
    #零件组成的字典。零件名:权重,[加工顺序]
    parts={'s1':[9,['A','D','C','F']],           
          's2':[90,['A','B','D','E','F']],
          's3':[3,['A','B','D','F']],
          's4':[3,['A','D','E','F']],
          's5':[27,['A','D','E','F']],
          's6':[700,['A','B','D','E','F']],
          's7':[60,['A','D','C','E','F']],
          's8':[56,['A','D','E','F']],
          's9':[32,['A','D','F']],
          's10':[1,['A','D','C','E','F']],
          's11':[120,['A','C','D','C','E','F']],
          's12':[60,['A','C','D','C','E','F']],
          's13':[80,['A','D','C','F']]
          }
    
    #—————————————————————————场地数组的全排列——————————————————————————————#
    
    m=len(obj)    #加工场地的个数
    obj_sort=[i for i in range(1, m+1)]  #需要排列的列表
    
    def AllRange(listx,p,q):      #递归生成全排列列表sorts  
        if p == q:
            all_sorts.append(list(listx)) 
        else:
            for i in range(p,q):
                listx[i],listx[p]=listx[p],listx[i]
                AllRange(listx,p+1,q)
                listx[i],listx[p]=listx[p],listx[i]
            
    all_sorts=[]                 #所有全排列可能的列表
    AllRange(obj_sort,0,len(obj_sort))
    
    #—————————————————————————计算流量最小时的排列——————————————————————————#
    
    min_flow=100000000     #最小流量,根据情况设置一个比较大的值
    best_sort=[]           #最小流量下的排序
    
    #计算一个零件在某排序下的流量
    def one_part_folw(info,now_range):  
        p_flow=0    #不加权重的流量
        n=len(info[1])
        for i in range(n-1):   #工序A对应的数字1,在新排序中的先后位置
            index_f=obj[obj.values==info[1][i]].index  #工序对应的标签
            index_l=obj[obj.values==info[1][i+1]].index
            f=now_range.index(index_f)    
            l=now_range.index(index_l)
            if f > l:
                p_flow += (f-l)*2
            else:
                p_flow += (l-f)
    
        total_flow=p_flow*info[0]
        return total_flow
    
    #找出所有序列流量最小值及对应序列
    for all_sort in all_sorts[:]:     
        now_flow=0    #本次排列的流量
        for part in parts.values():
            part_flow=one_part_folw(part,all_sort)  #每个零件的流量
            now_flow += part_flow
    
        if now_flow <= min_flow:
            min_flow=now_flow
            best_sort=all_sort[:]
    
    #—————————————————————————————输出结果——————————————————————————————————#        
    
    print('min flow:')
    print(min_flow)
    print('best sort:')
    for i in range(m):
        print(obj[best_sort[i]])
    
    

    可以求得最优厂房排序为


    最优排序及流量.PNG

    ps:本程序迭代了所有厂房排序可能情况,从中求出最优解。为了提高程序的通用性,加之用python书写,所以运行速度稍微慢了些。
    有不足之处,还请见谅。

    相关文章

      网友评论

          本文标题:设施规划利用python求解从至表

          本文链接:https://www.haomeiwen.com/subject/hffszctx.html