XOR 任何数字输入
a + b - ab(1 + a + b - ab)
XOR 二进制输入
a + b - 2ab 或 (a-b)²
推导
基本逻辑运算符
NOT = (1-x)
AND = x*y
我们可以从这些运营商那里得到...
OR = (1-(1-a)(1-b)) = a + b - ab
注意:如果 a 和 b 互斥,那么它们的 and 条件将始终为零 - 从维恩图的角度来看,这意味着没有重叠。在这种情况下,我们可以写成 OR = a + b,因为 a*b = 0 对于 a & b 的所有值。
2 因子异或
定义异或为(a OR B) AND (NOT (a AND b)):
(a OR B) --> (a + b - ab)
(NOT (a AND b)) --> (1 - ab)
AND这些条件加起来就搞定了……
(a + b - ab)(1 - ab) = a + b - ab(1 + a + b - ab)
计算替代方案
如果输入值是二进制的,则可以忽略幂项以得出简化的计算等效形式。
a + b - ab(1 + a + b - ab) = a + b - ab - a²b - ab² + a²b²
如果 x 是二进制(1 或 0),那么我们可以忽略自 1² = 1 和 0² = 0 以来的幂...
a + b - ab - a²b - ab² + a²b² -- 移除权力--> a + b - 2ab
XOR (二进制) = a + b - 2ab
二进制还允许其他方程在计算上与上述方程等效。比如……
给定(a-b)² = a² + b² - 2ab
如果输入是二进制的,我们可以忽略幂,所以...
a² + b² - 2ab -- 移除权力--> a + b - 2ab
允许我们写...
XOR (二进制) = (a-b)²
多因素异或
XOR = (1 - A*B*C...)(1 - (1-A)(1-B)(1-C)...)
Excel VBA 示例...
Function ArithmeticXOR(R As Range, Optional EvaluateEquation = True)
Dim AndOfNots As String
Dim AndGate As String
For Each c In R
AndOfNots = AndOfNots & "*(1-" & c.Address & ")"
AndGate = AndGate & "*" & c.Address
Next
AndOfNots = Mid(AndOfNots, 2)
AndGate = Mid(AndGate, 2)
'Now all we want is (Not(AndGate) AND Not(AndOfNots))
ArithmeticXOR = "(1 - " & AndOfNots & ")*(1 - " & AndGate & ")"
If EvaluateEquation Then
ArithmeticXOR = Application.Evaluate(xor2)
End If
End Function
k 中的任意 n
这些相同的方法可以扩展为允许 k 个条件中的任意 n 个条件为真。
例如,在三个变量 a、b 和 c 中,如果您愿意接受任何两个条件,那么您需要 a&b 或 a&c 或 b&c。这可以从复合逻辑算术建模...
(a && b) || (a && c) || (b && c) ...
并应用我们的翻译...
1 - (1-ab)(1-ac)(1-bc)...
这可以扩展到 k 个条件中的任意 n 个。有一种变量和指数组合的模式,但这会变得很长;但是,您可以通过忽略二进制上下文的幂来简化。确切的模式取决于 n 与 k 的关系。对于n = k-1,其中k是被测试条件的总数,结果如下:
c1 + c2 + c3 ... ck - n*∏
其中 c1 到 ck 都是 n 变量组合。
例如,如果满足 4 个条件中的 3 个,则为 true
abc + abe + ace + bce - 3abce
这完全合乎逻辑,因为我们所拥有的是 AND 条件的加法 OR 减去重叠的 AND 条件。
如果您开始查看 n = k-2、k-3 等。模式会变得更加复杂,因为我们要减去更多重叠。如果这完全扩展到 n = 1 的最小值,那么我们将得到一个普通的OR 条件。
思考非二进制值和模糊区域
实际的代数异或方程a + b - ab(1 + a + b - ab) 比计算等效的二元方程(如x + y - 2xy 和(x-y)²)复杂得多。这是否意味着什么?这种增加的复杂性有什么价值吗?
显然,为此,您必须关心离散点 (0,0)、(0,1)、(1,0) 和 (1,1) 之外的十进制值。为什么这会很重要?有时您想放松离散问题的整数约束。在这种情况下,您必须查看用于将逻辑运算符转换为方程式的前提。
在将布尔逻辑转换为算术时,您的基本构建块是 AND 和 NOT 运算符,您可以使用它们构建 OR 和 XOR。
OR = (1-(1-a)(1-b)(1-c)...)
XOR = (1 - a*b*c...)(1 - (1-a)(1-b)(1-c)...)
因此,如果您正在考虑小数区域,那么值得考虑一下我们如何定义这些运算符以及它们在该区域中的行为方式。
NOT 的非二进制含义
我们将NOT 表示为1-x。显然,这个简单的等式适用于 0 和 1 的二进制值,但真正酷的是它还为 0 到 1 之间的值提供小数或百分比补码。这很有用,因为 NOT 也是在布尔逻辑中称为Compliment,当涉及到集合时,NOT 指的是当前集合之外的所有内容。
AND 的非二进制含义
我们将AND 表示为x*y。再一次,显然它适用于 0 和 1,但它的效果对于 0 到 1 之间的值更加随意,其中乘法会导致部分真值(十进制值)相互递减。可以想象,您希望将真实建模为该区域的平均或累积。例如,如果两个条件假设一半为真,AND 条件是只有四分之一为真 (0.5 * 0.5),还是完全为真 (0.5 + 0.5 = 1),还是仍然半真 ((0.5 + 0.5) / 2)?事实证明,对于完全离散的条件,四分之一真值实际上是真的,而部分真值代表概率。例如,您是否会再次翻转尾巴(二元条件,50% 的概率)?答案是 0.5 * 0.5 = 0.25,或 25% 正确。累加实际上没有意义,因为它基本上是在模拟OR 条件(请记住,OR 可以在AND 条件不存在时由+ 建模,所以求和的特征是OR)。如果您正在查看一致性和测量值,则平均值是有意义的,但它实际上是在模拟AND 和OR 的混合体。例如,请 2 个人从 1 到 10 分的范围内说出他们对“外面很冷”的说法的同意程度是多少?如果他们都说 5,那么“外面很冷”这句话的真实性是 50%。
总结中的非二进制值
从这种非二进制值的角度来看,我们可以在选择运算符时捕捉实际逻辑并从头开始构建方程,但我们必须牢记数值行为。我们习惯于将逻辑视为离散(二进制)并将计算机处理视为离散,但非二进制逻辑正变得越来越普遍,并且可以帮助使离散逻辑难以解决的问题更容易/可能解决。您需要考虑该地区的价值观如何相互作用,以及如何将它们转化为有意义的东西。