我正在尝试一个优化问题与求解器。其中一个条件必须是:
if A=1 then B and or C = 1
我试图避免以下所有条件都成立的特定组合:
A=1
B=0
C=0
我尝试了A*10+B+C /= 10,但求解器也没有不等式约束。有人能给我指一下正确的方向吗?
A*10+B+C /= 10
7kjnsjlb1#
单元格D的计算为B+C,在求解器中设置约束条件,即该单元格必须等于1。或者大于或等于1 -不确定,因为您没有明确B和C的所有状态...然后添加A必须小于或等于D的约束。
dphi5xsq2#
如果你想象一个真值表到你的函数,你会得到这样的东西:阿、英、中、f0 0 0 0...十零一...一一一因此,我们可以使用布尔逻辑运算符并创建以下等价表示:在f = A且非(B)且非(C)时为真此公式仅在A = 1、B = 0、C = 0时返回true,在其他情况下返回false。将其转换为二进制表示:真为1,假为0,为 *,或为+,非L为(1-L)你会得到:f = A (1-B)(1-C)如果你遇到一些更复杂的情况,你可以做一个复杂的表达式。画出你的真值表,为f = 1的每一行构造一个类似的"与"表达式,在它们之间放一个"或"。就像这样:(A而不是(B)和C)或(不是(A),不是(B),C)或......有更有效的方法来实现这一点,有效的意义上产生更短的布尔表达式。如果这对你很重要,那么你应该看看卡诺图技术。https://en.m.wikipedia.org/wiki/Karnaugh_map(我认为维基文章对于这个简单的操作来说有点太复杂了。也许YouTube的例子会更好地演示这一点)否则它真的应该涵盖你所需要的一切:)
2条答案
按热度按时间7kjnsjlb1#
单元格D的计算为B+C,在求解器中设置约束条件,即该单元格必须等于1。或者大于或等于1 -不确定,因为您没有明确B和C的所有状态...
然后添加A必须小于或等于D的约束。
dphi5xsq2#
如果你想象一个真值表到你的函数,你会得到这样的东西:
阿、英、中、f
0 0 0 0
...
十零一
...
一一一
因此,我们可以使用布尔逻辑运算符并创建以下等价表示:
在f = A且非(B)且非(C)时为真
此公式仅在A = 1、B = 0、C = 0时返回true,在其他情况下返回false。将其转换为二进制表示:
真为1,假为0,为 *,或为+,非L为(1-L)
你会得到:
f = A (1-B)(1-C)
如果你遇到一些更复杂的情况,你可以做一个复杂的表达式。画出你的真值表,为f = 1的每一行构造一个类似的"与"表达式,在它们之间放一个"或"。就像这样:(A而不是(B)和C)或(不是(A),不是(B),C)或......
有更有效的方法来实现这一点,有效的意义上产生更短的布尔表达式。如果这对你很重要,那么你应该看看卡诺图技术。https://en.m.wikipedia.org/wiki/Karnaugh_map(我认为维基文章对于这个简单的操作来说有点太复杂了。也许YouTube的例子会更好地演示这一点)
否则它真的应该涵盖你所需要的一切:)