You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性规划中布尔表达式¬A ∧ B => C的正确线性化方法

布尔表达式¬A ∧ B => C的线性化实现

以下推导默认A、B、C均为0-1二元决策变量:取值1代表对应布尔命题为真,取值0代表为假,这也是线性规划处理布尔逻辑的标准变量定义方式。

先把原逻辑转成容易线性化的等价形式

所有蕴含式都遵循最基础的等价规则:P => Q 和 ¬P ∨ Q 真值完全一致,没有任何逻辑差异。
套到你要处理的表达式里:

  • 前件P是¬A ∧ B
  • 后件Q是C
    代入等价规则后原式变为:
    ¬(¬A ∧ B) ∨ C
    再用德摩根律把括号里的否定展开,最终化简成纯析取(全是「或」连接)的形式:
    A ∨ ¬B ∨ C

你写的约束报错的原因

你构造的0 <= (1-A) + B - 2* C <= 1的核心问题是把合法可行解给排除了。
比如取A=0、B=0、C=1,这个场景下前件¬A ∧ B为假,按照蕴含式的规则,前件为假时整个表达式恒真,属于完全合法的取值,但代入你的约束算出来值是(1-0) + 0 - 2*1 = -1,直接违反了你设的大于等于0的下界要求。类似被误删的合法解还有好几个,求解器自然会报不可行。

正确的线性约束

对于0-1变量组成的析取式,只要所有子命题的线性项相加大于等于1,就能满足「至少一个子命题为真」的逻辑要求——毕竟只要有一个子项取1,总和就至少是1。
对应到我们化简得到的A ∨ ¬B ∨ C,¬B对应的线性项是1-B,直接写出约束:

A + (1 - B) + C >= 1

把常数项移到右边化简,最终只需要加这一条约束就行:

A - B + C >= 0

正确性校验

枚举所有8种0-1取值组合可以验证:

  • 唯一违反原逻辑的场景(A=0、B=1、C=0,即前件为真、后件为假,蕴含不成立),代入约束得0 -1 +0 = -1 <0,被约束正确禁止
  • 其余7种合法取值代入约束,结果全部大于等于0,没有任何可行解被误删
    完全符合原布尔表达式的逻辑要求。

内容的提问来源于stack exchange,提问作者Mada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:33:14