数学建模案例Word文档下载推荐.docx
《数学建模案例Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数学建模案例Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
functionroute=sroute1(A)%文件名
n1=size(A,1);
%求A的行数
n2=size(A,2);
%求A的列数
fori=1:
n1
forj=1:
(n2-1)
n3=max(A(i,j));
%求顶点数
end
W=zeros(n3,n3);
%生成一个对应的零矩阵
W(A(i,1),A(i,2))=A(i,3);
W(A(i,2),A(i,1))=A(i,3);
%将对应顶点间的距离放在矩阵对应的位置end
n3
if(i~=j)
ifW(i,j)==0
W(i,j)=1000;
%生成对应的带权连接矩阵
n=size(W,1);
%计算W的行数
W1=W(1,:
);
fori=1:
n
l(i)=W1(i);
%将W的第一行赋值于各顶点的起始最短距离
z(i)=1;
%将前驱顶点起始的赋值为1end
foru=1:
ifl(i)>
l(u)+W(u,i)%判断两顶点之间直接距离和通过另一个顶点作为枢纽到达的距离谁更小
l(i)=l(u)+W(u,i);
%取更小的那一条路线
z(i)=u;
%前驱顶点在此改变
forj=2:
3/22
W(u,j)+W(j,i)+l(u)%判断两顶点之间直接距离和通过另外两个顶点作为枢纽到达的距离谁更小
l(i)=W(u,j)+W(j,i)+l(u);
z(i)=j;
forq=1:
l(u)+W(u,j)+W(j,q)+W(q,i)%判断两顶点之间直接距离和通过另外三个顶点作为枢纽到达的距离谁更小
l(i)=l(u)+W(u,j)+W(j,q)+W(q,i);
z(i)=q;
l%输出最短距离
z%输出前驱顶点
A=[122;
138;
141;
236;
251;
347;
355;
361;
372;
479;
563;
589;
6
74;
686;
695;
785;
793;
895];
sroute1(A)
l=02713691211
z=116125356
四、第2题解题思路
拿到题目,我们就有个概念~480千米的路程由于所带食物和水有限,不可能
一次到达!
又得考虑到探险家的身体状况,保持健康的状态。
接着我们考虑设定中转
站,来回反复才能到达我们的目的地~但要求出如何设定储藏点才能更节省时间呢,
于是可列出公式:
(1)设置一个储藏点:
xx12
CAB
探险家每次最多可携带总量为20千克的食物,每公里消耗食物1/16千克,
4/22
则每次携带的食物可供走320千米。
最后一段最多可走320千米,于是设置一个储
藏点最近只能是在距离终点320千米的地方,可若是这样,则x1最小是160千米,
我们可设想在160千米出设置一个储藏点,那他所带的粮食只够他与这个储藏点
来回走而不能储藏粮食,所以不能走出沙漠~
xx+=480;
21
(2,n,1),x,d,x,d,n,a12
n为非负整数
x,x0;
12
(2)设置两个储藏点:
xxx312
ACDB
nn12
第一段路上的消耗量+第二段将要运送量第一段实际运送量;
第二段路上的消耗量+第三段将要消耗量第二段实际运送量;
可以此列出函数式并建立模型:
f,(2,n,1),x,(2,n,1),x,xmin,11223
x,x,x,480s.t.,123
(2,n,1),x,d,n,a,n,a,1121
(2,n,1),x,d,x,d,n,a,2232
x,x,x,0,123
n,n取非负整数。
(3)设置三个储藏点:
5/22
n3
xxx312
DEACB
nnn312
第二段路上的消耗量+第三段将要运送量第二段实际运送量;
第三段路上的消耗量+第四段将要消耗的量第三段实际运送量;
f,(2,n,1),x,(2,n,1),x,2,(n,1),x,xmin,1122334x,x,x,x,480s.t.,1234
(2,n,1),x,d,n,a,n,a2232
(2,n,1),x,d,x,d,n,a,3343
x,x,x,x,0,1234
nn,n取非负整数312
(4)设置四个储藏点:
xxxxx35124
ACDEBF
nnnn3124
第三段路上的消耗量+第四段将要运送量第三段实际运送量;
6/22
第四段路上的消耗量+第五段将要消耗量第三段实际运送量;
f,(2,n,1),x,(2,n,1),x,2,(n,1),x,(2,n,1)x,xmin,112233345
x,x,x,x,x,480s.t.,12345
,(2,n,1),x,d,n,a,n,a1121
(2,n,1),x,d,n,a,n,a,3343
(2,n,1),x,d,x,d,n,a,4454
x,x,x,x,x,0,12345
nnn,n取非负整数。
4312
接着我们一一运行程序,先观察这些程序有什么共同点。
若有共同点则较容易得多,若没有我们在加大程序的实践量~接着就运行程序,看结果。
(1)设置两个储藏点:
DACB
考虑到在DB段有饮用水,且需消耗5kg食物,我们可以设在D点之后无再须水源。
探险家平均每公里消耗水量w,1.5/40,平均每公里消耗食物量f,1/40;
第一段路上的耗水量+第二段将要运送水量第一段实际运送水量;
第二段路上的耗水量第二段实际运送水量;
第一段路上的耗食物量+第二段将要运送食物量第一段实际运送食物量;
第二段路上的耗食物量+第三段消耗食物量第二段实际运送食物量;
每次背的食物和水量都不能超过20kg。
可建立模型列出公式:
f,(2,n,1),x,(2,n,1),x,200min1122
7/22
s.t.,x,x,28012
,(2,n,1),x,w,n,w,n,w11221
(2,n,1),x,w,n,w2222
(2,n,1),x,f,n,f,n,f,112211
(2,n,1),x,f,5,n,f,2222
w,f,20,11
w,f,2022
x,x,w,w,f,f,0,121212
(2)设置三个储藏点:
nnn312
根据人体饥饿情况和路上消耗的食物,保证探险家保持健康状态穿越荒漠,可列出条件:
第二段路上的耗水量+第三段将要运送水量第二段实际运送水量;
第三段路上的耗水量第二段实际运送水量;
第二段路上的耗食物量+第三段将要运送食物量第二段实际运送食物量;
第三段路上的耗食物量+第四段消耗食物量(5)第三段实际运送食物量;
8/22
f,(2,n,1),x,(2,n,1),x,(2,n,1),x,200min112233
x,x,x,280,s.t.123
(2,n,1),x,w,n,w,n,w,112211
(2,n,1),x,w,n,w,n,w223322
(2,n,1),x,w,n,w3333
(2,n,1),x,f,n,f,n,f223322
(2,n,1),x,f,5,n,f,3333
w,f,2033
x,x,x,w,w,w,f,f,f,0,123123123
nn,n取非负整数。
312
五、第2题程序清单和测试结果
fmincon:
找到最小值
问题1:
(1)设置一个储藏点:
探险家每次最多可携带总量为20千克的食物,每公里消耗食物1/16千克,则每次携带的
食物可供走320千米。
最后一段最多可走320千米,于是设置一个储藏点最近只能是在距离终
点320千米的地方,可若是这样,则x1最小是160千米,我们可设想在160千米出设置一个储
藏点,那他所带的粮食只够他与这个储藏点来回走而不能储藏粮食,所以不能走出沙漠~
,xxx/1620-/16+(20-/8)×
n20211
x0;
1
9/22
(2)设置两个储藏点
function[c,cep]=myconl(x)%文件名
l=480;
a=20;
d=2.5/40;
%已知条件
c=[(2*x(4)-1)*x
(1)*d+x(5)*a-x(4)*a;
(2*x(5)-1)*x
(2)*d+x(3)*d-x(5)*a];
%非线性不
等式条件约束
cep=[];
%无非线性等式条件
x0=[100,100,280,10,5]'
;
%给你个较合适的初值条件
A=[];
%无线性不等式约束
b=[];
Aeq=[11100];
%线性等式约束
beq=[480];
lb=[0016022]'
%下界
ub=[1601603202010]'
%上界(由于x1和x2需要来回走动,所以上节是160)
[x,fval]=fmincon('
(2*x(4)-1)*x
(1)+(2*x(5)-1)*x
(2)+x(3)'
x0,A,b,Aeq,beq,lb,ub,@m
yconl)%求解最优解
Warning:
Large-scale(trustregion)methoddoesnotcurrentlysolvethistypeof
problem,
switchingtomedium-scale(linesearch).
>
Infminconat271
Optimizationterminated:
first-orderoptimalitymeasurelessthanoptions.TolFun
andmaximumconstraintviolationislessthanoptions.TolCon.Activeinequalities(towithinoptions.TolCon=1e-006):
lowerupperineqlinineqnonlin
531
2
x=53.3333106.6667320.00002.75002.0000fval=880.0000
n,3.由于趟次是没有小数的,所以n1应取大于它的整数,增加两个约束条件1
优化:
%初值
Aeq=[11100;
00010;
00001];
beq=[480;
3;
2];
%增加线性等式约束
yconl)调用fmincon函数得到最优解,此时为最优解
10/22
532
x=53.3333106.6667320.00003.00002.0000fval=
906.6667%得到最优解
(3)设置三个储藏点:
function[c,cep]=myconl(x)%文件名
c=[(2*x(5)-1)*x
(1)*d+x(6)*a-x(5)*a;
(2*x(6)-1)*x
(2)*d+x(7)*a-x(6)*a;
(2*x(7)-1)*x(3)*d+x(4)*d-x(7)*a];
%非线性不等式条件约束
%无非线性等式约束
x0=[50,50,100,280,3,8,5]'
Aeq=[1111000];
lb=[0080160200]'
ub=[160160160320101010]'
%上界
(2*x(5)-1)*x
(1)+(2*x(6)-1)*x
(2)+(2*x(7)-1)*x(3)+x(4)'
x0,A,b,Aeq,beq,lb,ub,
@myconl)
Large-scale(trustregion)methoddoesnotcurrentlysolvethistypeofproblem,
magnitudeofdirectionalderivativeinsearch
directionlessthan2*options.TolFunandmaximumconstraintviolation
islessthanoptions.TolCon.
Activeinequalities(towithinoptions.TolCon=1e-006):
341
3
x=39.999940.000180.0000320.00002.27781.83331.5000fval=728.8889
n,n,nn,3,n,2,n,2,由于必须取整数,所以增加两个约束条件得到最优解。
123123
11/22
Aeq=[1111000;
0000100;
0000010;
0000001];
2;
x0,A,b,Aeq,beq,lb,ub,@myconl)
Infminconat260
242
x=53.33330.0000106.6667320.00003.00002.00002.0000
fval=906.6667最优解。
(4)设置四个储藏点:
function[c,,ceq]=mycon1(x,n)%文件名
c=[(2*x(6)-1)*x
(1)*d+x(7)*a-x(6)*a;
(2*x(7)-1)*x
(2)*d+x(8)*a-x(7)*a;
(2*x(8)-1)*x(3)*d+x(9)*a
-x(8)*a;
(2*x(9)-1)*x(4)*d+x(5)*d-x(9)*a];
ceq=[];
fun='
(2*x(6)-1)*x
(1)+(2*x(7)-1)*x
(2)+(2*x(8)-1)*x(3)+(2*x(9)-1)*x(4)+x(5)'
x0=[80,80,100,100,280,5,5,5,5];
Aeq=[111110000];
lb=[00001202222];
ub=[1601602002003202020105];
%上下界
[xfval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon1)
结果:
InUntitled2at5
951
12/22
4
x=17.777817.777817.7778106.6667320.00002.63572.39842.1875
2.0000
fval=843.4375
nn取非负整数,所以增加线性约束条件。
由于n,n4312
%函数式
aeq=[111110000;
000001000;
000000100;
000000010;
00000000
1];
beq=[