我正在尝试使用求解器进行优化。条件之一必须是:
if A=1 then B and or C = 1
我试图避免满足以下所有条件的特定组合:
A=1
B=0
C=0
我尝试了A*10+B+C /= 10
,但求解器也没有不相等的约束。
有人可以指出我正确的方向吗?
答案 0 :(得分:0)
让单元格D的计算结果为B + C,并在求解器中设置一个约束条件,即该单元格必须等于1。或者大于或等于1-不确定,因为您不确定所有的状态b&c ...
然后添加一个约束,即A必须小于或等于D。
答案 1 :(得分:0)
如果您想象函数中有一个真值表,您将得到以下内容:
A B C f
0 0 0 0
...
1 0 0 1
...
1 1 1 0
因此,我们可以使用布尔逻辑运算符并创建以下等效表示形式:
关于f = A和Not(B)和Not(C)的事实
仅当A = 1,B = 0,C = 0且以其他任何方式返回false时,此公式才返回true。 将其转换为二进制表示形式:
真为1,假为0,并且为*或为+,不是L为(1-L)
您将得到:
f = A *(1-B)*(1-C)
如果遇到一些更复杂的条件,则可以进行复杂的表达。绘制真值表,为f = 1的每一行收缩一个相似的“和”表达式,并在它们之间放置一个“或”。像这样: (A和Not(B)和C)或(not(A),not(B),C)或...。
有许多更有效的方法可以有效地产生较短的布尔表达式。如果对您来说很重要,那么您应该看看卡诺地图技术。 https://en.m.wikipedia.org/wiki/Karnaugh_map (对于这种简单的操作,我认为Wiki文章有点太复杂了。也许YouTube示例会更好地说明这一点)
否则,它应该可以满足您的所有需求:)