谷斗动态

谷斗科技布局生态,赋能制造业“全局优化,决策未来”之力

2025
2025-09-01

对运筹优化算法项目实际落地的一点感悟

作者:王源

运筹优化实际落地项目流程


一个典型的运筹优化项目通常遵循以下步骤:需求调研、算法开发、算法测试、系统集成和上线实施。


需求调研:在项目启动前,必须进行详尽的需求分析,明确客户的业务需求及逻辑。这不仅限于技术层面,还包括商业考量,如项目的盈利能力、客户团队的综合素质、自动化与数字化水平是否支持项目实施等,以及客户推动项目的动机等因素。


算法开发:这个就是根据甲方的需求制定算法解决方案,然后去开发相应的算法即可。当然我们这里主要指的是运筹优化类的项目,涉及的算法主要都是运筹优化相关的建模和算法。如果是在学校里做学术的话,那基本上我们就只在这个部分玩命折腾就可以了。


算法测试:很多时候开发完成的差不多了,我们就需要一些测试算例和测试环境来辅助我们验证我们开发的算法是否正确,是否可以满足用户需求。这一步如果情况好一点的话,甲方会协助你搭建一个测试环境,如果情况差一点就只能是提取一些离线的类似Excel表格数据来自己模拟下测试环境。


系统集成:一般来说你开发的都只是一个算法模块,在实际生产环境中这个模块并不是一个可以单独运行起来的东西,它一定是属于一个软件或者一个系统中的子模块。这个时候就需要把你开发的算法模块和现有的软件和系统对接起来,这个就是系统集成主要解决的问题。


上线实施:这个部分可能会是整个项目里边最痛苦的部分,整个软件系统会真正部署到生产环境中去跑,那么在跑的过程中一定会遇到这样那样的问题,甲方也会提出这样那样的质疑,当然甲方也会提出一些之前从没有提过的需求。这些都是上线实施所需要面对的问题,这个问题并不是单纯的算法问题,而是融合了商务,项目管理和算法系统的综合性问题。


业务逻辑和数据耦合


前面梳理了一下运筹优化实际落地项目的流程。最近我们在项目上线实施的时候遇到了两个头疼的问题:


  1. 数据中隐含各种业务逻辑

  2. 算法和业务逻辑高度耦合


2.1 数据中隐含各种业务逻辑


这个混乱并不简单的是数据缺失,例如说在数据中时间粒度不统一,有时候时间粒度是周,有时候是天,有时候是0.5天,而且没有一个flag标识告诉你,到底时间粒度是什么。而是需要你通过数据内部逻辑去推算得到。比方数据中时间范围是一年,若我想判断当前这个数据表格时间粒度是周,我需要检查如果说时间索引最大没有超过 53的(一年大约有53周)话,那我就可以据此推断出当前时间粒度是周;若当前表格时间索引是天,那我们需要检查当前表格中时间索引要有大于53的,同时要小于365,这就可以确定出当前时间索引是天,而不是周。


2.2 算法和业务逻辑高度耦合


如果说对于数据的问题,我们作为运筹优化算法开发人员也无能为力的话,那么算法和业务逻辑高度耦合,这个部分则是我们可以改变的。典型的一个例子就是 我设计了一套遗传算法来求解 Capactiy VRP 问题,如果算法人员在设计遗传算法的时候往往是会将业务逻辑耦合入交叉算子或者变异算子中。


这样带来的一个严重的问题就是 业务逻辑是经常发生变化的,有些业务逻辑的变化会彻底导致你的算法完全不适用了。例如一开始告诉你是 Capacity VRP问题,后来才告诉你是 Pick up deliever 的问题,那么你之前基于Capcity VRP问题设计的很多算法和代码都需要大幅度修改。这显然并不是算法人员所期望的。


理想状态下算法开发人员总是希望我们在项目一开始就把需求明确下来,把要做什么问题完全明确出来,当确定下来之后就不要再变来变去了,但实际上甲方的业务也是在不断发展中的,即使对于甲方而言可能都没有这个全局视角去帮助你去把所有的需求提炼出来。所以在项目实施过程中,业务逻辑和项目需求发生变化几乎是一定会发生的,那么这个时候我们在设计算法的时候要注意将业务逻辑和算法尽量解耦,这样的话当业务逻辑发生变化了,项目需要变化了,我们可以在算法端尽量少修改代码,做到对变化较快的响应。


总结


以上就是最近做运筹优化落地项目的一点感悟,其实也算是一些教训吧。如果是一直在学校里只是做科研的话,没有深入到落地的第一线我也不太可能发现这些问题。以往总是听别的人说运筹优化项目落地难,各种抱怨需求变化,数据缺失等问题,真正自己身体力行之后才会对这些有更深刻的一个认识。