《商人安全渡河问题Matlab.docx》由会员分享,可在线阅读,更多相关《商人安全渡河问题Matlab.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、商人过河问题的MATLAB编程clear all % 080817clc % n为商人数,m为仆人数,h为每次过河的最多人数 n=3;m=3;h=2; %初始状态及数据m0=0;n0=0;ticLS=0; % 允许的状态集合S与个数LSLD=0; %允许的决策集合D与个数LDfor i=0:nfor j=0:mif i=j&n-i=m-j|i=n|i=0LS=LS+1;S(LS,:)=i j;endif i+j0&i+j=j|i=0)LD=LD+1;D(LD,:)=i j; endendend%用搜寻法找出符合条件的渡河方案%$N=15;Q1=inf*ones(2*N,2*N);Q2=inf*
2、ones(2*N,2*N);t=1;le=1;q=m n;f0=0; %判断循环终止标记while f0=1&t1 %对重复状态删除处理f1=0;for ii=1:k-1if s1=sa(ii,:)f1=1;break endendend %if f1=0sa(k,:)=s1; sb(k,:)=D(i,:);k=k+1;breakend end end %end %end %q=sa;le=size(q,1);Q1(1:le,t*2-1:t*2)=q;Q2(1:le,t*2-1:t*2)=sb;t=t+1; end %$%在可行方案集合中逆向搜寻唯一方案%¥tr=t-1;saa1=sa;SA=
3、zeros(tr,2);SB=zeros(tr,2);for k=tr:-1:2k1=k-1;f0=0;sbb=Q2(:,k*2-1:k*2);saa=Q1(:,k1*2-1:k1*2);for i=1:2*Nsaa2=saa1-(-1)k*sbb(i,:);for j=1:2*Nif saa2=saa(j,:)saa1=saa2;sbb1=sbb(i,:);f0=1;breakendendif f0=1breakendendSA(k1,:)=saa1;SB(k,:)=sbb1;endSA(tr,:)=m0 n0;SB(1,:)=m,n-SA(1,:);%¥disp 初始状态:X0=m,ndisp 状态为:SAdisp 决策为:SBtoc