整数优化就是线性优化,加上了一些决策变量的限制,即部分决策变量必须得是整数。
相比LP,IP优势在于:
劣势在于:
IP按照程度依次加深,可以分为三类:
很多时候,我们遇到的问题并不是直接以线性约束+整数限制的条件给出的,这种情况下,需要我们自己去建立IP。
下面的例子用xi代表第i个是否选中,1为选中0为不选中。
对应的IP约束为:
或的逻辑问题,可以用用bigM
方法去解决,其思想是通过添加新的变量,将部分约束变成多余的。
例如,对于问题
或
(两者可以都出现),y1、y2的定义域是[0,5]。可行域非线性,不可以用LP解决,IP解决方法如下:
类似地,对于
或
,其IP解决 方法是:
# model
m = Model()
# data
# The given digits
init_sol = [ 5 3 0 0 7 0 0 0 0;
6 0 0 1 9 5 0 0 0;
0 9 8 0 0 0 0 6 0;
8 0 0 0 6 0 0 0 3;
4 0 0 8 0 3 0 0 1;
7 0 0 0 2 0 0 0 6;
0 6 0 0 0 0 2 8 0;
0 0 0 4 1 9 0 0 5;
0 0 0 0 8 0 0 7 9]
# variable
@variable(m, x[1:9,1:9,1:9], Bin)
#costraint
for ind = 1:9 # Each row, OR each column
for k = 1:9 # Each digit
@constraint(m,sum{x[ind,j,k],j=1:9}==1)
@constraint(m,sum{x[i,ind,k],i=1:9}==1)
end
end
for i = 1:9, j = 1:9
@constraint(m,sum{x[i,j,k],k=1:9}==1)
end
for i = 1:3:7, j = 1:3:7, k = 1:9
# i is the top left row, j is the top left column
# For each 3x3 square, we sum from from row i to i+2 and column j to j+2
@constraint(m, sum{x[r,c,k], r=i:i+2, c=j:j+2} == 1)
end
for i = 1:9, j = 1:9
# If the space isn’t empty
if init_sol[i,j] != 0
# Then the corresponding variable for that digit and location must be 1
@constraint(m, x[i,j,init_sol[i,j]] == 1)
end
end