锤子与钉


今天参与一个优化问题的讨论会,问题是如何在有限的人力资源下找出最好的排班安排以使得在截止时间前完成最多的任务。 这是一个经典的作业调度问题,而且初步的实验验证精确解法解决大规模问题时效果有限,主要瓶颈是速度慢。 这里首先提学习实践运筹学的好处之一,那就是大部分实际问题都可以归结为一些经典的问题,而且这些经典的问题在学术界已经有了大量的尝试来寻找好的算法。 面对一个实际问题正确的作出归类应该是运筹学实践者的基本功,就像会议讨论的问题大家一开始就有共识–这是一个作业调度问题。 这也是与同行讨论问题的好处,大家都有相似的学术背景,不需要太多的解释基本的背景就可以进行更深入的讨论。

我在研究生阶段做过一些车间调度的研究,当时对精确解法相当不熟悉,当时大部分时间都是在设计和实现元启发式算法,只是到了读博士的时候才对整数规划有了更多的接触。 工作以后有了几次运用列生成解决实际问题的经验,所以我自然的去考虑这个问题是不是也可以用同样的模式去解决。 直到到来别人提出仿真模型的更好方法我才意识到自己某种程度上已经陷入了一种知识误区,或者说手里有锤子然后看什么都是钉,这是很危险的情况。 仿真模型来解决调度问题我是第一次听到,但是感觉是非常有意思的思路。 现在想来,同样一个问题还是要尽量了解不同的应对策略,这样才能熟悉优劣以根据具体情况作出相应的选择,不然所有问题只会一种方法难免会钻牛角尖。

这也牵涉到一个学习舒适区的问题,当一个技术熟悉之后,还是要适当的扩展,去学习尝试不同的技能。 之前用Java比较多,发现比C++要方便太多,最后实现一个优化引擎重新用C++实现,也慢慢体会到了C++的优美,以前没有用过的语法在最近的工作了也有了更多的尝试。 然后是理论,现在对Benders分解方法还是了解的比较浅显,今天的会提醒我要主动的去学习,掌握看待问题的不同视角至关重要。

是为记。

 

comments powered by Disqus