首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OptaPy中为元素列表定义约束

如何在OptaPy中为元素列表定义约束
EN

Stack Overflow用户
提问于 2022-06-10 13:24:54
回答 1查看 52关注 0票数 0

我有一些困难,造成我的限制之一。我问题的结构是这样的

代码语言:javascript
复制
class ToolFact:
    id : str
    type : str
    
@planning_entity
class SubObjectFact:
    id : str
    tool : ToolFact

@planning_entity
class ObjectFact:
    id : str
    sub_objects : list[SubObjectFact]

我想要一个约束来做这样的事情

代码语言:javascript
复制
for each ObjectFact -> object
   for each SubOjectFact in object.sub_object -> sub_object 
       penalize if sub_object.tool is None 

但我想不出用constraint_factory做这件事的方法。有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-10 14:35:59

这是如何使用约束流来实现的:

代码语言:javascript
复制
from java.util import ArrayList

def penalize_subs_without_tools(constraint_factory: ConstraintFactory):
    return constraint_factory.forEach(get_class(ObjectFact)) \
        .flattenLast(lambda fact: ArrayList(fact.sub_objects)) \
        .filter(lambda sub_object: sub_object.tool is None) \
        .penalize("SubObjectFact without tool", HardSoftScore.ONE_HARD)

我将尝试制作它,这样在以后的版本中就不需要ArrayList了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72575070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档