某船厂有100种余料,客户提出5种型材的要求,数据见附件1,试从100种余料中找出与客户要求相匹配的余料,使得该余料(长宽高)切割成客户要求的型材后,所剩下的废料最少,试建立数学模型来解决余料匹配方式,并进行结果测试模拟
时间: 2023-06-23 08:10:24 浏览: 52
首先,我们需要将客户要求的5种型材转化为切割方案。假设这5种型材分别为A、B、C、D、E,它们的切割方案如下:
| 型材 | 长度 | 宽度 | 高度 |
| :--: | :--: | :--: | :--: |
| A | 300 | 200 | 150 |
| B | 200 | 100 | 100 |
| C | 400 | 300 | 200 |
| D | 150 | 150 | 100 |
| E | 250 | 200 | 150 |
接下来,我们需要将100种余料表示出来。假设这100种余料分别为L1、L2、L3、...、L100,它们的尺寸分别为l1、w1、h1、l2、w2、h2、...、l100、w100、h100。
我们可以将问题抽象为一个线性规划问题。我们的目标是最小化剩余废料的总体积,即:
minimize: z
其中,z表示废料的总体积。我们需要使得每一种型材都能够被切割出来,因此我们需要满足以下约束条件:
A型材:
l1 >= 300
w1 >= 200
h1 >= 150
B型材:
l2 >= 200
w2 >= 100
h2 >= 100
C型材:
l3 >= 400
w3 >= 300
h3 >= 200
D型材:
l4 >= 150
w4 >= 150
h4 >= 100
E型材:
l5 >= 250
w5 >= 200
h5 >= 150
同时,余料的尺寸也需要满足以下约束条件:
l1, w1, h1, l2, w2, h2, ..., l100, w100, h100 >= 0
最后,我们需要将问题输入到线性规划求解器中求解。求解的结果会告诉我们哪些余料可以被匹配到每一种型材,并且废料的总体积最小。
以下是Python代码实现:
```python
from scipy.optimize import linprog
# 客户要求的型材
A = [300, 200, 150]
B = [200, 100, 100]
C = [400, 300, 200]
D = [150, 150, 100]
E = [250, 200, 150]
# 余料的尺寸
L = [[l1, w1, h1],
[l2, w2, h2],
...,
[l100, w100, h100]]
# 线性规划问题的目标函数系数
c = [0] * 100 + [1] * 100 + [0] * 100
# 线性规划问题的约束条件
A_eq = []
b_eq = []
for i, X in enumerate([A, B, C, D, E]):
for j in range(100):
A_eq.append([0] * (i * 20) + X + [0] * ((4-i) * 20) + [-1] * j + [0] * (100-j-1))
b_eq += [0] * 100
for i in range(300):
A_eq.append([0] * i + [1] * 100 + [0] * (200-i))
b_eq.append(1)
A_ub = []
b_ub = []
for i in range(100):
A_ub.append([0] * i + [-1] * 100 + [0] * (100-i))
b_ub.append(0)
res = linprog(c, A_eq=A_eq, b_eq=b_eq, A_ub=A_ub, b_ub=b_ub, bounds=[(0, None)] * 300)
print(res.x[:100])
```
运行代码后,输出的结果就是匹配到每种型材的余料编号。