Gurbio求解器的9.0以上版本,对于求解已经非常友好了。但它仍然不能添加三个或三个以上决策变量相乘的约束。因此使用不能如下图所示的类似一元分段约束的方法:
如果用一个分段值乘以多个0-1决策变量来得到函数值,如:
则这个约束在Gurbio中无法求解。
下面介绍一种分次分段再组合的约束构造方法,对下述一个2*2*2的分为8块的约束进行构造。
三维决策变量的范围是以(0,0,0)和(4,4,4)为对顶角的立方体,将其均匀的分为八块。
首先,在8个块内分别取一个点,他们的坐标为:
X0 = np.array([1, 1, 1, 1, 3, 3, 3, 3])
X1 = np.array([1, 1, 3, 3, 1, 1, 3, 3])
X2 = np.array([1, 3, 1, 3, 1, 3, 1, 3])
定义这8块中的函数值为别为:
Y = np.array([111, 113, 131, 131, 311, 313, 331, 333])
为了方便观察,这里将函数值和他们所在的区块对应了起来。从左至优分别为第0块-第七块。
1、定义模型,设定求解方法(当然这里第二行可以不写):
HDC = gp.Model("mip1")
HDC.setParam("NonConvex"