1、function route=sroute1(A) %文件名 n1=size(A,1); %求A的行数 n2=size(A,2); %求A的列数 for i=1:n1 for j=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) if W(i,j)=0 W(i,j)=1000; %生成对应的带权连接矩阵 n=size(W,1); %计算W的行数 W1=W(1,
2、:); for i=1:n l(i)=W1(i); %将W的第一行赋值于各顶点的起始最短距离 z(i)=1; %将前驱顶点起始的赋值为1 end for u=1:if l(i)l(u)+W(u,i) %判断两顶点之间直接距离和通过另一个顶点作为枢纽到达的距离谁更小 l(i)=l(u)+W(u,i); %取更小的那一条路线 z(i)=u; %前驱顶点在此改变 for j=2:3 / 22 W(u,j)+W(j,i)+l(u) %判断两顶点之间直接距离和通过另外两个顶点作为枢纽到达的距离谁更小 l(i)=W(u,j)+W(j,i)+l(u);z(i)=j;for q=1:l(u)+W(u,j)+W
3、(j,q)+W(q,i) %判断两顶点之间直接距离和通过另外三个顶点作为枢纽到达的距离谁更小 l(i)=l(u)+W(u,j)+W(j,q)+W(q,i);z(i)=q;l %输出最短距离 z %输出前驱顶点 A=1 2 2;1 3 8;1 4 1;2 3 6;2 5 1;3 4 7;3 5 5;3 6 1;3 7 2;4 7 9;5 6 3;5 8 9;6 7 4;6 8 6;6 9 5;7 8 5;7 9 3;8 9 5;sroute1(A) l = 0 2 7 1 3 6 9 12 11 z = 1 1 6 1 2 5 3 5 6 四、 第2题解题思路 拿到题目,我们就有个概念480千米
4、的路程由于所带食物和水有限,不可能一次到达!又得考虑到探险家的身体状况,保持健康的状态。接着我们考虑设定中转站,来回反复才能到达我们的目的地但要求出如何设定储藏点才能更节省时间呢,于是可列出公式:(1) 设置一个储藏点:xx 12C A B 探险家每次最多可携带总量为20千克的食物,每公里消耗食物1/16千克, 4 / 22 则每次携带的食物可供走320千米。最后一段最多可走320千米,于是设置一个储 藏点最近只 能是在距离终点320千米的地方,可若是这样,则x1最小是160千米, 我们可设想在160千米出设置一个储藏点,那他所带的粮食只够他与这个储藏点 来回走而不能储藏粮食,所以不能走出沙漠
5、 xx+=480; 21(2,n,1),x,d,x,d,n,a 12n为非负整数 ,x,x0; 12(2) 设置两个储藏点:x xx 312A C D B nn 12,第一段路上的消耗量+第二段将要运送量第一段实际运送量;,第二段路上的消耗量+第三段将要消耗量第二段实际运送量;可以此列出函数式并建立模型:f,(2,n,1),x,(2,n,1),x,xmin , 11223x,x,x,480s.t. , 123(2,n,1),x,d,n,a,n,a, 1121(2,n,1),x,d,x,d,n,a, 2232x,x,x,0, 123n,n取非负整数。(3) 设置三个储藏点:5 / 22 n 3x
6、 xx312D E A C B n n n 312,第二段路上的消耗量+第三段将要运送量第二段实际运送量;,第三段路上的消耗量+第四段将要消耗的量第三段实际运送量; 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,a 2232(2,n,1),x,d,x,d,n,a, 3343x,x,x,x,0, 1234nn,n取非负整数 312(4) 设置四个储藏点:xx xxx 35124A C D E B F n nnn 3124,第三段路上的消耗量+第四段将要运送量第三段实际运送
7、量;6 / 22 ,第四段路上的消耗量+第五段将要消耗量第三段实际运送量;f,(2,n,1),x,(2,n,1),x,2,(n,1),x,(2,n,1)x,xmin , 112233345x,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, 4454x,x,x,x,x,0, 12345nnn,n取非负整数。 4312接着我们一一运行程序,先观察这些程序有什么共同点。若有共同点则较容易得多, 若没有我们在加大程序的实践量接着就运行程序,看结果。(1)设置两个储
8、藏点:D A C B 考虑到在DB段有饮用水,且需消耗5kg食物,我们可以设在D点之后无再须水源。探险家平均每公里消耗水量w,1.5/40,平均每公里消耗食物量f,1/40;,第一段路上的耗水量+第二段将要运送水量第一段实际运送水量;,第二段路上的耗水量第二段实际运送水量;,第一段路上的耗食物量+第二段将要运送食物量第一段实际运送食物量;,第二段路上的耗食物量+第三段消耗食物量第二段实际运送食物量;每次背的食物和水量都不能超过20kg。可建立模型列出公式:f,(2,n,1),x,(2,n,1),x,200min 11227 / 22 s.t. , x,x,28012, (2,n,1),x,w,
9、n,w,n,w11221(2,n,1),x,w,n,w 2222(2,n,1),x,f,n,f,n,f, 112211(2,n,1),x,f,5,n,f, 2222w,f,20, 11w,f,20 22x,x,w,w,f,f,0, 121212(2)设置三个储藏点:n nn 312根据人体饥饿情况和路上消耗的食物,保证探险家保持健康状态穿越荒漠,可列出条件:,第二段路上的耗水量+第三段将要运送水量第二段实际运送水量;,第三段路上的耗水量第二段实际运送水量;,第二段路上的耗食物量+第三段将要运送食物量第二段实际运送食物量;,第三段路上的耗食物量+第四段消耗食物量(5)第三段实际运送食物量;8 /
10、 22 f,(2,n,1),x,(2,n,1),x,(2,n,1),x,200min 112233x,x,x,280, s.t. 123(2,n,1),x,w,n,w,n,w, 112211(2,n,1),x,w,n,w,n,w 223322(2,n,1),x,w,n,w 3333(2,n,1),x,f,n,f,n,f 223322(2,n,1),x,f,5,n,f, 3333w,f,20 33x,x,x,w,w,w,f,f,f,0, 123123123nn,n取非负整数。 312五、 第2题程序清单和测试结果 fmincon:找到最小值 问题1:(1)设置一个储藏点:探险家每次最多可携带总量
11、为20千克的食物,每公里消耗食物1/16千克,则每次携带的食物可供走320千米。最后一段最多可走320千米,于是设置一个储藏点最近只能是在距离终点320千米的地方,可若是这样,则x1最小是160千米,我们可设想在160千米出设置一个储藏点,那他所带的粮食只够他与这个储藏点来回走而不能储藏粮食,所以不能走出沙漠 ,xxx/1620-/16+(20-/8)n20 211,x0; 19 / 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;(
12、2*x(5)-1)*x(2)*d+x(3)*d-x(5)*a; %非线性不等式条件约束 cep=; %无非线性等式条件 x0=100,100,280,10,5; %给你个较合适的初值条件 A=; %无线性不等式约束 b=;Aeq=1 1 1 0 0; %线性等式约束 beq=480;lb=0 0 160 2 2 %下界 ub=160 160 320 20 10 %上界(由于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,myconl) %求解最优解 War
13、ning: Large-scale (trust region) method does not currently solve this type of problem, switching to medium-scale (line search). In fmincon at 271 Optimization terminated: first-order optimality measure less than options.TolFun and maximum constraint violation is less than options.TolCon. Active ineq
14、ualities (to within options.TolCon = 1e-006):lower upper ineqlin ineqnonlin 5 3 1 2 x =53.3333 106.6667 320.0000 2.7500 2.0000 fval =880.0000 n,3.由于趟次是没有小数的,所以n1应取大于它的整数 ,增加两个约束条件 1优化: %初值 Aeq=1 1 1 0 0;0 0 0 1 0;0 0 0 0 1;beq=480;3;2; %增加线性等式约束 yconl) 调用fmincon函数得到最优解,此时为最优解 10 / 22 5 3 2 x =53.333
15、3 106.6667 320.0000 3.0000 2.0000 fval = 906.6667 %得到最优解 (3)设置三个储藏点:functionc,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,5Aeq=1 1 1 1 0 0 0;lb=0 0 80 160 2 0 0ub=160 160 160 320 10 1
16、0 10 %上界 (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 (trust region) method does not currently solve this type of problem, magnitude of directional derivative in search direction less than 2*options.TolFun and maximum constraint violation is less than
17、 options.TolCon. Active inequalities (to within options.TolCon = 1e-006):3 4 1 3 x = 39.9999 40.0001 80.0000 320.0000 2.2778 1.8333 1.5000 fval = 728.8889 n,n,nn,3,n,2,n,2,由于必须取整数,所以增加两个约束条件得到最优解。 12312311 / 22 Aeq=1 1 1 1 0 0 0;0 0 0 0 1 0 0;0 0 0 0 0 1 0;0 0 0 0 0 0 1;2;,x0,A,b,Aeq,beq,lb,ub,mycon
18、l) In fmincon at 260 2 4 2 x = 53.3333 0.0000 106.6667 320.0000 3.0000 2.0000 2.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
19、)+(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=1 1 1 1 1 0 0 0 0;lb=0 0 0 0 120 2 2 2 2;ub=160 160 200 200 320 20 20 10 5; %上下界 x fval=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,mycon1) 结果:In Untitled2 at 5 9 5 1 12 / 22 4 x =17.7778 17.7778 17.7778 106.6667 320.0000 2.6357 2.3984 2.1875 2.0000 fval =843.4375 nn取非负整数,所以增加线性约束条件。 由于n,n4312 %函数式 aeq=1 1 1 1 1 0 0 0 0;0 0 0 0 0 1 0 0 0;0 0 0 0 0 0 1 0 0;0 0 0 0 0 0 0 1 0;0 0 0 0 0 0 0 0 1;beq=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1