Matlab和LINGO求解线性规划问题
2015-06-17 16:56
1011 查看
加工奶制品的生产计划
加工1桶牛奶有两种加工方式,(1)生产12小时得到3公斤A1,获利24元/公斤(2)生产8小时得到4公斤A2,
获利16元/公斤
每天:
50桶牛奶 时间480小时 至多加工100公斤A1
制订生产计划,使每天获利最大
分析:
设x1桶牛奶生产A1x1桶牛奶生产A2
则生产A1获利 24×3x1 生产A2获利 16×4 x2
每天获利
Max z=72x1+64x2
约束条件
原料 x1+x2≤50
时间 12×x1+8×x2≤480
加工能力 3×x1≤100
非负约束 x1,x2≥0
LINGO代码
结果
Matlab求解
代码2
结果
线性规划的一般形式
minf=c1x1+c2x2+...+cnxn\min f=c_1x_1+c_2x_2+...+c_nx_n
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪a11x1+a12x2+...+a1nxn≤b1a21x1+a22x2+...+a2nxn≤b2..............................am1x1+am2x2+...+amnxn≤bms.t.\left\{
\begin{aligned}
a_{11}x_1+a_{12}x_2+...+a_{1n}x_n ≤b_1 \\
a_{21}x_1+a_{22}x_2+...+a_{2n}x_n ≤b_2 \\
..............................\\
a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n ≤b_m
\end{aligned}
\right.
xi≥0(i=1,2,...n)x_i≥0 (i=1,2,...n)
用矩阵表示是
minf=cTX\min f=c^TX
s.t.AX≤b,X≥0s.t. AX≤b,X≥0
例:求解线性规划问题
maxf=3x1−x2−x3\max f=3x_1-x_2-x_3
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪x1−x2+x3≤11−4x1+x2+2x3≥32x1−x3=−1xi≥0,i=1,2,3s.t.\left\{
\begin{aligned}
x_1-x_2+x_3 ≤11 \\
-4x_1+x_2+2x_3 ≥3 \\
2x_1-x_3=-1\\
x_i≥0,i=1,2,3
\end{aligned}
\right.
解:考虑到linprog函数只能解决形如
minf=cTX\min f=c^TX
s.t.⎧⎩⎨⎪⎪AX≤Baeqx=beqxX≥0
s.t.\left\{
\begin{aligned}
AX≤B \\
aeqx=beqx \\
X≥0
\end{aligned}
\right.
变形为下面这个形式
minf=−3x1+x2+x3\min f=-3x_1+x_2+x_3
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪2x1−x3=−1x1−x2+x3≤114x1−x2−2x3≤−3xi≥0,i=1,2,3s.t.\left\{
\begin{aligned}
2x_1-x_3=-1\\
x_1-x_2+x_3 ≤11 \\
4x_1-x_2-2x_3 ≤-3 \\
x_i≥0,i=1,2,3
\end{aligned}
\right.
matlab代码
结果
对应原来的线性规划中即知目标函数的最大值为2,此时
x1=4,x2=1,x3=9x_1=4,x_2=1,x_3=9
LINGO求解
结果
加工1桶牛奶有两种加工方式,(1)生产12小时得到3公斤A1,获利24元/公斤(2)生产8小时得到4公斤A2,
获利16元/公斤
每天:
50桶牛奶 时间480小时 至多加工100公斤A1
制订生产计划,使每天获利最大
分析:
设x1桶牛奶生产A1x1桶牛奶生产A2
则生产A1获利 24×3x1 生产A2获利 16×4 x2
每天获利
Max z=72x1+64x2
约束条件
原料 x1+x2≤50
时间 12×x1+8×x2≤480
加工能力 3×x1≤100
非负约束 x1,x2≥0
LINGO代码
model: max=72*x1+64*x2; [milk] x1+x2<50; [time] 12*x1+8*x2<480; [cpct] 3*x1<100; end
结果
Global optimal solution found. Objective value: 3360.000 Infeasibilities: 0.000000 Total solver iterations: 2 Variable Value Reduced Cost X1 20.00000 0.000000 X2 30.00000 0.000000 Row Slack or Surplus Dual Price 1 3360.000 1.000000 MILK 0.000000 48.00000 TIME 0.000000 2.000000 CPCT 40.00000 0.000000
Matlab求解
f=(-1)*[72 64]; %因为题中要求最大值这里取相反数,linprog是求最小值的 A=[1 1;12 8;3 0;-1 0;0 -1]; b=[50 480 100 0 0]; [xopt fxopt]=linprog(f,A,b) -fxopt %再取负得到最大值
代码2
f=(-1)*[72 64]; %因为题中要求最大值这里取相反数,linprog是求最小值的 A=[1 1;12 8;3 0]; b=[50 480 100]; LB=[0;0]; [xopt fxopt]=linprog(f,A,b,[],[],LB) -fxopt %再取负得到最大值
结果
Optimization terminated. xopt = 20.0000 30.0000 fxopt = -3.3600e+003 ans = 3.3600e+003
线性规划的一般形式
minf=c1x1+c2x2+...+cnxn\min f=c_1x_1+c_2x_2+...+c_nx_n
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪a11x1+a12x2+...+a1nxn≤b1a21x1+a22x2+...+a2nxn≤b2..............................am1x1+am2x2+...+amnxn≤bms.t.\left\{
\begin{aligned}
a_{11}x_1+a_{12}x_2+...+a_{1n}x_n ≤b_1 \\
a_{21}x_1+a_{22}x_2+...+a_{2n}x_n ≤b_2 \\
..............................\\
a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n ≤b_m
\end{aligned}
\right.
xi≥0(i=1,2,...n)x_i≥0 (i=1,2,...n)
用矩阵表示是
minf=cTX\min f=c^TX
s.t.AX≤b,X≥0s.t. AX≤b,X≥0
例:求解线性规划问题
maxf=3x1−x2−x3\max f=3x_1-x_2-x_3
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪x1−x2+x3≤11−4x1+x2+2x3≥32x1−x3=−1xi≥0,i=1,2,3s.t.\left\{
\begin{aligned}
x_1-x_2+x_3 ≤11 \\
-4x_1+x_2+2x_3 ≥3 \\
2x_1-x_3=-1\\
x_i≥0,i=1,2,3
\end{aligned}
\right.
解:考虑到linprog函数只能解决形如
minf=cTX\min f=c^TX
s.t.⎧⎩⎨⎪⎪AX≤Baeqx=beqxX≥0
s.t.\left\{
\begin{aligned}
AX≤B \\
aeqx=beqx \\
X≥0
\end{aligned}
\right.
变形为下面这个形式
minf=−3x1+x2+x3\min f=-3x_1+x_2+x_3
s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪2x1−x3=−1x1−x2+x3≤114x1−x2−2x3≤−3xi≥0,i=1,2,3s.t.\left\{
\begin{aligned}
2x_1-x_3=-1\\
x_1-x_2+x_3 ≤11 \\
4x_1-x_2-2x_3 ≤-3 \\
x_i≥0,i=1,2,3
\end{aligned}
\right.
matlab代码
c=[-3;1;1]; A=[1 -2 1;4 -1 -2]; b=[11;-3]; aeq=[2 0 -1]; beq=-1; vlb=[0;0;0]; [x,fval]=linprog(c,A,b,aeq,beq,vlb)
结果
Optimization terminated. x = 4.0000 1.0000 9.0000 fval = -2.0000
对应原来的线性规划中即知目标函数的最大值为2,此时
x1=4,x2=1,x3=9x_1=4,x_2=1,x_3=9
LINGO求解
model: max=3*x1-x2-x3; x1-2*x2+x3<=11; -4*x1+x2+2*x3>=3; 2*x1-x3=-1; end
结果
Global optimal solution found. Objective value: 2.000000 Infeasibilities: 0.000000 Total solver iterations: 0 Variable Value Reduced Cost X1 4.000000 0.000000 X2 1.000000 0.000000 X3 9.000000 0.000000 Row Slack or Surplus Dual Price 1 2.000000 1.000000 2 0.000000 0.3333333 3 0.000000 -0.3333333 4 0.000000 0.6666667
相关文章推荐
- MATLAB中floor的运用
- MATLAB中FFT的使用方法
- matlab 条件删除某元胞元素时不能使用for,而应该使用while进行遍历所有元胞
- matlab 计算连通域
- Matlab图像处理系列4———傅立叶变换和反变换的图像
- MATLAB新手教程
- 图片尺寸批量resize的matlab并行代码
- 如何创建一个四维的矩阵,存储多个3通道彩色图片
- matlab中exist函数说明
- Matlab坐标系绘制
- matlab绘图函数plot
- MatLab之HDL coder
- Matlab电路问题的仿真
- MATLAB中给图像加高斯噪声时imnoise的方差参数问题
- MatLab之Simulink之simple model
- matlab代码到C++代码转化及使用全攻略
- matlab pca 函数 输入输出数据的意义
- libsvm matlab使用总结
- matlab workspace中的图标的含义及给数组和cell array赋值
- 使用MATLAB和UML进行嵌入式开发---四轴飞行器室内定位及导航系统 开篇(一)