%商人过河模型MATLAB实现
clc
clear
n_s=3;%商人数
n_p=3; %随从数
n_r=2; %船最大承载人数
S_start=[n_s,n_p]; %初始状态
S_end=[0,0]; %最终状态
%生成安全集
S=[]; %安全集
for ii=0:n_s;
for jj=0:n_p;
if ii>=jj&&n_s-ii>=n_p-jj||ii0||iin_s;
%保证两岸的商人数不少于仆人数
S=[S;ii,jj];
end
end
end
%生成决策集
D=[]; %决策集
for ii=0:n_s;
for jj=0:n_p;
if ii+jj>=1&&ii+jj<=n_r; %保证船上的人数在[1,n_r]之间
D=[D;ii,jj];
end
end
end
S
D
N=100;
P=cell(1,N); %生成元胞数组
R=[];
for ii=1:N
if ii= =1
G=S_start; %G为出发点
H=[]; %H为第上两步的点,防止走重复的路径
elseif ii==2
G=P{1,ii-1};
H=S_start;
else
G=P{1,ii-1};
H=P{1,ii-2}(:,1:2);
end
P{1,ii}=reach(G,H,S,D,ii
商人过河MATLAB
最新推荐文章于 2021-05-24 21:33:47 发布
这是一个使用MATLAB编程解决商人过河问题的实例。通过生成安全集和决策集,利用动态规划寻找最少步骤的解决方案。代码包含两个辅助函数,分别用于状态转移和判断点是否在集合内。
摘要由CSDN通过智能技术生成