求解器开源库新手入门教程(冲刺必看)
大家好!之前有个哥们说给开源库教程,怎么迟迟不给?只好我来了。
先说明我的使用情况,我前几天用小号在各个赛区跑了一下。基本都是前三,有四个赛区是第一。所以鄙人觉得还是有资格来给大家做个教程。(请不要喷,小号就是跑一下,就解散队伍了,没有影响你们,估计你们都觉察不到)
下面以问答的方式来讲开源库的使用。
1. 神马是开源库?神马是求解器?
这个赛题可以看成是个组合优化问题,因此可以建立整数线性规划模型。而整数规划模型的求解算法是比较固定的,因此有开源社区写出这个求解工具,这些就是求解器,也就是开源库。
2. 求解器有多牛逼?
绝对没有大家说得那么神乎。是的,求解器容易求出最优解,但是时间开销大。那些20ms出最优解的,我相信不是求解器算的。所以,这也是赛制所决定用求解器有优势,因为权值优先。如果限定时间是 1s,估计就没几个人用求解器了。
3. 哪个求解器最好?
没有最好,但对于这道题来说,我从个人的使用经验给大家分享一下。
——gplk最渣,问题规模稍大就跪
——lpsolve挺好,容易上手,求解速度也不差
——scip据说是最快的开源求解器,但是版权限制得比较严格,我放弃了
——coin-or cbc我去,这个简直就是求解器中的战斗机。求解快,还有很多控制求解过程的接口。但是,要花点心思看文档,没那么容易做好。我选择的是这个
4. 现在看论文学模型还来得及吗?
看个人。anyway,老子就没参考任何论文的模型。一看到题目,经验告诉我可以用整数规划做,就做了。后来,我回头看了一下别人的论文。任性地告诉大家,论文上的模型有改进的地方。好了,如果真的不会,那我只能简单说说一二。无非就是几个约束,起点有且仅有一条出边,终点有且仅有一条入边,必经点既有且仅有一条出边又有且仅有一条入边,其他点要么没有出边和入边,要么既有且仅有一条出边又有且仅有一条入边
5. 现在用求解器还来得及吗?
我是看到论坛上有个人抱怨说自己辛辛苦苦写了那么久的算法,被别人轻轻松松用求解器超越了,很伤心,才决心写这么个帖子的。我理解大家的心情。但是,不要放弃,你要是觉得自己本来的算法改不动来,那就试试求解器。我是用了大概三四个小时写出lpsolve版本的代码,求解速度还不错。你要是能够在这么大压力,这么短时间快速建模,快速使用求解器,快速优化代码,那我觉得你就是华为想要的人。
6. 用求解器怎么解决环?
不要盲目崇拜别人,肯定自己的想法就好。这个题目是NPC问题,没有一个轻轻松松解决环问题的办法。你能想到的,不错,就是那样的,不要怀疑自己。但为尊重比赛,恕我不能直说。
7. 用求解器是不是太可恶了,不给别人活路啊?
这么敏感的问题,来来来,我们说点轻松的。NBA有关注吧,库里喜欢吗?库里这么逆天的表现,要是能坚持五六年,说他是全宇宙最伟大的篮球运动员也不为过。可偏偏有人说,那有啥?就是一个投手!我去。。。你牛逼你投试试?好像投篮很简单的样子。再说了,库里只会投篮吗?这么说的人一般是没有认真看过库里打球赛的。几个人过来包夹,库里还是轻松地运球过人,然后从容、淡定、任性地投进了。毕竟是控卫!库里就是投篮太牛逼来,才让你们忽略了其实他各个方面都不错的一个伟大球员。我敢说,库里不用投篮,其他技术(防守、过人、组织)能力那也是狠狠地甩某些球星几条街的球员。。。。
停!!!扯哪了?。。。
噢,对不起,我是库迷,说到这个激动来。。。唉,我刚才是说库里,还是说开源库来着???
8. 最后,用Linus大神的一句名言与君共勉:
Talk is cheap, show me the code!