【发布时间】:2019-04-24 13:53:37
【问题描述】:
我希望设计一个基本上需要根据输入做出决策的系统。输入将是一个人。
class Person:
def __init__(self, name, age, sex, weight, height, nationality):
self.name = name
self.age = age
self.sex = sex
self.weight = weight
self.height = height
self.nationality = nationality
我们希望根据特定规则将每个人分配到一个学校班级。
例如:
22-25 岁的英国女性应该上 B 级。 75岁以上的男性应该上A班。 6英尺以上的女性应该上C班。
我们将有大约 400 条不同的规则,并且应该应用满足的第一条规则 - 我们需要保持规则的顺序。
我正在考虑如何在这里存储/表示规则。显然,你可以有一个很长的if, elif, elif 声明,但这不是有效的。另一种选择是将规则存储在数据库中,并且可能有一个内存表。
我希望能够在不发布版本的情况下编辑规则 - 可能有一个前端允许非技术人员添加、删除和重新排序规则。
一切都在这里 - 唯一确定的要求是实际的编程语言必须是 Python。
为进一步的上下文添加
我想我的问题是如何存储规则。目前它是一个很长的if elif elif 语句,所以只要业务逻辑发生变化,PM 就会制定新规则,然后我将它们转换为 if 语句。
系统的所有输入都将通过相同的规则列表发送,并且将应用第一个匹配的规则。多个规则可以应用于每个输入,但它始终是第一个应用的。
例如
25 岁以上的女性进入 B 类
女性上A班。
即使第二条规则也适用,任何 25 岁以上的女性都将被分到 B 级。
输入将始终包含相同格式的输入 - 尚未确定它将是对象还是字典,但其中一些值可能是 None。有些人可能没有与他们相关的体重。
【问题讨论】:
-
你的问题太宽泛了。请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。请参阅How to Ask 页面以获得澄清此问题的帮助。
-
效率不高但更容易编写的可能是基于 Python 表达式的文件格式。那么规则条目可以是
sex == "male" and age > 75 -> A。然后可以在->拆分条目。第一部分转到 Python 的eval()(带有适当的命名空间字典),如果它返回True,则该类取自第二部分。 -
听起来最重要的选择是如何存储/表示规则。谁将负责维护规则——程序员还是业务人员?规则有多复杂?您的第一个示例规则已经相当复杂——
sex == 'f' and age >= 22 and age <= 25。 -
@JohnGordon 是的,真正的问题是如何存储/表示规则。我想要一个允许非技术人员添加和删除规则的前端。它可以很复杂,如
if x or y, but not z or q, then p -
@Selcuk 如何重新打开或完全删除此问题。
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer-> 然而我得到了一个很好的答案,所以它是可以回答的。我得到了 noxdafox 的精彩回答,然后搁置了,所以没有其他人可以提供他们的见解。在获得精彩信息后关闭它非常令人沮丧。
标签: python artificial-intelligence rules rule-engine expert-system