在汽车行业,当您购买汽车时,您有数千种不同的组件可供选择。并非每个组件都是可组合的,因此对于每辆汽车,都存在许多用命题逻辑表达的规则。就我而言,每辆车都有 2000 到 4000 条规则。
它们看起来像这样:
- A → B ∨ C ∨ D
- C → ¬F
- F∧G→D
- ...
其中“∧”=“和”/“∨”=“或”/“¬”=“非”/“→”=“蕴涵”。
使用“limboole”工具(http://fmv.jku.at/limboole/),我能够将命题逻辑表达式转换为合取范式(CNF)。如果我必须使用 SAT 求解器,则需要这样做。
现在,我想检查规则集中特定组件的可构建性可行性。例如,对于以下每个表达式或组合,我想检查它们在规则集中是否可行。
- (A) ∧ (B)
- (A) ∧ (C ∨ F)
- (B∨G)
- ...
我的问题是如何解决这个问题。我之前问过类似的问题(解决命题逻辑的工具/布尔表达式(SAT Solver?)),但焦点不同,现在我又被困住了。或者我只是不明白。
一种选择是使用规则集的 ALLSAT 方法计算所有解决方案。然后我可以检查每个组合是否是任何解决方案的一部分。如果是,我可以得出这种特定组合是可行的。
另一种选择是,我将组合添加到规则集中,然后运行普通的 SAT 求解器。但是我必须为我要检查的每个表达式都这样做。
您认为解决此问题的最优雅或更简单的方法是什么?