美文网首页
设施规划利用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求解从至表

    在设施规划中,求解从至表从而得到最优的厂房排序是必不可少的一环故利用python写了一段求解从至表的程序。对于不同...

  • python 二次规划

    如何在Python中利用CVXOPT求解二次规划问题http://blog.csdn.net/ch12094982...

  • 计算1到100的和

    利用递归求解 用 最笨的方法求解: 用python牛逼的sum求解: 用奇偶相加求解:

  • Python CSV文件导入MySQL数据库

    Python CSV文件导入MySQL数据库 利用Python将CSV文件导入至Mysql数据库,如果不存在表名,...

  • Python | 动态规划求解TSP

    主要参考:Python求解tsp问题(动态规划,简单易懂)CSDN博客 解题思路主要有两部分: i为当前节点(城市...

  • 约瑟夫问题的树状数组求解方法

    贴一篇博客,写的还行经典约瑟夫问题的快速求解除了循环链表模拟,和动态规划求解还可以利用树状数组,树状数组的时间复杂...

  • 一维动态规划及优化(max subarray, sell sto

    动态规划(Dynamic Programming) 从分治到动态规划:动态规划的基本思想是将待求解的问题分解为若干...

  • 熵权法的pytho

    借鉴上述对熵权法的介绍和实例讲解,用python实现求解,主要利用的是numpy的矩阵计算。

  • 系统工程中利用python求解可达矩阵

    在系统工程书中,建立解释结构模型中求解可达矩阵是必不可少的一环 故利用python写了一段求解可达矩阵的代码,只需...

  • maxSubArray vs. maxProduct

    这两个问题类似,都可利用动态规划思想求解。 一、最大连续子序列和 https://leetcode.com/pro...

网友评论

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

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