我正在使用 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 但我无法到达任何地方。
您可以将您的产品实现为类别/问题事实,并将当前库存水平作为类别属性。之后,您可以实施约束来检查库存水平并在低于零时进行处罚。类似的东西
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")