1.前言
上回书我们说到,求解阴阳师悬赏封印的最优策略是一个线性规划问题,更准确的说是一个整数规划问题。上次的初代模型中,我们在探索副本关卡中求解。
2.初代模型存在的问题
在初代模型中,我们给出了矩阵A。
首先该模型仅包含了探索副本的所有关卡,忽略了御魂副本、秘闻副本、挑战关卡,因而有局限性。其次没有对关卡进行筛选,因为阴阳师们的能力不同,可以攻打的关卡也不同。例如根据初代模型的结果,应当挑战第十七章的某个关卡,但是我太菜了,只能打到第十六章。
3.改进
首先我们按照上次的方法获取原始的御魂妖怪、秘闻等数据并处理。
其次我们对初代模型进行改进。
def optimize(monsterList,monsterNum,exploreMax, enableChallenge, yuhunMax, miwenMax):
参数说明:
monsterList-需要的妖怪列表 list
monsterNum-需要妖怪的相应数量 list
exploreMax-探索最大章节 int
enableChallenge-是否允许挑战 boolean
yuhunMax-御魂副本的最大层数 int
miwenMax-秘闻副本可以达到的最大层数 list
通过后四个参数,我们就可以限定当前可以挑战的关卡范围,从而不至于出现求解结果超出阴阳师能力的尴尬情况。
4.界面设计
1)筛选器
首先是一个筛选器,用来限定阴阳师可以挑战的关卡范围。
2)妖怪选择器
接着是一个妖怪选择器,一般的悬赏封印都是四种不同的妖怪,但我们也允许用户添加或删除。选好之后点击计算按钮。
3)计算结果
即可得到一个计算结果。有理由相信,这就是最优解!
5.用户体验改进
考虑到筛选器部分的操作过于繁琐,如果每次进入页面都需要用户重新选择的话,显然用户体验过于差劲。我们可以将用户的初次选择记录到浏览器cookie上,下次使用直接将上次用户的选择作为默认选项。
6.民用接口
我启用了备用服务器,各位阴阳师可以访问
http://47.100.225.209
进行规划
7.工作回顾
8.细思极恐
突然听说整数线性规划问题好像是个NP问题!因此在规划求解时,我设置了三秒的最大求解时间,防止程序阻塞。