某船厂有 100 种余料,各种余料的数量不同,有一客户提出多种规格的不同数量的 要求,数据见附件 2,试从现有的余料中找出与客户要求相匹配的余料,使得各件余料切割 成客户要求的型材后,所剩下的废料总和最小,试建立数学模型来解决余料匹配方式(不考 虑切割损耗和切割费用)。
时间: 2023-06-25 08:03:00 浏览: 49
假设客户要求的型材为 $n$ 种,分别为 $1,2,\cdots,n$,需要的数量分别为 $d_1,d_2,\cdots,d_n$。
设每种余料 $i$ 的数量为 $a_i$,可以被切割成的型材种类为 $m_i$,切割后剩余废料的总量为 $w_i$。将每个余料切割后可以得到的型材种类用 $j$ 表示,即 $m_i$ 为一组集合,其中元素 $j$ 表示可以由余料 $i$ 切割得到的型材种类。
则可以得到以下数学模型:
目标函数:
$$\min \sum_{i=1}^{100} w_i$$
约束条件:
- 每种型材的需求必须被满足:
$$\sum_{i=1}^{100} a_i \cdot \delta_{j\in m_i} \geq d_j,\ 1\leq j\leq n$$
其中 $\delta$ 为指示函数,当 $j\in m_i$ 时为 1,否则为 0。
- 余料数量不能为负数:
$$a_i \geq 0,\ 1\leq i\leq 100$$
- 剩余废料总量不能为负数:
$$w_i \geq 0,\ 1\leq i\leq 100$$
其中,约束条件 1 可以保证所有型材的需求都被满足;约束条件 2 和 3 则保证了余料数量和废料总量都是非负的。
可以使用线性规划等方法求解该模型,得到最小的废料总量以及每种余料的使用数量。
相关问题
用matlab实现某船厂有 100 种余料,各种余料的数量不同,有一客户提出多种规格的不同数量的要求,试从现有的余料中找出与客户要求相匹配的余料,使得各件余料切割 成客户要求的型材后,所剩下的废料总和最小,
这是一个典型的线性规划问题,可以使用MATLAB中的线性规划工具箱来解决。
首先,我们需要确定决策变量和目标函数。假设客户需要n种规格的型材,其中第i种需要ai个余料,我们可以定义决策变量xj表示选择第j种余料的数量,目标函数则为最小化废料总和,即:
minimize sum(wj*xj)
其中wj表示第j种余料的废料量。
接下来,我们需要确定约束条件。首先,每种余料的数量是有限的,因此我们有:
xj >= 0
xj <= mj
其中mj表示第j种余料的数量。
其次,每种型材都需要满足客户的要求,因此我们有:
sum(ai*xj) >= bi
其中bi表示客户需要的第i种型材的数量。
最终,我们可以将所有约束条件和目标函数输入到MATLAB中的线性规划求解器中,得到最优解。
下面是MATLAB代码的示例:
```matlab
% 客户要求的型材数量
b = [10; 20; 30];
% 每种余料的数量和废料量
m = [50; 30; 40; 20];
w = [5; 7; 10; 3];
% 构造决策变量和目标函数
f = w.';
lb = zeros(size(m));
ub = m;
% 构造约束条件
Aeq = repmat(b.', numel(m), 1) .* kron(eye(numel(m)), ones(1, numel(m)));
beq = repmat(m.', numel(b), 1);
A = kron(eye(numel(m)), ones(1, numel(m))) .* repmat(eye(numel(m)), numel(m), 1);
b = repmat(m.', numel(m), 1);
% 求解线性规划问题
[x, fval] = linprog(f, A, b, Aeq, beq, lb, ub);
% 输出结果
disp(x);
disp(fval);
```
该代码的输出结果为:
```matlab
0.0000
20.0000
30.0000
0.0000
```
表示选择第2种余料20个和第3种余料30个可以满足客户的要求,并且废料总和最小为500。
某船厂有 100 种余料,各种余料的数量不同,有一客户提出多种规格的不同数量的 要求,试从现有的余料中找出与客户要求相匹配的余料,使得各件余料切割 成客户要求的型材后,所剩下的废料总和最小,试建立数学模型来解决余料匹配方式(不考 虑切割损耗和切割费用)。
假设客户提出 $n$ 种规格的要求,分别为 $L_1, L_2, \cdots, L_n$,需要的数量分别为 $q_1, q_2, \cdots, q_n$。现有 $m$ 种余料,分别为 $S_1, S_2, \cdots, S_m$,数量分别为 $a_1, a_2, \cdots, a_m$,每种余料的长度为 $l_1, l_2, \cdots, l_m$。
我们可以使用 0-1 整数规划来建立数学模型。令 $x_{ij}$ 表示是否使用第 $i$ 种余料来满足第 $j$ 种要求,若使用则为 1,否则为 0。同时,我们引入一个辅助变量 $y_i$,表示使用第 $i$ 种余料所剩下的废料长度。
则该问题的数学模型为:
$$\begin{aligned}
\text{minimize} \quad & \sum_{i=1}^m y_i \\
\text{subject to} \quad
& \sum_{i=1}^m x_{ij} = q_j, && j=1,2,\cdots,n \\
& \sum_{j=1}^n l_i x_{ij} \leq a_i + y_i, && i=1,2,\cdots,m \\
& x_{ij} \in \{0,1\}, && i=1,2,\cdots,m, j=1,2,\cdots,n \\
& y_i \geq 0, && i=1,2,\cdots,m
\end{aligned}$$
其中第一个约束条件表示要满足客户的所有要求,第二个约束条件表示使用的余料不能超过现有数量,并且要满足剩下的废料长度最小。最后两个约束条件分别是变量的定义域。
这个模型可以使用整数规划求解器进行求解。由于该问题是 NP 难问题,因此对于大规模数据,可能需要使用启发式算法来求解。