• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

软件测试悖论

发布: 2008-7-07 12:57 | 作者: James McCaffrey | 来源: 测试时代采编 | 查看: 164次 | 进入软件测试时代论坛讨论

软件测试时代



Parrondo 悖论

  本质上, Parrondo 悖论陈述的是两个要输的赌博游戏(我们称他们为游戏 A 和游戏 B ),它们可以被设计好,这样如果一个接一个地玩,它们可以成为赢得游戏。有很多方法可以构造 Parrondo 悖论的例子,最简单的事使用三个有偏差的硬币。
  游戏 A 是一个简单的掷硬币游戏。你掷出一枚硬币,如果硬币正面朝上,你赢 1 元,如果硬币正面朝下,你输 1 元。硬币 1稍微有点偏差,这样它正面朝上的概率是 p1=0.495 (故正面朝下的概率就是 1-p1=0.505)。如果你不停的玩这个游戏,你最终会输钱。游戏 B 有点复杂,使用两个硬币。这个游戏中的第一个硬币(硬币 2 )有一个赢(正面朝上)的概率p2=0.095 。这是一个很糟糕的硬币。第二枚硬币(硬币 3 ),有一个赢的概率 p3=0.745 。这是一个很好的硬币。
  你从一定数目的钱开始玩这个游戏,例如 300 元。为了玩游戏 B ,你需要两个步骤 : 先要检查你的钱数是否是 3的倍数(例如 300 元、 297 元、 303 元等等)。如果你目前的资金是 3 的倍数,你掷硬币 2 ,要不是赢 1 元就是输 1元。如果你目前的资金不是 3 的整数倍,你掷硬币 3 ,赢 1 元或输 1 元。尽管不是很明显,如果你不停的玩游戏 B ,你还是会输钱。
  在这一点上,我们有两个要输的游戏。如果我们按照一种随机模式或者是固定模式来玩游戏 A 和 B,你认为会发生什么?令人惊奇的是,如果一起玩,这两个要输的游戏最后会赢!本专栏附带的代码给出了一个用 C# 写的仿真。图 6是运行这个程序的一个屏幕截图。


Figure 6 Parrondo''s Paradox in Action
图6 Parrondo 悖论仿真

  这个游戏是由西班牙心理学家 Parrondo 创造的。 1999 年, G.P.Harmer 和 D.Abbott 发表了文献“Losing Strategies Can Win by Parrondo''s Paradox ”,以 Parrondo给这个悖论命名。从那以后,在这个游戏和它的变种上出现了很多的研究,包括改变三个硬币的概率影响和改变玩游戏 A 和 B 的模式。
  现实中,你碰到 Parrondo 悖论的机会是很少的。在一种牵强的场景中,你由一定数目的进程优先级(与 Parrondo悖论中的资金相对应)开始,你有一个子过程会根据 CPU 的使用情况提高或降低进程优先级(与游戏 A对应),你也有另外一个子过程会根据目前的优先级而提高或降低进程优先级(与游戏 B对应)。这两个子过程都设计为概率上最后都会降低进程优先级。然而,当这两个过程被反复调用,它们实际上会提高进程优先级。诚然,这只是一种扩展,然而Parrondo 悖论太有趣了,我忍不住在这个专栏中介绍它!
 

作者简介:
    James McCaffrey
在Volt信息技术公司管理着微软软件工程师的技术培训。他曾经为数个微软产品工作过,例如IE和MSN。他的联系方式是jmccaffrey@volt.com v-jammc@microsoft.com
 

译者简介
        杨彬:在读计算数学硕士,研究方向:随机数学,软件工程,软件测试,软件可靠性。联系方式:biny_yang@hotmail.com

文章来源于软件测试时代 http://www.testage.net/

33/3<123

软件测试时代开课信息
Google
关于我们 | 合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2007 TestAge(测试时代) 北京慧灵科技有限公司 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备05002925号
技术支持和业务联系:info@testage.com.cn 电话:010-51297073