【问题标题】:Bin packing parts of a dynamic set, considering lastupdate考虑 lastupdate 对动态集的部分进行装箱
【发布时间】:2014-12-13 13:02:12
【问题描述】:

有一大堆对象。集合是动态的:可以随时添加或删除对象。我们称对象总数为 N

每个对象都有两个属性:质量(M)和上次更新的时间(T)。

X 分钟应选择一小批进行处理,这会将它们的 T 更新为当前时间。一个批次中所有对象的总M个是有限的:不超过L

我希望在这里解决三个任务:

  1. 找到下一批对象拾取算法;
  2. 引入对象类:simplepriority(至少适合每个第 n 个批次)和 frequent(适合每个批次);
  3. 预测系统容量耗尽(添加下一个服务器的时间 = 增加 L)。

什么样的模型最能描述这样的系统?

整个事情是关于按时间间隔处理“对象”的服务。每个对象应每 N 小时“测量”一次。 N 可以在一个范围内变化。 X 是固定的。

对象是由人类添加/删除的。 N 呈指数增长,相当缓慢,其中一些峰值是由出版物引起的。当然预测不能准确,只是一些估计。 M 在 0 到 1E7 之间变化,呈指数分布,大部分接近于 0。

我看到这里可以有几种策略:

A. 全油门 - 每批包装尽可能接近 100%。随着 N 的增长,特定对象被击中的平均间隔也会增长。

B. 平等气质 :) - 尝试将平均间隔保持在某个值附近。批次填充水平将从某个低水平增长。当它接近 100% 时 - 是时候获得更多服务器了。

C. - ?

【问题讨论】:

    标签: algorithm optimization dynamic-programming modeling bin-packing


    【解决方案1】:

    这是一个针对您的问题的非常完整的设计。

    您的问题与您对此系统的描述不完全吻合。所以我假设描述是准确的。

    当您安排测量时,您应该传递一个对象,第一次可以测量它,并且当您希望测量发生时。该对象应具有weight 属性和measured 方法。当测量发生时,measured 方法将被调用,你的类之间的区别在于它们是否会重新调度,以及使用什么参数。

    在内部,您将需要几个优先级队列。有关如何实施的详细信息,请参阅http://en.wikipedia.org/wiki/Heap_(data_structure)

    第一个队列是按时间进行测量,所有尚未测量的对象。每次安排批处理时,您都会使用它来查找所有可能发生的新测量。

    第二个队列是现在准备好进行的测量,并按它们应该在哪个调度周期进行组织,然后是权重。我会让他们都上升。您可以通过从队列中拉出项目来安排批次,直到您有足够的发送时间。

    现在您需要知道每批放多少。鉴于您所描述的系统,可以手动输入事件峰值,但随着时间的推移,您希望这些峰值平滑。所以我会推荐选项B,平等的气质。因此,要做到这一点,当您将每个对象放入“立即就绪”队列时,您可以将其“平均工作量”计算为它的权重除以它应该发生的周期数。将其与对象一起存储,并保持您应该达到的运行速度的运行总和。每个时期我都建议您继续添加到批次中,直到满足以下三个条件之一:

    1. 你的对象用完了。
    2. 您已达到最大批量容量。
    3. 您的跑步总重量超过平均工作重量的 1.1 倍。额外的 10% 是因为现在使用更多的容量比以后用完容量要好。

    最后是容量规划。

    为此,您需要使用一些启发式方法。这是一个合理的,可能需要对您的系统进行一些调整。保持你过去 10 次测量的平均工作重量的数组。保持“高水位线的指数衰减平均值”。通过根据公式每次更新来做到这一点:

    average_high_water_mark = 0.95 * average_high_water_mark + 0.5 * 最大(最后 10 次跑步工作重量)

    如果average_high_water_mark 曾经进入您最大容量的 2 台服务器,则添加更多服务器。 (这个想法是服务器应该能够在不让你被冲洗的情况下死亡。)

    【讨论】:

    • 谢谢你,本!感谢详细而周到的答案。我正在根据您的描述构建一个模型模型,以使用数字和可能的条件。
    【解决方案2】:

    我认为答案 A 很好。装箱是最大化或最小化,你只有一批。按 m 和 n 对对象进行排序。

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 2013-04-19
      • 2021-02-19
      相关资源
      最近更新 更多