Drools 如何在这种情况下使用口水

Drools 如何在这种情况下使用口水,drools,Drools,我有一个用例,其中我必须在满足特定条件的两个对象(比如说人)之间分配一组对象(我们称之为食物对象)(比如说每个人都有最低的能量需求,并且每个食物对象都提供一定量的能量)。我会为人A和人B写规则。如果这可以通过流口水来实现,有人能指导我吗。如果是,如何进行 假设我有以下域对象 Person : requirement List<Food> Food : energy 人: 要求 列表 食物: 能量 假设我已将人员A和人员B以及10个食物对象的列表添加到知识库中。首先回

我有一个用例,其中我必须在满足特定条件的两个对象(比如说人)之间分配一组对象(我们称之为食物对象)(比如说每个人都有最低的能量需求,并且每个食物对象都提供一定量的能量)。我会为人A和人B写规则。如果这可以通过流口水来实现,有人能指导我吗。如果是,如何进行

假设我有以下域对象

Person :
  requirement
  List<Food>

Food :
  energy
人:
要求
列表
食物:
能量

假设我已将人员A和人员B以及10个食物对象的列表添加到知识库中。

首先回答以下问题: 你能从未分配的食物清单中选择一种食物,并且总是决定它应该给谁,而不考虑已经分配了多少其他食物或其他人

如果答案是肯定的,请使用Drools Expert和以下规则

when
  $f : Food(unassigned == true)
  FoodLike($p Person, foodLike == $f; $l : likeness)
  not FoodLike(foodLike == $f; likeness > $l)
then
  // assign $f

如果答案是否定的,您将遇到一个装箱问题,这是NP完全问题。在这种情况下,请参阅。因此,只要复制粘贴这个例子(称为
cloudbalance
),其中计算机将是您的人,过程将是您的食物对象。

drools planner如何比我们将所有可能的组合逐一发送到规则更好?当然,我们可以像drools planner一样控制时间限制和最大组合数。将所有可能的组合逐个发送到规则是一种蛮力。假设你有10种食物和2个人,那就是
2^10=1024
组合。假设你有100种食物和10个人,这是
10^100=100000000000…0000000000000000000
组合。我同意。。但如果说只有一种可能的组合,drools planner会有什么帮助呢。对不起,我是drools planner的新手。我不知道它是如何工作的。请先阅读Planner手册:)取决于您如何定义事物,但在我的定义中,一个可能的解决方案!=一个可行的解决方案。可能只有一个可行的解决方案,但如果你有超过一个人,就永远不会只有一个可能的解决方案。现在需要理解的是,在
10^100
可能的解决方案中找不到一个可行的解决方案。谢谢杰弗里的回复。我只是看了一下手册。我一定会试试drools planner,因为这看起来像是我想要的东西。