Gurobi 求解混合整数规划的过程中, 内部使用的算法包含了分支定界方法,是一种迭代的方法, 一般终止迭代的方式主要有两种, 一个是设置运算时间(TimeLimit),一个是MIPGap。本文浅显的记录实际中遇到的关于目标函数的设计(涉及到MIPGap)的一点想法。
1 目标函数权重对混合目标优化的影响
o b j = 10000 a + 100 b + c obj =10000a+100b+c obj=10000a+100b+c
上面的a,b,c 不是简单的变量, 可以认为是复合表达式, 例如
a
=
w
1
x
1
+
w
2
x
2
+
.
.
.
+
w
n
x
n
a=w_1x_1+w_2x_2+...+w_nx_n
a=w1x1+w2x2+...+wnxn
b,c 依次类推。
在MIPGap=0.05, a,b,c的取值范围一致的情况下(执行归一化后), 上面目标的参数设置是不合理的, gap为5%, 求解其会着重优化目标a, 可能存在对b和c没有优化好的情况下, 就终止了执行。
2 另一个实际例子
接上部分的分析, 一个显示的例子是:
o
b
j
=
∑
i
=
1
200
N
i
x
i
obj=\sum_{i=1}^{200}N_{i}x_{i}
obj=i=1∑200Nixi
其中
N
i
N_i
Ni的取值范围为1到1000的整数, 是一个已知量,
x
i
x_i
xi是0-1变量, 此处省略约束条件,我们的目标是求上述表达式的最大值。
实际上, 我知道上述问题的最优解是全部的变量取值1, 但是在实际求解过程中总是小概率的得出个别 x i x_i xi的值不是1.
我们解决这个问题的一个思路的是基于问题的特征, 将目标函数的取值范围简单的缩小, 例如我们知道大部分的 x i x_i xi都能是1, 我们把目标改成了 o b j = ∑ i = 1 200 N i ( x i − 1 ) obj=\sum_{i=1}^{200}N_{i}(x_{i}-1) obj=∑i=1200Ni(xi−1), 那么当求解到接近最优值时, 目标函数的值变小了, 在gap的范围内不会将 x i x_i xi规划成0.
实际业务中, 我们仍在观察效果。