钢管下料问题模型求解
关键词:钢管下料
Python
、Lingo
一、问题描述
某钢管零售商从钢管厂进货,将钢管按照顾客得要求切割后售出,从钢管厂进货时得到得原料钢管都是19
m。
- 现有一客户需要
50
根4
m、20
根6
m和15
根8
m的钢管。问应如何下料最节省? - 零售商如果采用的不同切割模式太多,将会导致生产过程的复杂化,从而增加生产和管理成本,所以零售商规定采取的切割模式不超过
3
种。此外,该客户除需要(1)中的三种钢管外,还需要10
根5
m的钢管,问应如何下料最节省?
二、问题分析
问题一:
①要使下料最节省,根据实际需要,可选择总余量最小
和所用原料钢管根数最少
作为目标。在余料没有什么用途的情况下通常选择所用总根数最少为目标。
②对于每种切割模式必须合理
,即每根钢管剩余原料必须小于4
m。
问题二:
①本题的目标为利润扣除废料之后净利润最大
。废料分为两种
,一种是余料
,一种是不能匹配的罐底瓶盖
、底
。
②在该题中,易拉罐个数为整数
,但是由于生产数目巨大
,故可看作实数。
三、实验原理
问题一: 钢管的切割模式
用
python
或枚举法
列出所有合理
的切割模式
4m钢管数 | 6m钢管数 | 8m钢管数 | 余料/m | |
---|---|---|---|---|
模式一 | 4 | 0 | 0 | 3 |
模式二 | 3 | 1 | 0 | 1 |
模式三 | 2 | 0 | 1 | 3 |
模式四 | 1 | 2 | 0 | 3 |
模式五 | 1 | 1 | 1 | 1 |
模式六 | 0 | 3 | 0 | 1 |
模式七 | 0 | 0 | 2 | 3 |
问题二: 钢管切割模式
用
python
或枚举法
列出所有合理
的切割模式
![](https://img-blog.csdnimg.cn/20200521094605423.jpg)
四、运行结果
问题一:
python
求解
fun: 25.0
message: ‘Optimization terminated successfully.’
nit: 4
slack: array([0., 0., 0.])
status: 0
success: True
x: array([ 5., 0., 5., 0., 0., 15., 0.])
问题二:
python
求解
![](https://img-blog.csdnimg.cn/20200521094704344.jpg)
lingo
求解
Local optimal solution found.
Objective value: 28.00000
Objective bound: 28.00000
Infeasibilities: 0.000000
Extended solver steps: 145
Total solver iterations: 9131
五、源代码
问题一:
python
# -*- coding: utf-8 -*-
from scipy import optimize as op
import numpy as np
b_list=[]
c_list=[]
for i in range(5):
for j in range(4):
for k in range(3):
if 16<=4*i+6*j+8*k<=19:
a_list = [] #存储一种情况
a_dict = {
} #存储一种情况的数据
a_dict["x"]=i
a_dict["y"]=j
a_dict["z"]=