请原谅我,如果这是众所周知的一类众所周知的解决方案。我一直在寻找,但显然没有成功。
假设我有一个必须在一个区间内发生的 n 事件(例如,[0,1])。每个事件与从预定义分布中随机抽取的持续时间相关联。假设间隔远大于所有组合的事件持续时间:有效的计划始终存在。在[0,1]区间内发生事件的概率不一致,但只要它们不重叠,事件就是独立的。
安排这些活动的有效且准确(随机)方式是什么?
这是我目前的伪代码:
lowerBound = min(interval) upperBound = max(interval) for n in numEvents { draw startTime draw endTime while ( startTime is less than lowerBound || endTime exceeds upperBound ) { draw startTime draw endTime } add event reset lowerBound and upperBound to define largest remaining (event-free) interval }
我认为通过选择较大的剩余时间间隔来安排新事件,我会使事件过度分散 - 比其他情况更加间隔。尽管事件的数量很少,但这似乎非常有效并且可能非常准确。
我正在使用C ++,虽然这可能无关紧要。
如果您知道这类问题是什么,我也非常感谢搜索术语。
背景:准确性对我来说非常重要。这不是整个计划中耗费时间的一步。
答案 0 :(得分:2)
我只是随机地放置每个事件,检查碰撞,如果发生碰撞,请清理平板并重新开始。
你说间隔远大于事件持续时间的总和,因此碰撞很少,所以这种方法在实践中非常快。
你说你想要准确的结果。我不确定这意味着什么,但我猜想所有有效的解决方案应该是同等可能的;问题中的当前解决方案并不满足该要求,但是这个解决方案确实如此。