数学建模 | 第一章 线性规划例题

第一章 线性规划例题篇

例1.1 某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。生产甲机床需用A、B机器加工,加工时间分别为每台2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各几台,才能使总利润最大?

:决策变量应设该厂生产x1台甲机床和x2台乙机床时总利润最大,则x1和x2应满足:

m a x max max z = 4 x 1 + 3 x 2 , z=4x_1+3x_2, z=4x1+3x2,

s . t . = { 2 x 1 + x 2 ≤ 10 , x 1 + x 2 ≤ 8 , x 2 ≤ 7 , x 1 , x 2 ≥ 0 。 s.t.=\begin{cases}2x_1+x_2\leq10,\\x_1+x_2\leq8,\\x_2\leq7,\\x_1,x_2\geq0。\end{cases} s.t.= 2x1+x210,x1+x28,x27,x1,x20

化为Matlab标准型,即:

m i n min min w = − 4 x 1 − 3 x 2 , w=-4x_1-3x_2, w=4x13x2,

s . t . = { [ 2 1 1 1 0 2 ] [ x 1 x 2 ] ≤ [ 10 8 7 ] , [ x 1 x 2 ] T ≥ [ 0 0 ] T 。 s.t.=\begin{cases}\left[\begin{matrix}2&1\\1&1\\0&2\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\end{matrix}\right]\leq\left[\begin{matrix}10\\8\\7\end{matrix}\right],\\\left[\begin{matrix}x_1&x_2\end{matrix} \right]^T\geq\left[\begin{matrix}0&0\end{matrix}\right]^T。\end{cases} s.t.= 210112 [x1x2] 1087 ,[x1x2]T[00]T

👀答案:求得的最优解为x1=3.25,x2=3.5,对应的最优值z=23.5。

求解的Matlab程序为:

c = [-4,-3];
a = [2,1;1,1;0,2];
b = [10,8,7];
[x,y] = linprog(c,a,b,[],[],zeros(2,1))
x,y=-y

求解的Lingo程序为:

model:

sets:
col/1..2/:c,x;
row/1..3/:b;
lingks(row,col):a;
endsets

data:
c = 4 3;
a = 2 1 1 1 0 2;
b = 10 8 7;
enddata

max=@ sum(col:c*x);
@ for(row(i):@ sum(col(j):a(i,j)*x(j))<b(i));

end 

例1.2 求解下列线性规划问题
m a x max max z = 2 x 1 + 3 x 2 − 5 x 3 , z=2x_1+3x_2−5x_3, z=2x1+3x25x3,
s . t . = { x 1 + x 2 + x 3 = 7 , 2 x 1 − 5 x 2 + x 3 ≥ 10 , x 1 + 3 x 2 + x 3 ≤ 12 , x 1 , x 2 , x 3 ≥ 0 。 s.t.=\begin{cases}x_1+x_2+x_3 = 7,\\2x_1-5x_2+x_3 \geq10,\\x_1+3x_2+x_3 \leq12,\\x_1, x_2 , x_3\geq0。\end{cases} s.t.= x1+x2+x3=7,2x15x2+x310,x1+3x2+x312,x1,x2,x30

:化为Matlab标准型,即:

m i n min min w = − 2 x 1 − 3 x 2 + 5 x 3 , w=-2x_1-3x_2+5x_3, w=2x13x2+5x3,
s . t . = { [ − 2 5 − 1 1 3 1 ] [ x 1 x 2 x 3 ] ≤ [ − 10 12 ] , [ 1 1 1 ] ⋅ [ x 1 x 2 x 3 ] T = 7 , [ x 1 x 2 x 3 ] T ≥ [ 0 0 0 ] T 。 s.t.=\begin{cases}\left[\begin{matrix}-2&5&-1\\1&3&1\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\x_3\end{matrix}\right]\leq\left[\begin{matrix}-10\\12\end{matrix}\right],\\\left[\begin{matrix}1&1&1\end{matrix} \right]·\left[\begin{matrix}x_1&x_2&x_3\end{matrix}\right]^T=7,\\\left[\begin{matrix}x_1&x_2&x_3\end{matrix} \right]^T\geq\left[\begin{matrix}0&0&0\end{matrix}\right]^T。\end{cases} s.t.= [215311] x1x2x3 [1012],[111][x1x2x3]T=7,[x1x2x3]T[000]T

👀答案:求得的最优解为x1=6.4286,x2=0.5714,x3=0,对应的最优值z=14.5714

求解的Matlab程序为:

c=[-2;-3;5]; 
a=[-2,5,-1;1,3,1]; 
b=[-10;12]; 
aeq=[1,1,1]; 
beq=7; 
[x,y]=linprog(c,a,b,aeq,beq,zeros(3,1)) 
x,y=-y  % 最终解加负号,转换为最大值

求解的Lingo程序为:

model:

	sets:
	row/1..2/:b;
	col/1..3/:c,x;
	lingks(row,col):a;
	endsets

	data:
	c = 2 3 -5;
	a = -2 5 -1 1 3 1;
	b = -10 12;
	enddata

	max=@ sum(col:c*x);
	@ for(row(i):@ sum(col(j):a(i,j)*x(j))<b(i));
	@ sum(col:x)=7;

end 

例1.3 求解下列线性规划问题
m i n min min z = 2 x 1 + 3 x 2 + x 3 , z=2x_1+3x_2+x_3, z=2x1+3x2+x3,
s . t . = { x 1 + 4 x 2 + 2 x 3 ≥ 8 , 3 x 1 + 2 x 2 ≥ 6 , x 1 , x 2 , x 3 ≥ 0 。 s.t.=\begin{cases}x_1+4x_2+2x_3 \geq8,\\3x_1+2x_2 \geq6,\\x_1, x_2 , x_3\geq0。\end{cases} s.t.= x1+4x2+2x38,3x1+2x26,x1,x2,x30

:因为问题本身求解的是min值,所以无需再次化为Matlab标准型

👀答案:求得的最优解为x1=0.8066,x2=1.7900,x3=0.0166,对应的最优值z=7.0000

求解的Matlab程序为:

c=[2;3;1]; 
a=[1,4,2;3,2,0]; 
b=[8;6];  
[x,y]=linprog(c,-a,-b,[],[],zeros(3,1)) %这里没有等式约束,所以为两个【】【】

求解的Lingo程序为:

model:

	sets:
	row/1..2/:b;
	col/1..3/:c,x;
	lingks(row,col):a;
	endsets
	
	data:
	c = 2 3 1;
	a = 1 4 2 3 2 0;
	b = 8 6;
	enddata
	
	min=@ sum(col:c*x);
	@ for(row(i):@sum(col(j):a(i,j)*x(j))>b(i));

end 

例1.4 求解下列数学规划问题
m i n min min z = ∣ x 1 ∣ + 2 ∣ x 2 ∣ + 3 ∣ x 3 ∣ + 4 ∣ x 4 ∣ , z=|x_1|+2|x_2|+3|x_3|+4|x_4|, z=x1+2∣x2+3∣x3+4∣x4,
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 ≤ − 0.5 。 s.t.=\begin{cases}x_1-x_2+x_3-x_4 \leq-2,\\x_1-x_2+x_3-3x_4 \leq-1,\\x_1-x_2-2x_3+3x_4\leq-0.5。\end{cases} s.t.= x1x2+x3x42,x1x2+x33x41,x1x22x3+3x40.5

:做变量变换 u i = x i + ∣ x i ∣ 2 u_i=\frac{x_i+|x_i|}{2} ui=2xi+xi v i = ∣ x i ∣ − x i 2 v_i=\frac{|x_i|-x_i}{2} vi=2xixi i = 1 , 2 , 3 , 4 i=1,2,3,4 i=1,2,3,4,并把新变量重新排序成一维向量 y = [ u v ] = [ u 1 , … , u 4 , v 1 , … v 4 ] T y=\left[\begin{matrix}u\\v\end{matrix}\right]=\left[\begin{matrix}u_1,…,u_4,v_1,…v_4\end{matrix}\right]^T y=[uv]=[u1,,u4,v1,v4]T,则可把模型变换为线性规划模型:
m i n min min [ 1 , 2 , 3 , 4 , 1 , 2 , 3 , 4 ] T y \left[\begin{matrix}1,2,3,4,1,2,3,4\end{matrix}\right]^Ty [1,2,3,4,1,2,3,4]Ty
s . t . = { [ A − A ] [ u v ] ≤ [ − 2 − 1 − 0.5 ] T , y ≥ 0 。 s.t.=\begin{cases}\left[\begin{matrix}A&-A\end{matrix}\right]\left[\begin{matrix}u\\v\end{matrix}\right]\leq\left[\begin{matrix}-2&-1&-0.5\end{matrix}\right]^T,\\y\geq0。\end{cases} s.t.= [AA][uv][210.5]T,y0
其中 A = [ 1 − 1 − 1 1 1 − 1 1 − 3 1 − 1 − 2 3 ] A=\left[\begin{matrix}1&-1&-1&1\\1&-1&1&-3\\1&-1&-2&3\end{matrix}\right] A= 111111112133

👀答案:求得的最优解为x1=-2,x2=x3=x4=0,对应的最优值z=-2

求解的Matlab程序为:

clc,clear
c=1:4;c=[c,c]'; %构造价值列向量
a=[1 -1 -1 1;1 -1 1 -3;1 -1 -2 3];
a=[a,-a]; %构造变换后新的系数矩阵
b=[-2 -1 -1/2]';
[y,z]=linprog(c,a,b,[],[],zeros(8,1)) %这里没有等式约束,对应的矩阵为空矩阵
x=y(1:4)-y(5:end) %变换到原问题的解,x=u-v

求解的Lingo程序为:

model:

	sets:
	row/1..2/:b;
	col/1..3/:c,x;
	lingks(row,col):a;
	endsets
	
	data:
	c = 2 3 1;
	a = 1 4 2 3 2 0;
	b = 8 6;
	enddata
	
	min=@ sum(col:c*x);
	@ for(row(i):@sum(col(j):a(i,j)*x(j))>b(i));

end 

例1.5 求解下列线性规划问题
m i n min min z = x 1 + x 2 , z=x_1+x_2, z=x1+x2,
s . t . = { 2 x 1 + 4 x 2 = 5 , x 1 ≥ 0 , x 2 ≥ 0 。 s.t.=\begin{cases}2x_1+4x_2=5,\\x_1\geq0,x_2\geq0。\end{cases} s.t.={2x1+4x2=5,x10,x20

:显然这是一个简单的二元一次方程联立求解,之所以此处有本例题,旨在说明该线性规划问题有最优实数解,但是对应的整数规划无可行解。

👀答案:求得的最优解为x1=0,x2=1.25,对应的最优值z=1.25

例1.6 求解下列线性规划问题
m i n min min z = x 1 + x 2 , z=x_1+x_2, z=x1+x2,
s . t . = { 2 x 1 + 4 x 2 = 6 , x 1 ≥ 0 , x 2 ≥ 0 。 s.t.=\begin{cases}2x_1+4x_2=6,\\x_1\geq0,x_2\geq0。\end{cases} s.t.={2x1+4x2=6,x10,x20

:同例1.5,本例题旨在说明该线性规划问题有最优实数解,若限制为整数,有可行解但最优解值变差。

👀答案:求得的最优解为x1=0,x2=1.5,对应的最优值z=1.5;若限制为整数,得x1=1,x2=1,对应的最优值z=2

例1.7 (随机取样法) y = x 2 y=x^2 y=x2 y = 12 − x y=12-x y=12x x x x轴在第一象限围成一个曲边三角形。设计一个随机实验,求该图形面积的近似值。

:设计的随机试验的思想如下:在矩形区域 [ 0 , 12 ] × [ 0 , 9 ] [0,12]\times[0,9] [0,12]×[0,9]上产生服从均匀分布的107个随机点,统计随机点落在曲边三角形的频数,则曲边三角形的面积近似为上述矩阵的面积乘以频率。

👀答案:该图形面积的近似值在49.5附近,由于是随机模拟,每次的结果都是不一样的。

求解的Matlab程序为:

clc,clear
x=unifrnd(0,12,[1,10000000]);
y=unifrnd(0,9,[1,10000000]);
pinshu=sum(y<x.^2&x<=3)+sum(y<12-x&x>=3);
area_appr=12*9*pinshu/10^7

例1.8 (指派问题)求解下列指派问题,已知指派矩阵为
[ 3 8 2 10 3 8 7 2 9 7 6 4 2 7 5 8 4 2 3 5 9 10 6 9 10 ] \left[\begin{matrix}3&8&2&10&3\\8&7&2&9&7\\6&4&2&7&5\\8&4&2&3&5\\9&10&6&9&10\end{matrix}\right] 3868987441022226109739375510

:这里需要把二维决策变量 x i j ( i , j = 1 , … 5 ) x_{ij}(i,j=1,…5) xij(i,j=1,5)变成一维决策变量 y k ( k = 1 , … , 25 ) y_k(k=1,…,25) yk(k=1,,25)

👀答案:求得的最优指派方案为 x 15 = x 23 = x 32 = x 44 = x 51 = 1 x_{15}=x_{23}=x_{32}=x_{44}=x_{51}=1 x15=x23=x32=x44=x51=1,最优值为21。

求解的Matlab程序为:

clc,clear
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5;8 4 2 3 5;9 10 6 9 10];
c=c(:);a=zeros(10,25);intcon=1:25;
for i=1:5
	a(i,(i-1)*5+1:5*i)=1;
	a(5+i,i:5:25)=1;
end
b=ones(10,1);lb=zeros(25,1);ub=ones(25,1);
x=intlinprog(c,intcon,[],[],a,b,lb,ub);
x=reshape(x,[5,5])

运行结果
求解的Lingo程序为:

model:

	sets:
	var/1..5/;
	link(var,var):c,x;
	endsets
	
	data:
	c=3 8 2 10 3
		8 7 2 9 7
		6 4 2 7 5
		8 4 2 3 5
		9 10 6 9 10;
	enddata

	min=@ sum(link:c*x);
	@ for(var(i):@ sum(var(j):x(i,j))=1);
	@ for(var(j):@ sum(var(i):x(i,j))=1);
	@ for(link:@ bin(x));
	
end 

例1.9 (混合整数规划问题)求解如下的混合整数规划问题
m i n min min z = − 3 x 1 − 2 x 2 − x 3 z=-3x_1-2x_2-x_3 z=3x12x2x3,
s . t . = { x 1 + x 2 + x 3 ≤ 7 , 4 x 1 + 2 x 2 + x 3 = 12 , x 1 , x 2 ≥ 0 , x 3 = 0 或 1 。 s.t.=\begin{cases}x_1+x_2+x_3\leq7,\\4x_1+2x_2+x_3=12,\\x_1,x_2\geq0,\\x_3=0或1。\end{cases} s.t.= x1+x2+x37,4x1+2x2+x3=12,x1,x20,x3=01

👀答案:求得的最优解为 x 1 = 0 x_1=0 x1=0 x 2 = 5.5 x_2=5.5 x2=5.5 x 3 = 1 x_3=1 x3=1,最优值为 z = − 12 z=-12 z=12

求解的Matlab程序为:

clc,clear
c=[-3;-2;-1];intcon=3; % 整数变量的地址
a=ones(1,3);b=7;
aeq=[4 2 1];beq=12;
lb=zeros(3,1);ub=[inf;inf;1]; % x(3)为0-1变量
x=intlinprog(c,intcon,a,b,aeq,beq,lb,ub)

运行结果

例1.10 (蒙特卡洛法)已知非线性整数规划为
m a x max max z = x 1 2 + x 2 2 + 3 x 3 2 + 4 x 4 2 + 2 x 5 2 − 8 x 1 − 2 x 2 − 3 x 3 − x 4 − 2 x 5 z={x_1}^2+{x_2}^2+3{x_3}^2+4{x_4}^2+2{x_5}^2-8x_1-2x_2-3x_3-x_4-2x_5 z=x12+x22+3x32+4x42+2x528x12x23x3x42x5
s . t . = { 0 ≤ x i ≤ 99 , i = 1 , … , 5 , x 1 + x 2 + x 3 + x 4 + x 5 ≤ 400 , x 1 + 2 x 2 + 2 x 3 + x 4 + 6 x 5 ≤ 800 , 2 x 1 + x 2 + 6 x 3 ≤ 200 , x 3 + x 4 + 5 x 5 ≤ 200 。 s.t.=\begin{cases}0\leq{x_i}\leq99,i=1,…,5,\\x_1+x_2+x_3+x_4+x_5\leq400,\\x_1+2x_2+2x_3+x_4+6x_5\leq800,\\2x_1+x_2+6x_3\leq200,\\x_3+x_4+5x_5\leq200。\end{cases} s.t.= 0xi99,i=1,,5,x1+x2+x3+x4+x5400,x1+2x2+2x3+x4+6x5800,2x1+x2+6x3200,x3+x4+5x5200

:如果用显枚举法试探,则共需计算 ( 100 ) 5 = 1 0 10 (100)^5=10^{10} (100)5=1010个点,其计算量非常之大。然而应用蒙特卡洛去随机计算106个点,便可找到满意解,那么这种方法的可信度究竟怎样呢?下面就随机取样采集106个点计算,应用概率理论来估计一下可信度。
不失一般性,假定一个整数规划的最优点不是孤立的奇点。
假设目标函数落在高值区的概率分别为0. 01、0. 00001,则当计算106个点后,至少有一个点能落在高值区的概率分别为1-0. 991000000≈0. 99···99(100多位),1-0.999991000000≈0.999954602。

👀答案:使用Lingo求得的全局最优解为 x 1 = 50 x_1=50 x1=50 x 2 = 99 x_2=99 x2=99 x 3 = 0 x_3=0 x3=0 x 4 = 99 x_4=99 x4=99 x 5 = 20 x_5=20 x5=20,最优值为 z = 52368 z=52368 z=52368;使用Matlab求得的因为是随机模拟,所以每次的运行结果都是不一样的。

(1)首先编写M文件mente.m定义目标函数f和约束向量函数g,程序如下:

function[f,g]=mengte(x);
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)^2-8*x(1)-2*x(2)-3*x(3)-x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];

(2)求解的Matlab程序为:

rand('state',sum(clock)); % 初始化随机数发生器
p0=0;
tic % 计时开始
for i=1:10^6
	x=randi([0,99],1,5); % 产生一行五列的区间[0,99]上的随机整数
	[f,g]=mengte(x);
	if all(g<=0)
		if p0<f
			x0=x;p0=f; % 记录下当前较好的解
		end
	end
end
x0,p0
toc % 计时结束	

(3)求解的Lingo程序为:

model:

	sets:
	row/1..4/:b;
	col/1..5/:c1,c2,x;
	link(row,col):a;
	endsets

	data:
	c1=1,1,3,4,2;
	c2=--8,-2,-3,-1,-2;
	a=1 1 1 1 1
		1 2 2 1 6
		2 1 6 0 0 
		0 0 1 1 5;
	b=400,800,200,200;
	enddata

	max=@ sum(col:c1*x^2+c2*x);
	@ for(row(i):@ sum(col(j):a(i,j)*x(j))<b(i));
	@ for(col:@ gin(x));
	@ for(col:@ bnd(0,x,99));

end
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 第6章《非线性规划的Matlab实现》课件主要介绍了如何使用Matlab软件进行非线性规划问题的求解。 该课件分为四个部分:非线性规划问题的定义、优化算法的选择、求解非线性规划问题的步骤、以及Matlab的非线性规划求解工具箱。 课件首先介绍了非线性规划问题的基本概念和数学定义,阐述了目标函数为非线性函数、变量约束为非线性等式或非线性不等式的情况。然后介绍了常用的非线性规划求解算法,包括单纯形法、梯度下降法、牛顿法等,其中指出不同算法适用于不同类型的非线性规划问题。 接下来,课件详细介绍了非线性规划问题的求解步骤,包括问题建模、初始点的选择、收敛判据的确定等。同时,还介绍了Matlab中的非线性规划求解工具箱,例如fmincon函数、lsqnonlin函数等,这些函数可以简化非线性规划问题的求解过程。 最后,课件通过一个实例演示了如何在Matlab环境下进行非线性规划问题的求解。演示中使用了fmincon函数进行求解,首先定义目标函数、约束条件和初始点等,然后通过调用fmincon函数得到最优解。 总的来说,该课件内容丰富,结构清晰,通过Matlab软件的应用,系统介绍了非线性规划问题的求解方法。对于需要进行非线性规划问题求解的研究人员和工程师来说,该课件是一份很好的学习资料。 ### 回答2: 第6章的课件主要介绍了非线性规划的matlab实现。非线性规划是指目标函数和约束条件中存在非线性项的最优化问题。 课件首先介绍了非线性规划的基本概念和问题的表达方式,然后详细介绍了matlab中非线性规划的求解方法和函数。 在matlab中,可以使用fmincon函数来求解非线性规划问题。该函数的输入参数包括目标函数,初始点,线性约束条件、非线性约束条件等。课件通过示例代码演示了如何使用fmincon函数来求解非线性规划问题。 此外,课件还介绍了如何处理不等式约束条件和等式约束条件,以及如何设置优化算法的参数。还介绍了如何设置目标函数和约束条件的梯度函数,以提高求解效率。 课件最后还介绍了一些其他常用的非线性规划求解函数和工具箱,如lsqnonlin函数、fminunc函数和Global Optimization Toolbox等。 通过学习本章课件,我对非线性规划问题的matlab求解方法有了更深入的了解和掌握。我能够通过fmincon函数来求解非线性规划问题,并能处理不同类型的约束条件。我还掌握了如何设置优化算法的参数以及如何提高求解效率。 总的来说,第6章非线性规划的matlab实现课件内容丰富,结构清晰,通过示例代码的演示,使我能够更加熟练地运用matlab来求解非线性规划问题。这对我今后的学习和工作都具有很大的帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值