再谈动态规划

If you can't explain it simply, you don't understand it well enough.

Posted by Zeusro on March 14, 2020

If you can’t explain it simply, you don’t understand it well enough.

我把之前一篇文章发给一个女性朋友看,得到的反馈是“卖弄概念,表述单薄,缺乏深度,收尾草率,一通胡扯”。

好吧,我承认,我写的就是一坨屎。

今天,我决定抛开一切概念,以第一人称的视角,重新解释动态规划这种行动策略。

小偷偷东西

我是一个小偷,现在是凌晨12点,我正在入室盗窃。屋主的主人随时可能醒来,所以我要在天亮之前,偷窃屋内所有价值最高的东西,然后跑路。我要制定一个详细的行动纲领,指导我做这件事情。

这件事情就是:在有限的时间里面偷窃价值最高的物品

偷取物品需要成本,这个成本我们简单地当成时间成本,单位是小时。

我创建了一个符号来表示物品的大致属性。

1
2
3
4
5
6
7
8
# 偷iPhone需要1小时,而它价值5000块
iPhone(1,5000)
# 偷洗衣机需要3小时,而它价值2000块
洗衣机(3,2000)
# 偷现金需要1小时,而它价值10000块(现金)
现金(1,10000)

以此类推......

表格的内容为当前最佳决策产生的价值

物品\时间 0:00 1:00 2:00 3:00 4:00 5:00 6:00
洗衣机(3,2000) 0 0 0 2000 2000 2000 2000
switch游戏机(1,1500) 0 1500 1500 2000 3500 3500 3500
iPhone(1,5000) 0 5000 6500 6500 6500 8500 8500
保险柜里的现金(3,10000) 0 5000 6500 6500 6500 16500 16500

结论是显而易见的,如果我有5个小时的时间,偷switch游戏机+ iPhone + 保险柜里的现金(1500+5000+10000=16500)是最优选择;如果屋内没有现金,那么我只能选择 洗衣机 + switch游戏机+ iPhone;而如果这个房间只有一台洗衣机,那么我就只能花3个小时的时间偷走洗衣机。

至此,我们可以得出第一个结论:有限的条件(时间)制约了我收益的最大化

但这里有一个问题,直接给我5个小时干就不完事了,横轴的这个时间的意义是什么?我们接着来看第二个例子。

秦王扫六合

秦王扫六合,虎视何雄哉!挥剑决浮云,诸侯尽西来。

明断自天启,大略驾群才。收兵铸金人,函谷正东开。

铭功会稽岭,骋望琅琊台。刑徒七十万,起土骊山隈。

尚采不死药,茫然使心哀。连弩射海鱼,长鲸正崔嵬。

额鼻象五岳,扬波喷云雷。鬐鬣蔽青天,何由睹蓬莱?

徐氏载秦女,楼船几时回?但见三泉下,金棺葬寒灰。

我现在是秦王了,立志要扫六合(国)。我参照第一节的内容,对春秋六国进行建模。

1
2
3
4
5
6
# 韩国离我秦国最近,它的领土价值1,实力计为1
韩国(1,1)
# 燕国虽然小,但离我很远,打它比较费力,成本比较高,所以实力计为2
燕国(2,1)

其他以此类推......

这里我们定个新规矩:

  1. 只有实力>其他国家实力,才能实现兼并
  2. 兼并其他国家,能够把其他国家的价值加到自身的实力上面

所以我们会得到这样一个表:

其他国家\自身实力 1 2 3 4 5 6 7
韩国(1,1) 0            
赵国(2,3) 0            
燕国(2,1) 0            
魏国(1,1) 0            
楚国(5,8) 0            
齐国(2,3) 0            

可以看到,我作为秦王,如果本国只有1的实力,那么呆在家里扫地就行了,还搞什么兼并战争?

这个表格的其余部分我就不填了。

最终我们会得出这样的结论:

  1. 当我有实力时,可以一举击破比我弱小的人
  2. 当我实力增长,就可以挑战以前打不过的人

这个时候,我们就解答了第一个故事里面的问题:横轴(时间)的意义

条件是有限的,并且条件会随着自身的能力的增长/衰弱和时间的推移,而发生变化

这就是“动态”的意思。

而且对于这个游戏来说,每一个参与的国家,他们也有自己的算盘。对于他们来说,这也是一个动态规划的问题。主语和宾语发生互换。

至此,我们可以得出一个新的结论:

  1. 当自身弱小时,只能团结一切可以团结的力量(内援外援)

绿茶骗舔狗

我直接把上面的表格拿来用。

舔狗\绿茶的时间 1 2 3 4 5 6 7
舔狗A(1,1) 0            
舔狗B(2,3) 0            
舔狗C(2,1) 0            
舔狗D(1,1) 0            
舔狗E(5,8) 0            
舔狗F(2,3) 0            

到这里,我觉得可以更抽象化一点,讲清楚各个概念了。

有限的条件: 绿茶的青春年华

基本策略:广撒网,多认识点男的,才有多种排列组合

局部最优解:在有限的条件,让N个舔狗给我花钱买礼物。比如,本绿茶正在跟舔狗A逛街,于是发消息给舔狗B,让舔狗B给我打钱。这是一种多线程的高级操作,这种人对事务锁的理解远超常人。

最大价值:在有限的时间内,所有舔狗付出的总和

那这里有个问题,秦王和绿茶都是动态规划的践行者,但是我们为什么那么讨厌绿茶婊呢?

因为绿茶婊无视了道德契约,不尊重公序良俗

而且她这种做法,只顾短期收益而忽略了长期收益

想想,如果舔狗ABCDEF一起开个会,那场面想想就刺激。

结语

动态规划其实不止是算法,更是一种方法论,能够帮助你更好地规划自己的人生和时间。