某船厂有100种余料,客户提出5种型材的要求,数据见附件1,试从100种余料中找出与客户要求相匹配的余料,使得该余料(长宽高)切割成客户要求的型材后,所剩下的废料最少,试建立数学模型来解决余料匹配方式(不考虑切割损耗和切割费用)。
时间: 2023-06-23 20:10:28 浏览: 116
假设每一种余料都可以被切割成客户要求的型材,并且客户的需求量可以通过重复切割来满足。那么我们可以建立如下的数学模型:
设 $x_i$ 表示第 $i$ 种余料的使用量(单位为 “个”),$y_j$ 表示客户要求的第 $j$ 种型材的使用量(单位为 “个”)。则该问题可以转化为一个线性规划问题,即:
$$
\begin{aligned}
\min \quad & \sum_{i=1}^{100} V_i - \sum_{j=1}^{5} W_j \\
\text{s.t.} \quad & \sum_{j=1}^{5} A_{ij} y_j \leq B_i x_i, \quad i = 1,2,\dots,100 \\
& x_i \geq 0, \quad i=1,2,\dots,100 \\
& y_j \geq 0, \quad j=1,2,\dots,5
\end{aligned}
$$
其中,$V_i$ 表示第 $i$ 种余料的价值(可以根据材料的成本、库存量等因素来确定),$W_j$ 表示客户要求的第 $j$ 种型材的价值(可以根据客户需求量、市场价格等因素来确定);$A_{ij}$ 表示将第 $i$ 种余料切割成第 $j$ 种型材后,剩下的废料的体积(可以通过计算得出);$B_i$ 表示第 $i$ 种余料的总体积。
求解上述线性规划问题可以使用现有的优化软件工具,如 MATLAB 中的 linprog 函数。
相关问题
某船厂有 100 种余料,客户提出 5 种型材的要求,数据见附件 1,试从 100 种余料 中找出与客户要求相匹配的余料,使得该余料切割成客户要求的型材后,所剩下的废料最少, 试建立数学模型来解决余料匹配方式
假设客户需要 n 种型材,分别为 A1, A2, ..., An,每种型材需要的长度分别为 L1, L2, ..., Ln。现在我们需要从 100 种余料中选择若干种余料,使得它们能够满足客户的要求,并且剩余的废料最少。
首先,我们需要对每一种余料进行测量,得到它们的长度和宽度。假设第 i 种余料的长度为 Li,宽度为 Wi。
接下来,我们可以将问题转化为一个线性规划问题。我们首先定义一个二元变量 xi,表示是否选择第 i 种余料。显然,xi 只能取 0 或 1。
接下来,我们需要定义一个目标函数,表示剩余的废料的面积。假设第 i 种余料被选择,则剩余的废料面积为:
(Li - L1 - L2 - ... - Ln) * Wi
因此,我们的目标函数可以表示为:
minimize Z = (L1 + L2 + ... + Ln) * W - Σ(Li - L1 - L2 - ... - Ln) * Wi * xi
其中,(L1 + L2 + ... + Ln) * W 表示我们需要切割的总面积。
接下来,我们需要添加一些约束条件,以确保所选择的余料能够满足客户的要求。首先,对于每一种型材,我们需要保证它们的长度不超过所选择的余料的最小长度。因此,我们可以添加如下的约束条件:
Li <= ΣLj * xj,其中 j 表示所选择的余料的编号。
这个约束条件表示,如果第 i 种型材需要的长度为 Li,那么我们需要保证所选择的余料的长度之和大于等于 Li。
另外,我们还需要保证所选择的余料能够满足客户的宽度要求。因此,我们可以添加如下的约束条件:
Wi >= max{Wj},其中 j 表示所选择的余料的编号。
这个约束条件表示,我们需要保证所选择的余料的宽度大于等于客户要求的最大宽度。
最后,我们还需要保证 xi 只能取 0 或 1。因此,我们可以添加如下的约束条件:
xi ∈ {0, 1}
综上所述,我们的线性规划模型可以表示为:
minimize Z = (L1 + L2 + ... + Ln) * W - Σ(Li - L1 - L2 - ... - Ln) * Wi * xi
subject to
Li <= ΣLj * xj,j = 1, 2, ..., 100
Wi >= max{Wj},j = 1, 2, ..., 100
xi ∈ {0, 1},i = 1, 2, ..., 100
其中,L1, L2, ..., Ln 和 W 分别表示客户要求的型材长度和宽度。我们可以使用线性规划软件来求解这个问题,得到最优的余料选择方案。
某船厂有100种余料,客户提出5种型材的要求,数据见附件1,试从100种余料中找出与客户要求相匹配的余料,使得该余料(长宽高)切割成客户要求的型材后,所剩下的废料最少,试建立数学模型来解决余料匹配方式,并进行结果测试模拟
首先,我们需要将客户要求的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])
```
运行代码后,输出的结果就是匹配到每种型材的余料编号。
阅读全文