You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OptaPlanner三规划实体装箱建模:我的方案是否高效可简化?

样本存储分配建模优化建议请求

场景说明

我正在优化样本(Aliquot)到盒子(Box)的分配,以及盒子到可用冰柜货架(Rack)的分配场景,涉及数十万份Aliquot、数百个Box及数十台冰柜。由于存在两种高度的样本管,对应不同高度的Box,且较高的Box在Rack上会占用两个较矮Box的空间,同时Aliquot带有SampleType属性,因此随着样本不断收集,所需Box的数量无法提前确定。

核心约束条件

  • 尽量减少每个冰柜中的样本类型数量(理想状态:同一冰柜内所有Aliquot为同一SampleType)
  • 同一样本采集事件产生的Aliquot需分配至且仅分配至两个冰柜,避免因冰柜故障导致样本丢失
  • 遵守Rack和Box的容量限制
  • 每份Aliquot和每个Box必须完成存储分配
  • Rack中存放较高Box时需移除层隔板,该层仅可放置高Box;每层有5列位,每放5个高Box会损失5个矮Box的容量

当前建模方案

我担心当前的问题建模不够合理,认为或许可以无需使用Shadow Variable,仅将Aliquot和Box作为Planning Entity即可,现寻求改进建议。

当前的领域模型代码如下:

@PlanningEntity
public class Rack {

    @InverseRelationShadowVariable(sourceVariableName = "box")
    private List<Box> boxes = new ArrayList<>();

    private Long boxCapacity;

}


@PlanningEntity
public class Box {

    @PlanningVariable(valueRangeProviderRefs = "rackRange", nullable = true)
    private Rack rack;

    @InverseRelationShadowVariable(sourceVariableName = "aliquot")
    private List<Aliquot> aliquots = new ArrayList<>();

    private Long boxHeight;

    private Long aliquotCapacity;

}

@PlanningEntity
public class Aliquot {

    @PlanningVariable(valueRangeProviderRefs = "boxRange", nullable = true)
    private Box box;

    private Long aliquotHeight;

    private SampleType sampleType;

}

public class SampleType {

    private String name;

}


@PlanningSolution
public class AliquotMap {

    @ValueRangeProvider(id = "rackRange")
    @ProblemFactCollectionProperty
    private List<Rack> rackList;

    @ValueRangeProvider(id = "boxRange")
    @PlanningEntityCollectionProperty
    private List<Box> boxList;

    @ValueRangeProvider(id = "aliquotRange")
    @PlanningEntityCollectionProperty
    private List<Aliquot> aliquotList;


}

当前模型使用了影子变量和三个规划实体,整体过于复杂,请问能否简化这些元素,或有其他更优的建模方法?


内容的提问来源于stack exchange,提问作者nogretz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:15:43