一:建模一般流程
1:首先有一个寻优需求,有一个逻辑清晰的需求文档。(一些基本的数据库以及业务流程上的约束限制)
2:从需求文档中梳理出要优化的目标和约束。
3:使用数学用具(函数,数学公式,方程(线性方程,常微分方程,偏微分方程))刻画目标,约束。其中难以用数学工具刻画的约束和目标仍旧以规则文档的形式保留下来。
4:将目标和约束合在一起,看看是什么数学问题。向已知的,研究得比较透的数学问题形式去靠拢。如果原问题过于复杂,可以运用一些“分解”技术(如Danzig Wolfe方法、Benders Decomposition等)将原问题分解成一些已知的学术问题。
5:如果还有规则性约束和目标无法处理的,可以设计相应的启发式算法来求解。(原启发式算法外形套路很统一,但是细节实现是仁者见仁智者见智, 属于无招胜有招的范畴)。
6:搞清楚模型涉及到的已知问题是否存在求解大规模问题的有效算法,理论保证做到什么地步。业内用得好的算法包是哪一些?(一般理论保证只能解释到非常宏观的层面,很多算法经CS人士改良后非常有效,但是其添加的技术细节缺没有理论保证,可能将来会有。)
7:如果模型涉及到的分解问题规模过大,已知的算法研究成果无法解决,则需要考虑重新建立模型和分解模型;或者自行设计针对性的新算法来求解。
8:模型求解调试,直至输出期望结果。
9:进行模拟仿真数值实验
二:如何落地智能软件
1:搭建数据库
2:按逻辑链接数据库
需要技能:数据库技术
3:按业务需求提取数据库数据,修改数据库数据
需要技能:SQL数据访问语言
4:按业务需求形成交互式软件接口
需要技能:搭建软件框架(如搭建网页式软件框架),属于软件开发
5:粉饰和炫化交互式界面和交互式动作
需要技能:软件美学技术
6:嵌入机器学习模型(模型接入端为数据库,模型输出端为相互式界面)
需要技能:机器学习理论与实现
7:发布前测试
需要技能:软件测试岗
8:发布预用版本
9:根据实际在线使用情况,随时修改在线BUG
需要技能:软件开发
10:不断升级版本