Algorithm 如何优化具有未知未来事件的事件调度?

Algorithm 如何优化具有未知未来事件的事件调度?,algorithm,logic,maximum-profit-problem,Algorithm,Logic,Maximum Profit Problem,情景: 我需要给用户机会为服务预订不同的时间。 需要注意的是,我没有提前预订,但我需要在他们进来时将其填满 预订可以表示为键值对: [开始时间,持续时间] 例如,[9,3]意味着事件从9点开始,持续时间为3小时 规则: 用户一个接一个进来,从来没有一批用户请求 预订不能重叠 服务全天候提供,因此无需担心“工作时间” 用户自行选择duration 显然,一旦用户选择并确认了他的预订,我们就不能再洗牌了 我们不希望差距小于一定的时间。这是基于未来用户填补空白的可能性。例如,如果持续时间在用户预订中

情景:

我需要给用户机会为服务预订不同的时间。 需要注意的是,我没有提前预订,但我需要在他们进来时将其填满

预订可以表示为键值对:

[开始时间,持续时间]

例如,
[9,3]
意味着事件从9点开始,持续时间为3小时

规则:

  • 用户一个接一个进来,从来没有一批用户请求
  • 预订不能重叠
  • 服务全天候提供,因此无需担心“工作时间”
  • 用户自行选择
    duration
  • 显然,一旦用户选择并确认了他的预订,我们就不能再洗牌了
  • 我们不希望差距小于一定的时间。这是基于未来用户填补空白的可能性。例如,如果
    持续时间
    在用户预订中的分布使得未来用户填补小于
    x
    小时间隔的概率小于
    p
    ,那么我们需要一个间隔不能小于
    x
    的规则。(对于这个问题,我们可以假设
    x
    是硬编码的,这里我只解释原因)
  • 目标是最大化服务繁忙时间
到目前为止我的想法

  • 我保留了迄今为止的预订清单
  • 我还跟踪缺口(因为它们是新用户预订的潜在时段)
  • 当新用户来预订时,
    [startTime,duration]
    我首先检查理想情况,即
    gapLength=duration
    。如果没有这样的间隙,我会找到满足条件
    gapLength-duration>minimumGapDuration
    的所有插槽(间隙),并根据该
    gapLength-duration
    值按降序排列
  • 我将用户分配到最大值为
    gapLength-duration
    的第一个间隙,因为这使我有最大的可能性,在这次预订之后剩余的间隙将来也会被填补
  • 问题:

  • 我的方法中是否存在一些我遗漏的问题

  • 有没有一些算法可以解决这个问题

  • 是否有一些通常的方法(良好的起点),我可以开始和优化后?(实际上,我正在尝试获取足够的信息以开始,但没有犯一些严重的错误;优化可以/应该在以后进行)

  • 附言。 从目前的研究来看,约束编程似乎就是这样。如果可能的话,我想避免它,因为我对它一无所知(也许它很简单,我只是不知道),但如果它真的起作用,我会追求它的好处并实施它

    我通过stackoverflow查找类似的问题,但没有找到一个未来事件未知的问题。如果有,这是直接副本,请参考