软件测试悖论之Braess悖论

发表于:2009-11-03来源:作者:点击数: 标签:软件测试Braess
软件测试悖论之Braess悖论 软件测试 关于 Braess 悖论的原始工作是 Dietrich Braess 的“ über ein Paradox der Verkerhsplannung ”( 1968 )。而我的例子,是基于我发现的几个例子,这几个例子对 Mark Wainwright 的工作作出了贡献。当时我不能亲自参加

         软件测试悖论之Braess悖论        软件测试

       关于 Braess 悖论的原始工作是 Dietrich Braess 的“ über ein Paradox der Verkerhsplannung ”( 1968 )。而我的例子,是基于我发现的几个例子,这几个例子对 Mark Wainwright 的工作作出了贡献。当时我不能亲自参加到 Wainwright 的原始工作中。

  Braess 悖论相当复杂,所以这里我给一个简化的、离散近似。假设象图 5 中显示的一样有四个城镇——城镇 A ,城镇 B ,城镇 C 和城镇 D 。

  连接任意两个城镇之间的每一条路都有一个关联成本,由图中与路相邻的方程给出。成本是陆上汽车数的函数。你能想象成本代表了在这条路上行驶所需要的时间,或者所需要的汽油,或者你们想要最小化的某些因素。现在假设某一个早晨,有 6 辆车从城镇 A 离开,每次一辆,目的都是城镇 D 。汽车 1 离开的时候,路上完全是空的。该车可以从两条路径中选择: A-B-D 和 A-C-D 。 A-B-D 的成本是 [4(1) + 1] + [1 + 16] = 22 。由于该图的对称性,路径 A-C-D 的成本也是 22 。假设汽车 1 选择了路径 A-B-D 。

  

  图5 公路网络: Braess 悖论

  现在汽车 2 准备离开了。他看到汽车 1 在路径 A-B-D 上,因此知道了现在 A-B-D 上的成本是 [4(2) + 1] + [2 + 16] = 27 ,所以他选择了成本只有 22 的路径 A-C-D 。汽车 3 看到每条路径上都有一辆车,所以选择了成本是 27 的路径 A-B-D 。汽车 4 选择了成本是 27 的路径 A-C-D 。汽车 5 看到四辆车是均匀分布的,他选择了路径 A-B-C ,成本是 [4(3) + 1] + [3 + 16] = 32 。最后,汽车 6 选择了成本是 32 的路径 A-C-D 。现在所有六辆车都在从城镇 A 到城镇 D 的某一条路径上。因为每一条路径上有三辆车,而两条路径是对称的,每辆车的成本是 32 。

  这是 Braess 悖论出现的地方。如果在城镇 B 和城镇 C 之间增加一条新的、有效的路径,你认为会出现怎样的结果?常识是,增加道路容量会降低司机们的成本。但是既然这种现象被叫做“ Braess 悖论”而不是“ Braess 常识”,你应该猜到实际发生的并不是如此。

  假设修改图 5 中的地图,在城镇 B 和城镇 C 之间增加了一条高效快捷路径,它的成本函数是一个常数 1 。在加入了快捷路径的第一个早晨,汽车 1 准备离开城镇 A 。他有四种可能路径选择,各条路经的关连成本如下:

  A-B-D cost = [4(1) + 1] + [1 + 16] = 22
  A-C-D cost = [1 + 16] + [4(1) + 1] = 22
  A-B-C-D cost = [4(1) + 1] + 1 + [4(1) + 1] = 11
  A-C-B-D cost = [1 + 16] + 1 + [1 + 16] = 35

 

  这是很有希望的。汽车 1 选择了路径 A-B-C-D ,通过快捷路径来显著降低他的交通成本——至少暂时如此。汽车 2 准备离开了。他看到汽车 1 选择了路径 A-B-C-D ,于是分析他的可能成本:

  A-B-D cost = [4(2) + 1] + [1 + 16] = 26
  A-C-D cost = [1 + 16] + [4(2) + 1] = 26
  A-B-C-D cost = [4(2) + 1] + 1 + [4(2) + 1] = 19
  A-C-B-D cost = [1 + 16] + 1 + [1 + 16] = 35

 

  经过快速数学计算之后,汽车2页选择了路径 A-B-C-D 。尽管汽车 1 已经在这条路径上了,快捷路径的有效性仍然使得它是汽车 2 的最好选择。

  现在汽车 3 准备离开了,他的选择是:

  A-B-D cost = [4(3) + 1] + [1 + 16] = 30
  A-C-D cost = [1 + 16] + [4(3) + 1] = 30
  A-B-C-D cost = [4(3) + 1] + 1 + [4(3) + 1] = 27
  A-C-B-D cost = [1 + 16] + 1 + [1 + 16] = 35

 

  再次,这个快捷路径 A-B-C-D 是最好的选择。汽车 4 准备离开城镇 A ,观察了钱三个司机的决定,算出了他自己的成本:

  A-B-D cost = [4(4) + 1] + [1 + 16] = 34
  A-C-D cost = [1 + 16] + [4(4) + 1] = 34
  A-B-C-D cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
  A-C-B-D cost = [1 + 16] + 1 + [1 + 16] = 35

 

  快捷路径上目前的交通使得 A-B-C-D 比路径 A-B-D 和 A-C-D 的成本要高。假设汽车 4 选择了路径 A-B-C (如果汽车 4 选择了 A-C-D ,细节会有一点不同,但是总的结果是一样的)。

  汽车 5 现在准备离开了,他分析了他的选择:

  A-B-D cost = [4(5) + 1] + [2 + 16] = 39
  A-C-D cost = [1 + 16] + [4(4) + 1] = 34
  A-B-C-D cost = [4(5) + 1] + 1 + [4(4) + 1] = 39
  A-C-B-D cost = [1 + 16] + 1 + [2 + 16] = 36

 

  因此汽车 5 决定选择路径 A-C-D 。最后一辆车,汽车 6 ,现在准备离开了,他观察了前面 5 个司机的决定,做出了他自己的分析:

  A-B-D cost = [4(5) + 1] + [2 + 16] = 39
  A-C-D cost = [2 + 16] + [4(5) + 1] = 39
  A-B-C-D cost = [4(5) + 1] + 1 + [4(5) + 1] = 43
  A-C-B-D cost = [2 + 16] + 1 + [2 + 16] = 37

 

  汽车 6 选择了路径 A-C-B-D ,因为这是成本最低的。现在 6 辆车都在路上了,你可以算出每辆车的成本。

  Car 1 route A-B-C-D, cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
  Car 2 route A-B-C-D, cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
  Car 3 route A-B-C-D, cost = [4(4) + 1] + 1 + [4(4) + 1] = 35
  Car 4 route A-B-D, cost = [4(4) + 1] + [1 + 16] = 34
  Car 5 route A-C-D, cost = [2 + 16] + [4(4) + 1] = 35
  Car 6 route A-C-B-D, cost = [2 + 16] + 1 + [1 + 16] = 36

 

  回忆一下,如果没有这条快速路,每辆车的成本是 32 。现在增加了额外公路容量,我们却增加每个司机的成本!

  这个例子提供了一个对 Braess 悖论的实际接触。因为这和网络系统上所传输的数据包有明显的关系, Braess 悖论受到了研究人员的深入研究。你能非正式的总结这个悖论:有时候增加节点之间的路径数反而会增加网络拥塞。从软件测试角度来说, Braess 悖论会在进行网络性能测试的时候出现。老实说,你碰到 Braess 悖论的机会很少。但是这个现象确实存在。启示是,你不应该假设增加网络容量就会提高性能。如果你增加了容量但是没有看到你所期望的性能提高, Braess 悖论就是应该去调查的。

原文转自:http://www.ltesting.net