gurobi 目标设置经验分享

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=1200Nixi
其中 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(xi1), 那么当求解到接近最优值时, 目标函数的值变小了, 在gap的范围内不会将 x i x_i xi规划成0.

实际业务中, 我们仍在观察效果。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值