2

我试图了解FogBugz 中使用的基于证据的调度(EBS) 方法,并且我已经多次阅读基于证据的调度

我所理解的是一般的想法,为什么使用蒙特卡洛,等等......

而且我还可以通过使用过去故事的因子来计算估计的外推。到现在为止还挺好。

问题 1

我的问题是:如何计算多个故事的概率分布?即,我想知道五个故事什么时候完成。

我可以把 10% 的值、20% 的值、...,最后是 100% 的值加起来吗?

举个例子:

  • 我知道故事 1 估计为 4 小时,它的概率分布告诉我 0% 是 3 小时,25% 是 4 小时,50% 是 4 小时,75% 是 5 小时,100% 是 9 小时。
  • 我知道故事 2 估计为 6 小时,它的概率分布告诉我 0% 是 4 小时,25% 是 6 小时,50% 是 6 小时,75% 是 7 小时,100% 是 13 小时。

如果我现在想知道故事 1 和 2 的概率分布,我可以将它们相加,所以我得到:

  • 0%:7 小时
  • 25%:10 小时
  • 50%:10 小时
  • 75%:12 小时
  • 100%:22 小时

这就是我需要做的一切吗?还是更复杂的事情?

问题2

我的另一个问题是当涉及的用户多于用户时,如何计算多个任务的结束时间,但我事先不知道哪个用户将处理什么故事。只要我知道那个作业,就很容易:计算每个用户的故事总和,然后将最近的一个作为总时间(如果一个在 3 周后完成,另一个在 5 周后完成,则整个项目将需要 5 周)。

但是,如果我事先不知道,并且不是每个用户都能处理每个故事怎么办?例如,我已将能力放在故事中,例如前端后端……并且我已将能力分配给我的用户,因此可能会有前端开发人员、后端开发人员……和很快。

当然,有些故事可能需要多种能力,而这反过来又需要多个用户的工作。但是他们将从事不同的工作,并且需要不同的时间来完成他们的任务。这又取决于概率分布:如果一个人跑过,他可能会比没有跑过的人更早完成。这可能会影响他接下来的工作,他可以​​帮助谁,等等......

知道我如何计算这个吗?

4

2 回答 2

1

1.

您可能不会将概率分布中相应级别的值相加。这将毫无根据地假设任务完成时间之间存在完美的相关性。这是您可以做的事情。

在最坏的情况下,完成两项任务的时间是完成每项任务的时间之和。到现在为止还挺好。软件开发中的最坏情况估计可能很好。我认为将时间加起来通常不会引起问题。

现在我们需要考虑这两个任务的时间是否由相互独立的概率分布控制。也就是说,当我们知道一项任务多久完成时,这是否告诉我们另一项任务完成的时间?如果我们不知道,我们能否做出适当安全的假设?

当然,这取决于不正确估计的成本,但假设分布确实是独立的可能足够安全。这样,至少完成一项任务通常不会给我们对另一项任务的错误希望。所以答案是,如果一个任务被分析成 M 个结果,每个结果都有自己的概率,而另一个任务被分析成 N 个结果,每个结果都有自己的概率,我们可以形成 M*N 个结果并分配给 (i,j ) 结果是第一个任务的第 i 个结果的概率(密度)与第二个任务的第 j 个结果的概率(密度)的乘积。

我将修改您的示例,因为抱歉,我不明白。假设第一个任务有这个分布,其中 X 是 0% 到 100% 之间的均匀分布的连续随机变量:

3 hours, if       X <= 20% (with probability density 20%);
4 hours, if 20% < X <= 60% (with probability density 40%);
5 hours, if 60% < X <= 80% (with probability density 20%);
9 hours, if 80% < X        (with probability density 20%).

第二个任务有这个分布,其中 Y 是一个在 0% 到 100% 之间均匀分布的连续随机变量,与 X 无关:

 4 hours, if       Y <= 20% (with probability density 20%);
 6 hours, if 20% < Y <= 60% (with probability density 40%);
 7 hours, if 60% < Y <= 80% (with probability density 20%);
13 hours, if 80% < Y        (with probability density 20%).

Now we calculate as follows:

               4@20%   6@ 40%   7@20%   13@20%
              ------ -------- ------- --------
     3@20% | 3+4@ 4% 3+6@  8% 3+7@ 4% 3+13@ 4%
     4@40% | 4+4@ 8% 4+6@ 16% 4+7@ 8% 4+13@ 8%
     5@20% | 5+4@ 4% 5+6@  8% 5+7@ 4% 5+13@ 4%
     9@20% | 9+4@ 4% 9+6@  8% 9+7@ 4% 9+13@ 4%

所以这里是两个任务时间总和的概率分布和密度,其中 Z 是从 0% 到 100% 的均匀分布的连续随机变量:

      7 hours, if       Z <=  4% (with probability density  4%);
      8 hours, if  4% < Z <= 12% (with probability density  8%);
      9 hours, if 12% < Z <= 24% (with probability density 12%);
     10 hours, if 24% < Z <= 44% (with probability density 20%);
     11 hours, if 44% < Z <= 60% (with probability density 16%);
     12 hours, if 60% < Z <= 64% (with probability density  4%);
     13 hours, if 64% < Z <= 68% (with probability density  4%);
     15 hours, if 68% < Z <= 76% (with probability density  8%);
     16 hours, if 76% < Z <= 84% (with probability density  8%);
     17 hours, if 84% < Z <= 92% (with probability density  8%);
     18 hours, if 92% < Z <= 96% (with probability density  4%);
     22 hours, if 96% < Z        (with probability density  4%).

所有这些可能很乏味,但它是合乎逻辑的,并且不难自动化。

2.

你是对的,有一个分散的场景。粗略地说,它始于最初的确定性,即在世界存在之前,没有人做过任何事情!在那之后,在您对问题 1 进行自动化处理之后,您可以在分析中采用各种策略。也许你的想象力和我的一样好。无论如何,这是我可以建议的。

您可以交互式地探索假设场景。

您可以尝试计算和汇总可能发生的所有事情。正如我们所看到的,这种分析对于小案例是可能的。正如我们可以想象的那样,在大型情况下它会变得棘手,例如可能构建一个飞行导航系统。

您可以分析最可能的情况,并可能在此范围内进行有限程度的变化。

您很可能会对控制风险感兴趣。因此,您可以根据自己的需要和方便考虑分析以下一项或多项,所有这些都与其他情况有所不同:不可接受的结果的可能性,或存在不可接受的不确定性程度的可能性,或估计存在多少不确定性,或对预期结果的估计(即,如果一个人面对同样情况不断重复的平均结果)。

于 2013-03-14T06:02:26.147 回答
1

如果没有谷歌搜索问题,我猜“未知的开发人员能力”可能会将问题推入 NP-hard 优化问题箱。有几个算法可以看模拟退火和遗传算法(模拟退火用于 Wintek 的电子 CAD 自动放置程序(我在开发团队中))。

于 2013-03-15T22:06:05.827 回答