运筹学
运筹学里面其实更重要的是建模。换言之,就是看现实问题和数学语言是怎么对应的。
这个因为考试的原因,太容易被忽略了其重要性。建模这事情说难不难说易不易。易在好像就是定义几个变量,定义一下变量之间的关系和目标函数。难在:
1、对现实问题要看透:什么才是问题里面的最重要的因素,抓住重点:
2、找到最合适的数学语言和它对应,
3、模型要尽量容易解
第一点是因问题而异的,没法聊。第二点是可以通过了解各种模型适用于刻画具有什么结构的问题来达到。运筹学里面有很多模型。举几个例子:
1、线性规划能表示所有有线性结构的问题,例如做采购,我们知道了每家供应商的固定价格和最大供应量,我们希望最小化成本,那总成本=单价×数量,这个就是这个问题里面的线性关系。
2、整数规划能处理一些线性规划处理不了的问题。例如还是采购,假如选了某家供应商,每选定一个供应商,还要增加一个固定成本,于是我们就要多设一个变量来代表是不是选了这个供应商,这时候就需要整数限制。不然那个变量解出来等于0.5,我们只选半个它?
3、当现实问题涉及多个参与者,每个参与者都有自己优化的东西,这时候就涉及互动,就可以将博弈论派上用场了。
4、如果见到一个系统是随时间变化的,就可以考虑用最优控制。
等等等等。
懂了对自己身边的具体问题建模,再拿个软件解一下模型,对大部分人就够了。所以要看书或者看视频自学的话,第一步是,每一章只看前面讲建模(modeling或者formulation)那一节。够用了。但是对于要更深入地去懂运筹学还不够。
做得好的运筹学问题都是这样的:
1、深刻认识现实问题
2、用数学语言描述问题(建模)
3、用数学工具研究模型
4、再把研究出来的成果从数学语言翻译成我们能看懂的语言(例如汉语,英语。。。)
前面我们只聊到1,2和一点点3,真正的美出现在4。4的重要意义在于如果我们把一个问题解出来了,但是看不懂解出来的是什么,那么我们对这个问题其实是没有增加多少认识的。有些时候还会导致其他问题,例如你在解决某个现实问题的时候,你把一个计算机解出来给你的解拿来用了,发现现实情况不像你想象中那样,那怎么办?是计算机算解错了吗?还是你的模型没建好吗?如果有人给你投资做一个某些方面的优化系统,人家能信得过这样靠建个模型解个解得出的方案吗?大多数不懂你在做什么的人是不会信的。所以好的解可以提供insight!(能让人读懂的现实含义)
例如Kelly
Gambling,假如已知有n匹马,他们胜率分别是b_i,跑第一的话投1块钱能赢o_i块钱,你总共有100块钱(你可以当成一百万,具体数目不重要,关键是比例),投到第i匹马的钱是100p_i。假如你要买马买无数次,那应该怎么分配你的钱到各匹马上去?这个问题的解就是p_i和b_i成比例。给我们的insight就是,获胜几率大的多放点钱,几率小的少放点钱,就是这么简单。这个model的解给了我们分散投资的idea。
这是最简单的情况,马和马之间是indepedent的,如果是投资股票,股票之间可能有相关性,如果这个相关性很重要,建模的时候就把它也考虑进去,得到考虑了相关性的解,再试图去interpret你的解。如果相关性不太重要,就没必要把模型搞复杂。
能得到给我们insight的解难吗?当然难!
要想4出现,前面的1,2,3一定要简洁而深刻。模型既能抓住问题的重点,还要足够简单,不然最后出来的结果怎么可能让人看得懂。这里头需要的可不仅是扎实的数学基础,数学只是描述问题的一种语言,更重要的还是对具体问题的认识和对建出来的模型的预判。
对于一个现实问题,建立一个简单好解又能较好地描述现实情况的模型,是一种艺术。这是数学界甚至科学界追求的美的原则:simple
and elegant.