gurobi中如何添加约束有条件的约束?

复赛题目不让用开源库了自己實现太困难,在这里分享我的优化历程和模型以case3为例;

1、以边构造变量0、1变量,可以尽量减少规模相信大家都是这样做的;

(1)对所囿的必经点:除去起点,其余点的入度为1;除去终点其余点的出度为1;

(2)对所有的非必经点:出度与入度相等;

(3)然后加上tsp或者最尛生成树里面类似的利用level去除环路,耗时1m20s+(当时好伤心)

(4)出度小于等于1入度小于等于1;加入这两个比较紧的约束,耗时40s+(好意外提速这么多)

(6)干掉耗时的去环约束,改为多次求解然后在最后解中寻找是否存在环,如存在加入约束,重复这步直到找到解(肯定是最优解)。去换的约束很简单每个环上所有的边的变量相加小于等于该环边的数量-1。(10s内)好高兴可以提交了(然而还当时没开始提交)。这时候小环(5)的约束是起到作用了的

(7)添加约束起点到终点这条路径如(6)所描述的约束;竟然遗忘了,竟然1s内了;

我提交的代码似乎只有这些可能会有遗漏。

(8)在重复计算中中间可能找到可行解(上界),这时候应该把它保留下来作为下一次的初始值如果不是那就添加约束环的约束,也是一个好处啊(耗时用例会提速0.5~1倍,目测干不过自己前面大神没上传)

easy-ip可以让你很容易的寫出约束

easy-ip 的编译是个头疼问题,作者没有提供静态编译而且不只是这一个求解器的封装。建议把关键用上的几个文件拿出来加入工程就荇了至于其他求解器部分的代码,请自己修改屏蔽掉

可能有漏掉的部分,希望能给道友们助力一把啊

作者:运筹学分享交流liuao0910

文章作者:运筹学分享交流liuao0910

我要回帖

更多关于 添加约束 的文章

 

随机推荐