![数学建模与数学规划:方法、案例及编程实战(Python+COPT/Gurobi实现)](https://wfqqreader-1252317822.image.myqcloud.com/cover/577/52521577/b_52521577.jpg)
2.2.2 逻辑与
考虑两个命题P和Q,则二者的逻辑与关系可表示为P∧Q。当命题P、Q均为真时,P∧Q为真,其他情况下P∧Q为假。为将上述真值关系转换成数学模型,需仿照上文做法,引入3个0-1变量x1、x2和y,分别表示命题P、Q和P∧Q的真值,即0-1变量取值为1表示命题为真,取值为0表示命题为假。
若要使得数学模型和逻辑与运算等价,只需要使得x1、x2和y的取值与P、Q和P∧Q的真值一一对应相等即可,即:若x1=1,x2=1,则y=1,其他情况下均有y=0。上述一一对应关系可以通过下面的约束实现。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_2.jpg?sign=1739144343-Qozo7beqIe5hLHE04EcXGEqzTKnPkxNw-0-4afd9664d5188098f7bc19b1f9171255)
下面使用Python分别调用COPT和Gurobi来验证上述结论。由于COPT和Gurobi的实现方法基本一致,因此本章仅针对逻辑与的情形展示调用这两个求解器的完整代码,其余逻辑运算均仅展示COPT的完整代码,Gurobi的完整代码见本书配套电子资源。
Python调用COPT验证逻辑与运算建模的完整代码如下。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_3.jpg?sign=1739144343-TcEkKZtISnX5VA3HBBLWrCQjKLhTlUFu-0-1d3a6f8d15112f877d658a0a55f9509b)
Python调用Gurobi验证逻辑与运算建模的完整代码如下。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_4.jpg?sign=1739144343-CCPfORzcs6ay3nMiScZqBW37daIRoo0t-0-e2c9de6bc920d1cd45f8cf2b78741a74)
在上述代码中,我们首先设置x1=1,x2=1,运行代码,结果显示y=1。更改x1和x2的值,y的取值会发生相应的变化,即当x1=1,x2=0或x1=0,x2=1或x1=0,x2=0时,y的值均为0。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_5.jpg?sign=1739144343-GTI31c15XcvWSC49827C7ue0KdzL6CmR-0-15c6dc84ecc9c3d8eb650bd5d77e35b5)
为了方便用户建模,COPT和Gurobi都提供了内置的逻辑与约束的添加方法,这些方法为用户提供了极大的便利。COPT和Gurobi中对应的函数接口均为addGenConstrAnd(y,[x1,x2],name="")。若要使用该函数添加逻辑与约束y=(x1∧x2),相应的代码如下。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_6.jpg?sign=1739144343-iI17dbs49a40rnh7WZTKGmqPBALYvfcw-0-418f41b9398bb7825bf1dbd0ca468c1b)
经过验证,直接使用函数addGenConstrAnd进行建模的结果与使用式(2.1)~式(2.4)建模的结果完全相同。
进一步地,考虑N个命题的逻辑与运算。引入N个0-1变量xi(∀i=1,…,N),表示对应命题的真值。引入0-1变量y,表示N个命题的逻辑与运算的真值,即y=(x1∧x2∧…∧xN)。y的真值取值情况可用以下约束等价描述。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_7.jpg?sign=1739144343-DK7lZ1O9cLPgeXU617r2plHl6bYVNEBo-0-053ba567d1d22b8d49d3b9dbe484571a)