Algorithm 考虑到最新更新,动态集的装箱零件

Algorithm 考虑到最新更新,动态集的装箱零件,algorithm,optimization,dynamic-programming,modeling,bin-packing,Algorithm,Optimization,Dynamic Programming,Modeling,Bin Packing,有一大组物体。集合是动态的:可以随时添加或删除对象。让我们把对象的总数称为N 每个对象都有两个属性:上次更新的质量(M)和时间(T) 每X分钟应选择一小批进行处理,将其T更新为当前时间。一个批次中所有对象的总数量限制为:不超过L 我希望在此解决三项任务: 找到下一批对象拾取算法 引入对象类:简单、优先级(至少适合每个第n批)和频繁(适合每个批) 预测系统容量消耗(添加下一个服务器的时间=增加L) 什么样的模型最能描述这样的系统? 整个过程都是关于一个按时间间隔处理“对象”的服务。每N小时应“测量

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

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

每X分钟应选择一小批进行处理,将其T更新为当前时间。一个批次中所有对象的总数量限制为:不超过L

我希望在此解决三项任务:

  • 找到下一批对象拾取算法
  • 引入对象类:简单、优先级(至少适合每个第n批)和频繁(适合每个批)
  • 预测系统容量消耗(添加下一个服务器的时间=增加L)
  • 什么样的模型最能描述这样的系统?

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

    对象由人类添加/删除。N呈指数增长,相当缓慢,有些峰值是由发布引起的。当然,预测并不精确,只是一些估计。M在0到1E7之间变化,呈指数分布,大多数接近0

    我发现这里有几种策略:

    A.全速-将每批产品包装至接近100%。随着N的增长,特定对象命中的平均间隔将增长

    B.equal气质:)-试着在某个值附近保持一个平均间隔。批次填充级别将从某个较低级别开始增长。当它接近100%时——是时候获得更多的服务器了


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

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

    您的问题与您对该系统的描述不符。所以我假设描述是准确的

    当您计划测量时,您应该在第一次测量对象时通过该对象,并且在您希望测量发生时通过该对象。对象应具有
    权重
    属性和
    测量方法。当测量发生时,将调用
    measured
    方法,类之间的区别在于它们是否以及使用什么参数重新安排自己的时间

    在内部,您将需要几个优先级队列。有关如何实现的详细信息,请参阅

    第一个队列是测量发生的时间,即所有尚无法测量的对象。每次你安排一个批次时,你都会用它来找到所有可能发生的新测量值

    第二个队列是准备就绪的度量值,按照它们应该发生的调度周期和权重进行组织。我会让他们两个都上升。您可以通过从队列中提取项目来安排批处理,直到您有足够的时间发送

    现在你需要知道每批要放多少。考虑到您所描述的系统,事件峰值可以手动输入,但随着时间的推移,您希望这些峰值能够平滑。因此,我建议选择B,同等气质。因此,要做到这一点,当您将每个对象放入“ready now”队列时,您可以计算其“平均工作重量”,即其重量除以假定发生之前的周期数。将其与对象一起存储,并将运行总速率保持在您应该处于的运行速率。我建议您在每段时间内继续添加到批次中,直到满足以下三个条件之一:

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

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

    平均高水位线 =0.95*平均高水位线 +最大0.5*次(最后10次运行工作重量)


    如果
    average\u high\u water\u mark
    在您最大容量的2台服务器内,则添加更多服务器。(我们的想法是,服务器应该能够在不让您使用软管的情况下死亡。)

    谢谢您,本!感谢您详细周到的回答。我正在根据你的描述建立一个模型来模拟数字和可能的条件。