线性规划问题
本文来源于司守奎编著的数学建模算法与应用
一、两道简单例题
例1.1:
某机床厂生产甲、乙两种机床,每台销售后的利润分别为4000元与3000元。生产甲机床需用A、B机器加工,加工时间分别为每台2h和1h;生产乙机床需用A、B、C三种机器加工,加工时间为每台各1h。若每天可用于加工的机器时数分别为A机器10h、B机器8h和C机器7h,问该厂应生产甲、乙机床各几台,才能使总利润最大?
解:设当生产x1台甲机床,x2台乙机床时总利润z最大
m
a
x
z
=
4000
x
1
+
3000
x
2
s
.
t
.
{
2
x
1
+
x
2
≤
10
x
1
+
x
2
≤
8
x
2
≤
7
x
1
,
x
2
>
0
max\,\,z=4000x_1+3000x_2 \\ s.t.\begin{cases} 2x_1+x_2\le 10\\ x_1+x_2\le 8\\ x_2\le 7\\ x_1,x_2>0\\ \end{cases}
maxz=4000x1+3000x2s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧2x1+x2≤10x1+x2≤8x2≤7x1,x2>0
matlab代码求解
注:matlab中linprog一般是用来求最小值的,为了求本例中
4000
x
1
+
3000
x
2
4000x_1+3000x_2
4000x1+3000x2的最大值,我们可以求他相反数的最小值,即
−
4000
x
1
−
3000
x
2
-4000x_1-3000x_2
−4000x1−3000x2的最小值,求得最小值的绝对值也就是原式的最大值。如果约束条件又大于等于的,则要改为小于等于(两边乘以负1)
f=[-4000,-3000]
a=[2,1;1,1;0,1]
b=[10;8;7]
low=zeros(2,1)
[x,y]=linprog(f,a,b,[],[],low)
即生产2台甲机床,6台乙机床,收益最大26000元
例1.2求解下列线性规划问题:
m
i
n
z
=
2
x
1
+
3
x
2
+
x
3
s
.
t
.
{
x
1
+
4
x
2
+
2
x
3
≥
8
3
x
1
+
2
x
2
≥
8
x
1
,
x
2
,
x
3
>
0
min\,\,z=2x_1+3x_2+x_3 \\ s.t.\begin{cases} x_1+4x_2+2x_3\ge 8\\ 3x_1+2x_2\ge 8\\ x_1,x_2,x_3>0\\ \end{cases}
minz=2x1+3x2+x3s.t.⎩⎪⎨⎪⎧x1+4x2+2x3≥83x1+2x2≥8x1,x2,x3>0
matlab代码
f=[2;3;1]
a=[1,4,2;3,2,0]
b=[8;6]
lb=zeros(3,1)
[x,min]=linprog(f,-a,-b,[],[],lb)
二、带有绝对值的线性规划问题
m i n z = ∣ x 1 ∣ + ∣ 2 x 2 ∣ + 3 ∣ x 3 ∣ + 4 ∣ x 4 ∣ s . t . { x 1 − x 2 − x 3 + x 4 ≤ − 2 x 1 − x 2 + x 3 − 3 x 4 ≤ − 1 x 1 − x 2 − 2 x 3 + 3 x 4 ≤ − 1 2 min\,\,z=\left| x_1 \right|+\left| 2x_2 \right|+3\left| x_3 \right|+4\left| x_4 \right| \\ s.t.\begin{cases} x_1-x_2-x_3+x_4\le -2\\ x_1-x_2+x_3-3x_4\le -1\\ x_1-x_2-2x_3+3x_4\le -\frac{1}{2}\\ \end{cases} minz=∣x1∣+∣2x2∣+3∣x3∣+4∣x4∣s.t.⎩⎪⎨⎪⎧x1−x2−x3+x4≤−2x1−x2+x3−3x4≤−1x1−x2−2x3+3x4≤−21
做变量代换 u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 , i = 1 , 2 , 3 , 4 并把新变量重新排序成 一维向量 y = [ u v ] = [ u 1 , u 2 , u 3 , u 4 , v 1 , v 2 , v 3 , v 4 ] T , 则可把模型变为线性规划模型 \text{做变量代换}u_i=\frac{x_i+\left| x_i \right|}{2}\text{,}v_i=\frac{\left| x_i \right|-x_i}{2}\text{,}i=1,2,3,4\text{并把新变量重新排序成} \\ \text{一维向量}y=\left[ \begin{array}{c} u\\ v\\ \end{array} \right] =\left[ u_1,u_2,u_3,u_4,v_1,v_2,v_3,v_4 \right] ^T,\text{则可把模型变为线性规划模型} 做变量代换ui=2xi+∣xi∣,vi=2∣xi∣−xi,i=1,2,3,4并把新变量重新排序成一维向量y=[uv]=[u1,u2,u3,u4,v1,v2,v3,v4]T,则可把模型变为线性规划模型:
c=1:4;c=[c,c]'
a=[1,-1,1,-1;1,-1,1,-3;1,-1,-2,3]
aa=[a,-a]
b=[-2;-1;-1/2]
[y,z]=linprog(c,aa,b,[],[],zeros(8,1))
x=y(1:4)-y(5:end)
最优值z=2
投资的收益和风险
市场上有n种资产s(i=1,2,n)可以选择,现用数额为M的相当大的资金作一个时期的投资。这n种资产在这一时期内购买s的平均收益率为r;,风险损失率为q;,投资越分散,总的风险越少,总体风险可用投资的s中最大的一个风险来度量。
购买s;时要付交易费,费率为p,当购买额不超过给定值u;时,交易费按购买u;计算。另外,假定同期银行存款利率是ro,既无交易费又无风险(ro=5%)。已知n=4时相关数据如表1.1所列。文章来源:https://www.toymoban.com/news/detail-480286.html
clc,clear
a=0;
hold on
while a<0.05
c=[-0.05,-0.27,-0.19,-0.185,-0.185];
A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];
b =a*ones(4,1);
Aeq=[1,1.01,1.02,1.045,1.065];
beq=1;
LB=zeros(5,1);
[x,Q]=linprog(c,A,b,Aeq,beq,LB);
Q=-Q;
plot(a,Q,'*k');
a=a+0.001;
end
xlabel('a'),ylabel('Q')
文章来源地址https://www.toymoban.com/news/detail-480286.html
到了这里,关于Matlab线性规划问题求解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!