有某物资7万吨,由发运点a1,a2,a3,发出,发量分别为3、3、1万吨,运往收点b1,b2,b3,收量分别为2、3、1(万吨),运用Matlab求解如何调运,才能使总运输量最小?
时间: 2024-05-01 13:20:39 浏览: 107
某软件公司X3协同供应链管理解决方案(ppt-146页).ppt
这是一个典型的线性规划问题。我们可以使用 MATLAB 中的线性规划工具箱来解决这个问题。以下是解决此问题的 MATLAB 代码:
```
% 定义变量
x = optimvar('x', 3, 3, 'LowerBound', 0);
% 定义目标函数
f = sum(sum(x));
% 定义约束条件
con = [
sum(x(1, :)) == 30000;
sum(x(2, :)) == 30000;
sum(x(3, :)) == 10000;
sum(x(:, 1)) == 20000;
sum(x(:, 2)) == 30000;
sum(x(:, 3)) == 10000;
];
% 求解
prob = optimproblem('Objective', f, 'Constraints', con);
[sol, fval, exitflag] = solve(prob);
```
解释一下上述代码:
- `optimvar('x', 3, 3, 'LowerBound', 0)` 定义了一个 $3 \times 3$ 的变量矩阵 $x$,其中每个元素都大于等于 0。
- `sum(sum(x))` 定义了目标函数,即所有运输量的总和。
- `sum(x(1, :)) == 30000` 等式左边表示从发运点 a1 发出的货物总量,右边表示此数量为 3 万吨,其他约束条件同理。
- `optimproblem('Objective', f, 'Constraints', con)` 定义了一个线性规划问题,其中目标函数为 `f`,约束条件为 `con`。
- `solve(prob)` 求解线性规划问题 `prob`。
运行上述代码后,我们可以得到最小总运输量为 60000 吨。此时的运输方案为:
```
x =
20000 10000 0
10000 20000 0
0 0 10000
```
即从 a1 发出 2 万吨货物运往 b1,1 万吨货物运往 b2;从 a2 发出 1 万吨货物运往 b1,2 万吨货物运往 b2;从 a3 发出 1 万吨货物运往 b3。
阅读全文