分配问题中的问题约束

问题描述 投票:0回答:1

我正在使用 Optaplanner/Timefold 来解决分配问题。

我必须在有一定限制的车辆上分配订单。这部分与云流程分布非常相似,并且与以下结构配合良好: @PlanningEntity 订单包含 @PlanningVariable 车辆。

但是,存在另一个限制:我必须为每个分配的订单有可用库存。现在它正在使用解决方案内部的地图进行处理(订单的材料是键,可用的盒子数量是值)。多个订单可能会消耗相同的库存,因此需要将所有订单都考虑在内。 我有很多订单,每个订单都有一种产品。每个订单可能需要不同数量的盒子。

@PlanningEntity Order{
    Product product;
    Integer ammountOfBoxes;
    @PlanningVariable(nullable)
    Vehicle vehicle;
}

@Solution Solution{
    @PlanningEntityCollectionProperty
    List<Order> orders;
    @ProblemFactCollectionPropert
    List<Vehicle> vehicles;
    Map<Product, Integer> stock;
}

还有其他方法可以处理股票吗?

我正在尝试使用 ValueRangeProviders 但我无法到达任何地方。

optaplanner timefold
1个回答
0
投票

您可以将您的产品实现为类别/问题事实,并将当前库存水平作为类别属性。之后,您可以实施约束来检查库存水平并在低于零时进行处罚。类似的东西

return factory.forEach(Order.class) 
       .groupBy(Order::getProduct, sum(Order::getAmmountOfBoxes))
       .filter((product, amount) -> product.getAvailableStock() > amount)
       .penalize(HardSoftScore.ONE_HARD, (product, amount) -> amount - product.getAvailableStock())
       .asConstraint("Not enougth stock level")
© www.soinside.com 2019 - 2024. All rights reserved.