【发布时间】:2011-10-10 05:36:42
【问题描述】:
我正在开发的应用程序是一种“配置器”。它是用 C# 编写的,我什至编写了一个规则引擎来配合它。这个想法是有一堆命题逻辑语句,用户可以进行选择。根据他们的选择,其他一些项目变为必需或完全不可用。
命题逻辑语句一般有以下几种形式:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
符号:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
我对 Prolog 很陌生,但它似乎可以为我处理所有“规则处理”,让我摆脱当前的规则引擎(它有效,但速度不快或易于维护)。
此外,所有可用选项都属于层次结构。例如:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
如果隐含第二级的项目(特征,例如颜色),则必须选择第三级的项目(选项,例如红色)。同样,如果我们知道一个特征是假的,那么它下面的所有选项也是假的。
关键是每个产品都有自己的一套规则。建立一个包含这些运算符作为谓词的知识库,然后在运行时开始为产品构建所有规则是否合理?
我认为它可能起作用的方式是建立组件、功能和选项的想法。然后设置 then 之间的关系(例如,如果特征为假,那么它的所有选项都是假的)。在运行时,添加产品的特定规则。然后将所有用户的选择传递给一个函数,检索哪些项目为真哪些项目为假作为输出。
我不知道我所问的所有含义,因为我刚刚进入 Prolog,但我正在努力避免走上糟糕的道路并在此过程中浪费大量时间。
一些可能有助于定位我正在尝试找出的问题的问题:
- 这听起来可行吗?
- 我是不是找错树了?
- 尝试在运行时创建所有这些规则是否有任何缺点或顾虑?
- 是否有更好的系统来处理这类事情,我可以将其挤入 C# 应用程序(确切地说是 Silverlight)?
- 我是否应该检查其他竞争系统?
- 您对这类事情有什么一般性建议吗?
提前感谢您的建议!
【问题讨论】:
-
我会更改此问题的标题,使其包含短语“产品配置”或类似内容。你给自己写“关键是每个产品都有自己的一套规则”,所以我认为你对这个领域比对一般逻辑更感兴趣。
标签: prolog logic boolean-logic rule-engine inference