数学建模优化类型题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目1产销量的最佳安排
某厂生产的某种产品有甲、乙两个型号,假设该工厂的产品都能售出,并等于市场上的销量。
工厂的利润既取决于销量和(单件)价格,也依赖于产量和(单件)成本,按照市场经济规律,甲的价格会随其销量的增长而降低,同时乙的销量的增长也会使甲的价格有一定的下降;乙的价格遵循同样的规律。
而甲、乙的成本都随其各自产量的增长而降低,且各有一渐进值。
请你为该工厂设计一个最佳的产销量安排计划,即确定两个型号各自的产量,使总的利润最大。
解答提示
1.无约束优化模型建立与求解
记甲、乙两个型号的产(销)量分别为x1和x2,价格分别为p1和p2,成本分别为q1和q2。
简单地假设每个型号的价格与两个型号的销量成线性关系,即
,,,并且合理地设(为什么?)。
简单地假设每个型号的成本与本型号的产量服从负指数关系,且有渐进值,即,,。
于是总利润为
问题化为求解。
设定如下一组数据:
,,输入MatLab求解,得到结果为:甲的产量为23.9025,乙的产量为62.4977,最大利润为6413.5。
查看程序代码
function y=fun(x)
y1=((100-x(1)-0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1);
y2=((280-0.2*x(1)-2*x(2))-(100*exp(-0.02*x(2))+30))*x(2);
y=-y1-y2;
x0=[50,70];
[x,y]=fminunc(@fun,x0),
z=-y
题目2饮料厂的生产计划
某饮料厂只生产一种饮料用以满足市场需求。
该厂销售科根据市场预测,已经确定了下一个月(未来四周)该饮料的需求量。
该厂生产计划科根据本厂实际列出了一个生产计划数据表(如下表所示)。
根据此表第二栏(生产能力)的数据,该厂能够提前完成生产任务,但如果周末有产品库存,每千箱饮料的库存费
为
则应如何安排生产, 可以保证按时满足市场需求, 且使总费用最小?
1. 线性规划模型建立与求解
(注意:此提示的数据是参考默认输入的数据值,请注意比较)
本题目主要考察线性规划模型建立与求解。
这一生产计划问题涉及多个生产阶段,需要考虑多个阶段中的生产和库存策略,使总的生产成本和库存费用之和最小。
这种涉及多个生产阶段的生产计划问题是多阶段生产计划问题,在实际中广泛存在。
设未来四周该饮料的生产数量分别为x1, x2, x3,x4,周末的库存数量分别为y1, y2, y3,y4,工厂的月利润为z。
在题目所给假设下,y4=0,可得如下线性规划模型:
(1)
s.t (2-1)
(2-2)
(2-3)
(2-4)
(3)
(4)
以上目标函数(1)是对包括生产费和库存费在内的总费用求最小,约束(2-1)、(2-2)、(2-3)、(2-4)描述了需求、产量和库存之间的关系(通常称为物流平衡条件),(3)表示的是生产能力限制,(4)是非负限制。
将以上模型输入matlab求解,可以得到最优解如下:
= (15,40,25,20,0,15,5),最小总费用为528(千元)。
查看程序代码
c=[5.0,5.1,5.4,5.5,0.2,0.2,0.2];
A=eye(4);
AA=[-1,0,0;1,-1,0;0,1,-1;0,0,1];
A2=[A,AA];
b2=[15,25,35,25];
v1=zeros(1,7);
v2=[30,40,45,20,Inf,Inf,Inf];
opt=optimset('LargeScale','off');
x=linprog(c,[],[],A2,b2,v1,v2,[],opt)
f=c*x
题目3 投资组合问题
某投资公司经理正在考虑将
从所有上市交易的股票中选择了三种股票作为侯选投资对象。
经过分析,该经理
认为每年股票1的期望收益为每股方差为股票2的期望收益为
每股3的期望收益为每股
此外,股票1、2收益的协方差为股票1、3收益的协方差为
股票2、3收益的协方差为目前股票1、2、3的市价分别为每股
1)如果该投资人期望今年得到的投资回报,则应如何投资?
2)画出投资回报与风险之间的关系图。
1.问题1)的模型建立与求解
(注意:此提示的数据是参考默认输入的数据值,请注意比较)
本题目主要考察二次规划模型建立与求解。
决策变量分别用x1、x2和 x3表示投资股票1、2、3的数量。
国内股票通常以"一手"(100股)为最小单位出售,所以这里股票数量以100股为单位。
注意此时期望收益就是以百元为单位。
决策目标一种衡量投资风险的方法是用收益的方差来衡量,即
Z = (1) 于是,决策目标可以表示为
Min (2)
约束条件投资的期望收益为5x1+8x2 +10x3,该投资人期望今年得到20%的投资回报,即
5x1+8x2 +10x3 >= 1000 (3)
实际投资时投资者可能还面临许多其他约束条件。
我们在这里只考虑可用于投资的资金的限制,即
20x1+25x2+30x3≤ 5000 (4)
模型求解
(2)(3)(4)共同构成本题的优化模型(当然,加上x1和 x2的非负限制)。
这一模型是一个特殊的非线性规划,即二次规划(QP-Quadratic Programming)。
用MATLAB求解得到: x1=131.114130434783,
x2=15.285326086957, x3 =22.214673913043.
由于在投资时购买股票的数量必须是整数(手),我们简单将上述结果取整(上整数或下整数)。
例如: x1=132,x2=15,x3=22。
该投资人应投资股票1、2、3的数量分别为 13200、1500和2200(股)。
所用去的资金为
13200′20+1500′25+2200′30 = 367500(元),期望利润为
13200′5+1500′8+2200′10 = 100000 (元),此时的风险(方差)为 68116 (均方差约为261(百元))。
2. 投资回报与风险之间的关系图:
H=[8 5 -20;5 72 -30;-20 -30 200];
A=[-5 -8 -10;20 25 30];
c=[0 0 0];
b=[-1000,5000];
x=quadprog(H,c,A,b)
STD=sqrt(x'*H*x/2)
REV=-A(1,:)*x
计算结果为:
x =
1.0e+002 *
1.31114130434783
0.15285326086957
0.22214673913043
STD =
2.609686179700873e+002
REV =
1000
H=[8 5 -20;5 72 -30;-20 -30 200];
A=[-5 -8 -10;20 25 30];
c=[0 0 0];
v1=[0 0 0];
for i=1:160,
b=[-i*10,5000];
x=quadprog(H,c,A,b,[],[],v1);
STD(i)=sqrt(x'*H*x/2);
REV(i)=-A(1,:)*x;
end
plot(REV,STD);
xlabel('REV($100)');
ylabel('STD($100)');
题目4 供应与选址
某公司有6个建筑工地要开工,每个工地的位置(用平面坐标x, y表示,距离单位:公里)及水泥日用量d(吨)由下表给出。
拟建两个料场,日储量各
有
并制定每天的供应计划,即从两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。
1.模型建立与求解
(注意:此提示的数据是参考默认输入的数据值,请注意比较)
记工地的位置为,水泥日用量为;料场位置为,
日储量为;从料场j向工地i的运送量为C ij。
这个优化问题的目标函数(总吨公里数)可表为
各工地的日用量必须满足,所以
各料场的运送量不能超过日储量,所以
要同时确定料场的位置和运送量,在同样条件下使总吨公里数最小。
这是一个非线性规划问题,用MATLAB解得:
新料场位置
总吨公里数为85.3。
MATLAB程序
2. MATLAB程序
为了减少变量,我们只把从料场1向工地i的运送量作为变量,料场2向工地i的运送量可以用工地i的需求量和料场1向工地i的运送量表示出来。
MATLAB 程序如下:
function f=shili084fun(x)
a=[1.25,8.75,0.5,5.75,3,7.25];
b=[1.25,0.75,4.75,5,6.5,7.75];
% x(1:6): quantity from (x(13), x(14)) to (a(i),b(i))
% x(7:12): quantity from (x(15), x(16)) to (a(i),b(i))
f=0;
for i=1:6
d1=sqrt((x(13)-a(i))^2+(x(14)-b(i))^2);
d2=sqrt((x(15)-a(i))^2+(x(16)-b(i))^2);
f=d1*x(i)+d2*x(i+6)+f;
end
主程序为:
% LOCATION 1: (x(13),x(14)), quantity from 1: x(1:6)
% LOCATION 2: (x(15),x(16)), quantity from 2: x(7:12)
format short
a=[1.25 8.75 0.5 5.75 3 7.25];
b=[1.25 0.75 4.75 5 6.5 7.75];
d=[3 5 4 7 6 11]';
e=[20,20]';
% A1=[1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
% 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0]
A1=[ones(1,6),zeros(1,10);zeros(1,6),ones(1,6),zeros(1,4)];
B1=e;
% A2=[1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
% 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
% 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0
% 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0
% 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0
% 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0]
A2=[eye(6),eye(6),zeros(6,4)];
B2=d;
x0=[zeros(1,12) 5 1 2 7]; % 取料场位置的初值
v1=zeros(1,16);
v2=[d',d',[10,10,10,10]];
opt=optimset('LargeScale','off','MaxFunEvals',1000,'MaxIter',100); [x,f,exitflag,out]=fmincon('shili084fun',x0,A1,B1,A2,B2,v1,v2,[],opt)
结果:
x3 = 3.000 0.000 4.000 7.000 6.000 0.000
0 5.000 0 0.000 0 11.000
y3 = 3.2550 5.6524 7.2500 7.74999676
f3 = 85.2660
n3 = 446
题目5
又到了新学期的选课时间,正在上大学三年级的小刚为选什么课拿不定主意。
由于已经到了高年级,小刚在这个学期必须要选修的课程(必修课)只有一门(2个学分);但可以供他选修的限定选修课程(限选课)有8门,任意选修课程(任选课)有10门。
由于有些课程之间相互关联,所以可能在选修某门课程时必须同时选修其它某门课程。
小刚已经搜集到了这18门课程的学分数和要求同时选修课程的相应信息如下:
按照学校规定,学生每个学期选修的总学分数不能少于20学分,因此小刚必须在上述18门课程中至少选修18个学分。
学校还规定学生每学期选修任选课的比例不能少于所修总学分数(包括2个必修学分)的1/6,也不能超过所修总学分数的1/3。
小刚首先问自己:“为了达到学校的要求,我这学期最少应该选几门课?应该选哪几门?”
模型
用变量 x i 表示是否选修课程i,x i =1为选修课程i,x i =0为不选修课程i;“选修课程i时必须同时选修课程j”则可以用 x j³x i表示;又用变量 y1,y2 分别表示选修的限选课、任选课的学分数,y表示总学分数(包括2个必修学分)。
于是0-1规划模型为:
用LINGO软件求解
“选课方案”模型可以如下输入LINDO软件:sets:
course/1..18/:X,c;
endsets
data:
c=5,5,4,4,3,3,3,2,3,3,3,2,2,2,1,1,1,1; !学分; enddata
MIN = @sum(course:X);
y1 = @sum(course(i)|i#LE#8:c(i)*x(i));
y2 = @sum(course(i)|i#GE#9:c(i)*x(i));
y = y1 + y2 + 2;
y > 20 ;
y < 6*y2 ;
y > 3*y2 ;
X(1) > X(5);
X(2) > X(7) ;
X(8) > X(9) ;
X(6) > X(10) ;
X(4) > X(11) ;
X(5) > X(12) ;
X(7) > X(13) ;
X(6) > X(14) ;
@for(course:@bin(x));
END
求解结果:
Global optimal solution found. Objective value: 5.000000 Extended solver steps: 0
Total solver iterations: 78 Variable Value Reduced Cost
Y1 13.00000 0.000000
Y2 5.000000 0.000000
Y 20.00000 0.000000
X( 1) 1.000000 1.000000
X( 2) 1.000000 1.000000
X( 3) 0.000000 1.000000
X( 4) 0.000000 1.000000
X( 5) 0.000000 1.000000
X( 6) 1.000000 1.000000
X( 7) 0.000000 1.000000
X( 9) 0.000000 1.000000 X( 10) 1.000000 1.000000 X( 11) 0.000000 1.000000 X( 12) 0.000000 1.000000 X( 13) 0.000000 1.000000 X( 14) 1.000000 1.000000 X( 15) 0.000000 1.000000 X( 16) 0.000000 1.000000 X( 17) 0.000000 1.000000 X( 18) 0.000000 1.000000 C( 1) 5.000000 0.000000 C( 2) 5.000000 0.000000 C( 3) 4.000000 0.000000 C( 4) 4.000000 0.000000 C( 5) 3.000000 0.000000 C( 6) 3.000000 0.000000 C( 7) 3.000000 0.000000 C( 8) 2.000000 0.000000 C( 9) 3.000000 0.000000 C( 10) 3.000000 0.000000 C( 11) 3.000000 0.000000 C( 12) 2.000000 0.000000 C( 13) 2.000000 0.000000
C( 15) 1.000000 0.000000
C( 16) 1.000000 0.000000
C( 17) 1.000000 0.000000
C( 18) 1.000000 0.000000
Row Slack or Surplus Dual Price
1 5.000000 -1.000000
2 0.000000 0.000000
3 0.000000 0.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 10.00000 0.000000
7 5.000000 0.000000
8 1.000000 0.000000
9 1.000000 0.000000
10 0.000000 0.000000
11 0.000000 0.000000
12 0.000000 0.000000
13 0.000000 0.000000
14 0.000000 0.000000
15 0.000000 0.000000
即最优解为:x1 = x2 = x6 = x10 = x14 =1,其他 x i 为0,y1 = 13, y2 = 5,y= 20,最少要选修5门课,课号为1,2,6,10,14。
不过,这个问题的最优解不唯一。
例如,还有最优解:x2 = x4 = x6 = x10 = x11 =1,其他 x i 为0,y1 = 12, y2 = 6,y= 20。
一般来说,得到一个整数规划问题的所有最优解是很困难的(而且判断一个整数规划问题的最优解的个数也是困难的)。
那么,在选修最少学分(即20学分)的情况下,最多可以选修多少门课?只需要在上面的模型中约束y>20改为y=20, 并将模型中的MIN改成MAX。
求解得到如下结果:x1 = x4 = x6 = x8 = x15 = x16 = x17 = x18 =1,其他 x i 为0,y1 = 14, y2 = 4,y= 20,即最多可以选修8门课。
请读者试试是否还可以找到其他的最优解。
题目6:插值问题
已知定义在区间[-5,5]上的函数,对区间[-5,5]作一等
距划分,其分点为:
问题1:选择不断增长的分点数画出原函数与
Lagrange插值多项式在[-5,5]上的图象,比较并分析结果。
提示
问题2:选取=15,利用Lagrange插值、分段线性插值和三次样条插值,用m(=4)个插值点(等分)作图,比较结果,并将 x=4.9 处的插值和精确值作比较。
提示
m=101;
x=-5:10/(m-1):5;
t=zeros(1,21);l=-1:0.1:1;
y=x./(1+x.^4);z=0*x;plot(x,z,'r',x,y,'k:',t,l),gtext('y=x/(1+x^4)'), pause
n=3;
x0=-5:10/(n-1):5;
y0=x0./(1+x0.^4);
y1=lagr1(x0,y0,x);hold on,plot(x,y1,'b'),gtext('n=2'),pause,hold off n=5;
x0=-5:10/(n-1):5;
y0=x0./(1+x0.^4);
y2=lagr1(x0,y0,x);hold on,plot(x,y2,'b:'),gtext('n=4'),pause,hold off n=7;
x0=-5:10/(n-1):5;
y0=x0./(1+x0.^4);
y3=lagr1(x0,y0,x);hold on,plot(x,y3,'r'),gtext('n=6'),pause,hold off n=9;
x0=-5:10/(n-1):5;
y0=x0./(1+x0.^4);
y4=lagr1(x0,y0,x);hold on,plot(x,y4,'r:'),gtext('n=8'),pause,hold off n=11;
x0=-5:10/(n-1):5;
y0=x0./(1+x0.^4);
y5=lagr1(x0,y0,x);hold on,plot(x,y5,'m'),gtext('n=10')
n=15;
x0=-5:10/(n-1):5;
y0=x0./(1+x0.^4);
yy=4.9/(1+4.9^4);
yy1=lagr1(x0,y0,4.9);
yy2=interp1(x0,y0,4.9);
yy3=interp1(x0,y0,4.9,'spline');
s=' x yy yy1 yy2 yy3'
[4.9 yy yy1 yy2 yy3]
题目7 动态规划法求解整数规划的例子
例资源分配问题
某公司准备将M台设备分配给所属的N家工厂. 已知当分配台设备给工厂k 时,工厂k利用这些设备为公司创造的利润为(). 一般来说,所有且为增函数。
应当如何分配设备资源,使得公司总利润最大?
解该问题可以用整数规划模型描述如下:
由于不一定是线性函数,因此模型可能是非线性整数规划。
我们把它转化为多阶段决策过程,建立动态规划模型.
共有N个工厂,可以把问题分解为N个阶段:在任意阶段k(=N,N-1,¼,1),公司把手中拥有的设备分配给工厂k。
状态变量可以选为: 表示第k阶段初公司手中拥有的设备台数. 由题意可知.
决策变量可以选为: 表示第k阶段分配给工厂k的设备台数(). 因此状态转移方程为.
阶段k 的准则函数为.
用表示将手中现有资源依次分配给工厂k,k+1,…, N时的最大利润, 则有如下动态规划基本方程
由上式计算至时就得到原问题的结果。
具体算例设 M=4, N=3, 由下表给出。
设备数
可以看出是增函数。
显然有,(k=2,3). 递推求
解如下: 边界条件:
=0.
k=3, ,
.
k=2, ,
=0+0=0;
k=1, ,
得到为最大利润. 进一步分析计算过程,可以知道在
时成立. 因此最优解为。
注:上述方法可以推广到有两种(或更多)资源可供分配的二维(或多维)资源分配问题。