作为一个养鸡爱好者,心血来潮想提高一下小鸡产蛋的速度,计算一下给小鸡喂食的最佳时间点。来对这个问题进行一些扩展。
根据平时的观察添加一些规则/约束(不太清楚蚂蚁庄园的具体规则):
- 一个小鸡最多只能被两个小鸡抢食
- 一次喂食180g饲料,没有蹭食加速的情况下小鸡吃完需要2h
- 小鸡没有被喂食(空闲)时间t1之后,小鸡寻找好友列表的有空位的小鸡蹭饭
- 胖揍在自己庄园蹭食的小鸡,有概率掉落蹭食一半的饲料
- 蹭食的小鸡不被召回/被胖揍会一直呆在别人的庄园里
- 被喂食的小鸡在吃完饲料之前不能去蹭食
求解目标:
- 计算出给小鸡喂食的最佳时间点
- 找到最佳蹭食的好友庄园
问题分析:
首先初步分析,易得:
- 小鸡不在的好友庄园越多越好
- 小鸡正被喂食的好友庄园越多越好
- 被喂食的小鸡吃完的时间越长越好(没有加速,没有蹭食的时间越长)
除此之外,好友庄园是一个随时间变化的时变模型,如下
好友庄园模型(当前时间点t):
- 小鸡个数:n(t)
- 喂食状态:s(t)=True/False
- 剩余饲料:w(t)
根据如上模型考虑好友对庄园的行为,只需对动作时刻及动作类型的描述进行记录,如:
好友在时刻进行喂食动作,饲料消耗速度为v,此时喂食状态s(t)=True,剩余饲料(即庄园页面显示的剩余值,t为查看状态的当前时间)
求蹭食的最佳好友庄园
也就是求当前时刻可以蹭食到最多饲料的庄园(不考虑被胖揍的情况),遍历找最大的w(t)。计算出给小鸡喂食的最佳时间点
感觉问题可以转化成以下几种情况:
问题A
假设:我们已知所有时间点的状态
转化:在所有时间点里计算找出能使目标函数最大的时间点问题B
假设:我们已知当前时间点以及之前所有时间点的状态
转化:对未来时间状态进行预测,得到所有时间状态集合,在在所有时间点里计算找出能使函数最大的时间点问题C
假设:我们不预测未来时间点的状态,存在经验(如历史观察数据总结的目标函数最大值)
转化:当前决策时间点计算的结果与经验(阈值)进行比较来判断当前时间点是否最佳,持续计算直至找到比较合适的最佳时间点为止问题D
假设:我们对历史数据进行训练,训练出一个相对靠谱的时序预测器
转化:预测出未来时间点的所有情况,找到最佳
(其他的情况目前想不到了)
讨论
- 针对上文问题的具体方案
- 更佳的问题描述模拟建模方式
- 可以转化成的其他问题
- 本人没有注意到的一些其他细节问题
其实我认为这个问题代表了一类实时决策的问题,欢迎各位有想法的来补充来建议(文中的错误及不足,解决方法,一些相关领域的论文博客什么的等等),本人会根据大佬们的反馈积极修改~