![数学建模与数学规划:方法、案例及编程实战(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=1739260702-5lXNgZclDmU2fIfBDk7TztOnbDlDcPI7-0-f40c62bc84313a930e4b162d321cf7e1)
下面使用Python分别调用COPT和Gurobi来验证上述结论。由于COPT和Gurobi的实现方法基本一致,因此本章仅针对逻辑与的情形展示调用这两个求解器的完整代码,其余逻辑运算均仅展示COPT的完整代码,Gurobi的完整代码见本书配套电子资源。
Python调用COPT验证逻辑与运算建模的完整代码如下。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_3.jpg?sign=1739260702-XpD3kMhUjCBlAQuqAv7lmDPGiZ6wAdda-0-a2ce5634d0410b0213a0ac6b75d840de)
Python调用Gurobi验证逻辑与运算建模的完整代码如下。
![](https://epubservercos.yuewen.com/0DD641/31155568907421606/epubprivate/OEBPS/Images/txt003_4.jpg?sign=1739260702-sxzmBmq6bYz9ZRflDuX83MzCut7H7nzr-0-1e7c4be635ecfa2762fd9746f5e9fe2b)
在上述代码中,我们首先设置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=1739260702-dhwoMxV5DuQ9CQi8VEMIcJlxxEAAvZfi-0-241dca65263141c8c78118504bdc40d2)
为了方便用户建模,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=1739260702-l5wWocrnpx9lzZ95U27dV9Ny9vn5cfN3-0-0fc4c18ea65eec273788a1adbda1faaf)
经过验证,直接使用函数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=1739260702-VOf5p3J1NJyhzhw3Qg7vei0NXOl44y7F-0-8a6bae2c408c5a1178524b071ea08871)