【数学模型】商人们怎样过河?

这篇博文通过数学模型和计算机程序解决了一个三名商人与三个随从过河的问题,确保在任何时刻随从不超商人人数。文章介绍了状态转移模型、数学图解法和程序求解,并探讨了算法的优化方向。
摘要由CSDN通过智能技术生成

这篇博文中,同样是一个很简单的数学问题,但是解决起来比上一个的问题要复杂一些。在这次模型求解中,我会使用两种方法,一种是纯粹的数学方法,另一种是通过计算机程序来计算,通过计算机求解我们可以求解一些规模更大的问题。由于这篇文章篇幅我预计会比较长,为了不混淆,上一篇文章《椅子能在不平的地面上放平吗?》中的延伸问题我会再写一篇文章单独解答。

问题引出

问题: 三名商人各带一个随从过河,一只小船只能容纳两个人,随从们约定,只要在河的任何一岸,一旦随从人数多于商人人数就杀人越货,但是商人们知道了他们的约定,并且如何过河的大权掌握在商人们手中,商人们该采取怎样的策略才能安全过河呢?

这次的问题是一个很经常遇到的过河问题,其实对于该类问题,我们经过逻辑思考就可以得到答案。但是通过数学模型的建立,我们可以得到一个通用的解答,并且通过计算机的计算我们可以大大扩大问题的规模。

问题分析

因为这个问题已经理想化了,所以我们无需对模型进行假设,该问题可以看作一个多步决策问题

每一步,船由此岸划到彼岸或者由彼岸划回此岸,都要对船上的人员进行决策(此次渡河船上可以有几名商人和几名随从),在保证安全(两岸的随从都不比商人多)的前提下,在有限次的决策中使得所有人都到对岸去。

因此,我们要做的就是要确定每一步的决策,达到渡河的目标。

建立模型

记第 k 次过河前此岸的商人数为 xk , 随从数为 yk , k = 1, 2, 3…, xk ,yk = 0, 1, 2, 3

定义状态: 将二维向量 sk = ( xk , yk ) 定义为状态

将安全渡河状态下的状态集合定义为允许状态集合, 记为

S = {(x,y) | x=0,y=0,1,2,3; x=y=1; x=y=2; x=3,y=0,1,2,3}

记第 k 次渡河船上的商人数为 uk , 随从数为 vk

定义决策: 将二维向量 dk = (uk , vk) 定义为决策

允许决策集合 记作

D = {(u,v) | 1 ≤ u+v ≤ 2, u,v = 0,1,2}

因为小船容量为2,所以船上人员不能超过2,而且至少要有一个人划船,由此得到上式。

由我们定义的状态 sk 和决策 dk ,我们可以发现它们之间是存在联系的:

  • k 为奇数是表示船由此岸划向彼岸,k 为偶数时表示船由彼岸划回此岸

  • 状态 sk 是随着决策 dk 变化的,规律为:

s k+1 = s k + (-1) kd k

我们把上式称为状态转移律,因此渡河方案可以抽象为如下的多步决策模型

求决策 dk ∈ D(k = 1,2,…,n) , 使状态 sk ∈ S 按照转移率,初始状态 s1 = (3,3) 经有限步 n 到达状态 sn+1 = (0,0)

到这里,整个数学模型就已经非常清晰了,接下来要做的就是求解模型得出结果。

求解模型

在这个模型的求解中,我将会使用两种方法,一种是数学图解法,用于解决和当前题目一样的规模比较小的问题,优点是比较简便,但是对于规模比较大的问题就无能为力了,比如说有50个商人携带50个随从过河,第二种方法是通过计算机编程,使用程序来解决该问题,即使问题规模增大,我们也可以利用计算机强大的计算能力来解决。

数学图解法

我们首先在 xOy 平面坐标系中画出如下方格,方格中的点表示状态 s = (x,y)

image

起始状态(下图绿色点) s1 = (3,3) , 终止状态(下图红色点) sn+1 = (0,0)

  • 21
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值