拯救小白鼠

拯救小白鼠

1.问题重述

假设有999个桶,有且仅有一个桶里面装了毒药,其他的都装了水。这些桶从外面看上去完全相同,如果一只小白鼠喝了毒药,它将在15分钟内死去,在一个小时内至少需要多少只小白鼠才能判断出哪一个桶里装的是毒药?

2.模型假设

1.假设所有的小白鼠都是相同的,且只考虑极限死亡时间15分钟。(待定)
2.为了便于计算,不考虑老鼠喝水的时间。
3.不考虑其他因素对装了毒药的桶的位置的影响,仅考虑随机作用。

3.符号说明

在这里插入图片描述

4.问题分析

极端条件下,如果有足够精确的设备与条件(15min),一只小白鼠就能够完成任务:给出一个计时设备,让老鼠一秒钟喝一桶水,记录顺序,记录老鼠死亡的时间,精确到秒,当老鼠死亡的时候,即可反推出有毒的桶。当然老鼠的死亡时间与个体的差异性有关,以上方案仅在特殊条件下可以使用。
在此处考虑两种模式,模式一,若有要求,小白鼠喝完一桶水后必须强制滞留T_die时间,以等待测验结果。在此种情况下,可以直接通过计算机模拟计算得到结果,计算机模拟5000次,如果要在T_max时间内完成,需要144只老鼠,该结果只是,所有可能发生的情况的期望值,并未考虑最坏的情况。而且所需的小白鼠太多,耗时费力,因此舍弃该种模式的方案。考虑方案二。

5.模型建立与解决

现在考虑模式二,即老鼠喝完一桶水后能够再次去喝另外一桶水,可以非常自然的想到,对所有的桶进行分组,几只老鼠也就能够分成几组。一组的桶的数量为:
N_i=N_bucket/N_mouse
每只老鼠将其对应组的水全部喝完,T_die后,如果某组的老鼠发生死亡,即剩下的老鼠都加入那一组进行实验,重复以上操作即可找出有毒的那一桶水。表示为:
A_(N_mouse)^k=N_bucket
其中:
k=T_max/T_die +1
数据代入方程,对上述方程进行求解:得到N_mouse向下取整为6。

当然,上述结果是否能够更优,下面来进一步进行讨论:
由简入繁,首先考虑,若只有一只桶,只需一只老鼠就能完成检验,而一只老鼠最多能够检测两个桶,若有两只老鼠,则最多可以检测三只桶,若有三只老鼠,最多可以检测八只桶,若有N_bucket只老鼠,则可以检测2^(N_bucket )只桶,这是不分组的情况,如果,将桶进行分组,分组数目与k有关,T_max内,结果又会发生变化:
在这里插入图片描述
由上述所示,当老鼠数目为5时即可测出结果。

6.模型评价

本文就用老鼠搜索有毒的木桶,讨论了几种不同情况下的搜索方案,并给出了最合理的方案。
缺少实验验证:计算机模拟和实际情况出入无法预料,应通过实地验证进行纠正。
方案工作繁琐:讨论最简的情况,方案的安排会非常复杂。
分析直观明晰:分析简单明了,易于理解。

附录
代码:

clear;clc
num=999;mouse_num=144;
T=5000;Time=zeros(1,T);i=1;
while i<T
 box=zeros(1,num); loc=randi(num);
 box(loc)=-1; flag=0; sum=0;
 while flag==0
     mouse=randi(num,1,mouse_num);
     for j=1:mouse_num
         if(flag==1) break;end
         if(box(mouse(j))==-1)  flag=1; break;
         elseif(box(mouse(j))==1)
              while box(mouse(j))==1
                  mouse(j)=randi(num);
                  if(box(mouse(j))==-1)
                   flag=1;
                   break; end 
              end
              if(flag==1) break; end
              box(mouse(j))=1;
         else box(mouse(j))=1; end
        if(flag==1) break;end 
     end
     sum=sum+1;
 end
 Time(i)=sum;  i=i+1;
end
mean(Time)
syms x;
ans=solve(x*(x-1)*(x-2)*(x-3)==999);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值