或谓的优化

0

的问题

假设我有一个实体,有3个属性:A1、A2、A3这样的:

  1. A1可以仅有的价值观:1,2,3
  2. A2只能有值: 10, 20, 30, 40, 50
  3. A3只能有值:100号编、200号编

和一些规则,例如:

R1: (A1 in (1, 2)) AND (A2 in (20, 40, 50)) AND (A3 IN (100))
R2: (A1 in (1, 3)) AND (A2 in (10, 30)) AND (A3 in (200))
R3: (A1 in (1, 2)) AND (A2 in (10)) AND (A3 in (100))

然后有一个判断: R = R1 or R2 or R3我想尽量减少。 事情是, A1=1 涵盖了所有可能的变化 A2A3所以我们可以把它带入一个单独的条款: R = (A1=1) or (the rest)

我已经试过了布尔最小化的方法通过声明变量 a=(A1=1), b=(A1=2), ..., k=(A3=200)然而它似乎不能工作,因为:

  1. 布尔优化是不知道的所有价值观的一个属性
  2. 布尔变量不是独立的 当试图解决这些问题,表达方式是变得太复杂和不便利的交通,美,不是咖啡是不是能够最大限度地减少它的所需的方式。

我也想存储每个到每映射,并在情况下,他们中的一个有价值的另外一个,使用它作为一个聚合锚,然后将其删除,并重复,但它需要永恒的和相当多的RAM。

也许我们可以代表属性的价值观作为设置和地址,从理论的观点。

你有没有遇到一个问题,这个? 你知道还有更好的方法来解决它吗? (启发式被确定为良好)

1

最好的答案

1

一方法的优化表达为评估可分割的规则多次在属性最少的价值观。 在此之后扩展你可以收集的数值再次对那些具有相同的最后条款。

  1. 2组,一规则,接受A3=100和一个规则,接受A3=200名。 一项规则可以最终在这两个群体。 然后再修改规则的集团所以,它只接受的价值的集团和不另一个。

  2. 小组,这些群体的价值观的A1使用同样的逻辑。

你最终会有一个扩大了表达这样的:

A3 = 100 AND (
    (A1 = 1 AND A2 IN (10, 20, 40, 50)) OR
    (A1 = 2 AND A2 IN (10, 20, 40, 50)))
OR A3 = 200 AND (
    (A1 = 1 AND A2 IN (10, 30)) OR
    (A1 = 3 AND A2 IN (10, 30)))

基本上,我们所建树价值观为A3在深入1和价值观为A1在深度2和A2值时3. 如果有一个路径从根叶采用的属性值,然后该规则是完成,否则它不是.

之后,你可以合并的所有节点,同子树和相同的父母。 为此,你可以比较的叶子的所有节点,同父母,如果他们的比赛你可以合并的节点。 在那之后你走之一的水平和比较节点,同父母等。

对你的例子你最终会有这表情:

A3 = 100 AND A1 IN (1, 2) AND A2 IN (10, 20, 40, 50) OR
A3 = 200 AND A1 IN (1, 3) AND A2 IN (10, 30)

这个过程是非常简单的,也可以缩短的表达,而不仅优化它进行评估。 它可能不是完美的,但它可能是一个开始。

2021-11-22 20:45:00

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................