线性规划的典型例题2
提前说明:本文为博主原创文章,未经原作者允许不得转载本文内容,否则将视为侵权;需要转载或者引用本文内容请注明来源及原作者,对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权。
例题2:投料问题
问题如下:
防雷:此博只做线性规划问题中投料问题的笔记,也就是第一问,第二问是非线性规划的选址问题,这个的笔记+程序代码,在下一博
第一问:
(一) 问题分析
我觉得微软雅黑这个字体emmmm不太喜欢,我直接放我自己写的PPT吧,图片形式:
1. 目标函数:
因为他让吨千米数最少,即让料场 i 到工地 j 的距离*xij 最小,而 i 只有两个,j 有6个,所以在写完 距离×吨数 之后,需要在前面加上求和符号,i 从1到2,j 从1到6;
2. 约束条件:
1).等式约束:
在此图中,工地 I 的水泥日需求量来源于料场A、B的运送量之和,x11+x21=d1,其他的同理。而日需求量是谁的,是工地的,所以我们可以固定住工地 j 。用一句话表述:对于工地 j 来说,他的水泥需求来自2个料场。所以,我们可以直接用下式来表示:
2).不等式约束:
因为实际情况中,日存储量一定是大于或者等于所有工地的日需求量的。那日储存量是谁的,是料场的,所以我们可以把料场 i 固定住。用一句话表述:对于料场 i 来说,他的存储量要大于或者等于运往的6个工地水泥总量,我们用下式表示:
3).上下界约束
肯定是运送的水泥量大于或者等于0,下界是0,上界正无穷。
3. Matlab线性规划问题的标准型
(二)程序代码
6*2=12个决策变量,而以我们一开始xij双下标形式去定义决策变量的话是不符合Matlab规划问题决策变量的标准型的,所以我们需要做转换:
双下标决策变量 | 单下标决策变量 |
---|---|
x11 | x1 |
x12 | x2 |
…… | …… |
x16 | x6 |
x21 | x7 |
x22 | x8 |
…… | …… |
x26 | x12 |
不等式约束如下:
等式约束如下:
代码如下:
% Matlab求解例题2
%% 例题2:投料问题
clear;clc
format long g
a = [5 2];b = [1 7];% 料场横坐标放a矩阵,纵坐标放b矩阵
x = [1.25 8.75 0.5 5.75 3 7.25];% 工地横坐标放x矩阵
y = [1.25 0.75 4.75 5 6.5 7.25];% 工地纵坐标放y矩阵
% 系数矩阵
C = [];
for i=1:2
for j=1:6
C = [C;sqrt((a(i)-x(j))^2+(b(i)-y(j))^2)];
end
end
% 不等式约束
A = zeros(2,12);
A(1,1:6)=1;A(2,7:12)=1;
b = [20 20]';
% 等式约束
Aeq = zeros(6,12);
for i=1:6
Aeq(i,i)=1;Aeq(i,i+6)=1;
end
beq = [3 5 4 7 6 11]';
% 上下界约束
lb = zeros(12,1);
% 使用命令求解
[x fval] = linprog(C,A,b,Aeq,beq,lb)
运行结果如下:
因为一开始定义的是单下标决策变量,为了方便查看算的各决策变量的数值(弄成双下标决策变量),运行下面一行代码,将x以6行2列的形式展示:
x = reshape(x,6,2)
得到下面结果:
第二问:
因为不是线性规划问题,而是非线性规划问题,所以放下一篇博客了,一天两博,大概是头发比较多给定我的勇气吧,好了,发表!
最后:本文为博主原创文章,如果对您有帮助的话,记得点个赞啊,有问题的话,评论区可以批评指正~对此,小女子感谢不尽,一起加油啊,数模秃子们!