商人过河MATLAB

这是一个使用MATLAB编程解决商人过河问题的实例。通过生成安全集和决策集,利用动态规划寻找最少步骤的解决方案。代码包含两个辅助函数,分别用于状态转移和判断点是否在集合内。
摘要由CSDN通过智能技术生成

%商人过河模型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

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值