什么是优化技术?给算法小白同学的快速讲解和上手文

简介: 本文作者用一个曾经小白学习的视角,来讲解什么是优化问题,以及要如何用这个优化技术。

背景

作为阿里达摩院MindOpt的产品经理,经常被尊贵的客户问,什么是优化求解器,能干啥? 一般我都秀下面类似的图。这张图改版了很多次,目标都是给各位老板讲解:优化求解器是一款底层数学软件,求解优化问题,可以用在各行各业。用了优化求解技术,能得到 “最大化收益、最小化成本” 的方案,“满足规则的可行方案”。


image.png

老板们听了很开心,觉得是个好技术。 然后,他们会让下面的技术同学研究下,技术同学过来看文档很痛苦,有很多个案例、很多个文档链接,几百个API或属性概念,还甚至有“建模语言”需要学!因此, 本文我用一个曾经小白学习的视角,来讲解什么是优化问题,以及要如何用这个优化技术。


一、术语定义

优化问题:在给定约束条件下,找到一个目标函数的最优解(最大值或最小值)。优化求解器:求解这个优化问题的软件。看了这个定义,是不是有种 “不明觉厉、但听君一席话如听一席话” 的感觉,还是没有get到这个东西是什么,能做什么用。别着急,接下来快速get。

二、快速get理解优化是什么

作为初学者,如果对优化技术陌生,可以把 “求解优化问题” 理解为 “解一个不等式方程组”,“解方程的”。优化问题就是这个要计算的方程组。接下来我们引入一些数学公式,让大家更直观理解。放心,都是初高中数学水平的数学公式。

引用说明:下面的公式均来自 MindOpt新发布的基于大模型的“AI工程师”MindOpt Copilot 生成的内容截图,或者案例广场公开内容截图。大家也可以进去聊天生成自己需要的示例公式和代码。


2.1 方程:一个鸡兔同笼问题

问题:

有一笼兔子和鸡,兔子和鸡各有一个头,兔子有4只脚,鸡有两只脚。笼子上有 35 个头,下有94 个脚。请问兔子和鸡的数目各是多少?

对应的数学公式如下红框所示 (MindOpt Copilot生成)


image.png

可以看到数学公式中,有两个 “等号 = ” 描写的约束关系的方程组。

这个时候算出来的结果是:

- 兔子的数量x=12

- 鸡的数量y=23这是个方程组,是的,优化求解器也可以算方程组。


2.2  不等式方程组+目标函数:鸡兔同笼问题的优化问题

一个优化问题,与上面大家熟知的方程对比, 会增加:不等式关系,然后增加了一个目标。比如上面的例子更改下问题:

有一笼兔子和鸡,兔子和鸡各有一个头,兔子有4只脚,鸡有两只脚。笼子上有头至少有30个,下面脚至多80个。要想兔子最多,请问最多有多少个兔子?

这个时候,公式如下图 (MindOpt Copilot生成),变化主要是 :

  1. 对应的数学公式的约束就是个不等式的关系:最多,最少。subject to 就是约束的意思,有时会写成 st.。
  2. 增加了目标,想要兔子最多。对应 maximize x,也就是优化的目标函数 f = x,优化方向是最大化。

image.png

这个时候,在求解这个方程组时:

  • 如果只考虑不等式的约束,解可能就是个域(有多种解、多个可行域)。比如 x=1,y=29;  x=3,y=29; x=3, y= 30……等等;
  • 增加了要将x最大化这个目标,就相当于在这个域里面找最大值。这个时候可以利用优化求解器进行计算,得出最优目标时候的变量取值,如下:

- 兔子的数量 x=10,  

- 鸡的数量y=20.需要注意的是:在有些情况下,最优目标时的变量取值也有可能是个域(多解)的情况。这里,是不是有高中学线性规划的感觉了?比如下面的高一的数学题,是不是很熟悉?


image.png

这些就是优化问题。它们采用的是最基础的线性规划的建模方法。接下来,我们从应用领域和问题维度的角度,来拓展下优化问题的思路。


三、拓展思路


3.1 拓展应用场景

在各类业务场景中,都有可使用“优化问题”的方法来描述业务遇到的问题。比如餐饮饭店、资产投资、生产制造、物流货运、零售、广告、文旅售票、人力资源、电力能源、航空航天、农业种植、医疗保健、游戏竞技策略等,或者家长们常遇到的数学应用题。下面我们举2个例子:

例1. 电商互联网常见的广告资源的安排:

电商平台要为一家新兴手游公司进行广告推广,平台有两种广告类型可供选择:类型A、类型B、类型C。广告类型A的转化率为5%,每投放一次费用为10元;广告类型B的转化率为8%,每投放一次费用为15元; 广告类型B的转化率为7.7%,每投放一次费用为12元。手游公司需要至少获得1000次投放,并且总费用不能超过20000元。每种类型广告都希望至少投放5次。平台希望最大化累计转化数,要如何规划广告投放?

得到如下的优化问题数学公式 (MindOpt Copilot生成)

image.png

最后用优化求解器算得的解是:


广告类型A投放次数=5 广告类型B投放次数=6 广告类型C投放次数=1655 - 目标函数值 = 128.165 为了最大化累计转化数,电商平台应该投放5次类型A的广告(每次转化率为5%,每次费用为10元),6次类型B的广告(每次转化率为8%,每次费用为15元),以及1655次类型C的广告(每次转化率为7.7%,每次费用为12元)。此时,累计转化数最大,为128.165次。

例2.  企业人力资源的员工福利安排:

假设一家公司想要给每位员工至少提供以下三种福利中的一种:健身房、健康保险和午餐补贴。给每个员工提供使用健身房需支付50元,健康保险需支付20元,午餐补贴需支付15元。公司有100名员工,每天福利投入的成本上限是4000。公司希望最小化支出,同时尽可能多地为员工提供福利,每种福利至少有30份。该如何规划福利?

得到如下的优化问题数学公式 (MindOpt Copilot生成)


image.png


此种问题有多目标,最小化成本,最大化福利数。上述的公式把这个问题简单化,变成一个单目标问题,约束增加福利数大于人数100。最后调用求解器得到:

提供健身房福利的员工人数=30 提供健康保险福利的员工人数=30 提供午餐补贴福利的员工人数=40 - 目标函数值 = 2700 为了最小化福利支出,同时尽可能多地为员工提供福利,公司应该为30位员工提供健身房福利(每人每天成本50元),为30位员工提供健康保险福利(每人每天成本20元),并为40位员工提供午餐补贴福利(每人每天成本15元)。这样,每天的福利支出最低,为2700元。


3.2 拓展问题维度和类型

上面的问题都只有几个变量(未知数),还比较简单,如果有很多的变量呢,方程将很长,一般是用矩阵的方式来表达。数据可能是用表格来表示的,比如 MindOpt Copilot 也支持的csv表格输入。问题比如:


image.png

也有用 大sigma 来表达求和 ∑ 的,比如下面几个金融投资里面应用的优化问题:


image.png

这里看到公式,是不是有些头大了?别担心,我们做实际问题的时候就容易理解清楚了。当前,仅需要了解以下几个数学概念:

  • 线性、非线性:优化问题里面常说的“线性”就是一次关系,y =3x就是一次的,线性关系。y = 4 *x*x 就是二次的,属于非线性关系。当前大部分优化问题是着重处理线性关系和二次关系,再高次就不好解了。
  • 连续变量、整数变量:变量x的取值类型。如果有的变量只能是整数,不能是小数,或者说是“离散的”。与之相对的是“连续的”。离散的问题优化起来会方法不一样,会变困难,因此经常有问题需要松弛下,使得变为连续的。
  • 问题 “凸” 和 “非凸”。凸优化是个研究生课程,比较难。普通人需要掌握凸问题更好求解,非凸不好求解。因此列数学公式描述业务问题时,尽量避免非凸的情况。比如尽量是线性的关系。多次的关系很容易出现非凸的情况。

3.3 更丰富的优化问题类型列表

更进一步的,优化问题的数学模型根据不同的业务有很复杂的模型。基本就是要掌握好:可以控制的变量、业务约束、优化目标的情况。不同的数学模型适合不同的场景,在优化问题计算的时候,也会有不同的复杂度。常见的优化问题类型会以下的词汇来描述:


image.png

看到这么多名词,也不需要焦虑,他们都有对应的命名规则,方便与其他算法同学沟通用的。如果沟通不明白,可以贴一个数学公式出来也很方便。数学公式手写也是可以的!命名规则比如:

  • 线性规划,英文是Linear Programming,简称LP,对应的数学目标函数是线性关系;
  • 如果加上变量有些是整数(integer),则组合成MILP(Mixed Integer Programming),混合整数的线性规划问题;
  • 如果目标里面有二次项,则称为二次规划 QP(Quadratic Programming);
  • 如果约束里面有二次项,则称为二次约束规划 QC (Quadratic Constraint),组合还有QCQP;
  • 再进一步的根据目标约束的类型,还可以进一步分类描述不同类型的问题,很多种;
  • 再进一步,根据问题的优化计算方式,还可以取名字,比如零阶优化、黑盒优化、梯度下降、无梯度优化等;

类目很多,可遇到了后再查询标准术语,用于跨人沟通。


四、优化问题的应用

优化问题在管理运筹、工业工程、经济学、物流、能源、金融等许多领域都有。优化技术属于底层的数学技术,应用面很广。对应求解优化问题的优化求解器,可以广泛应用于电力系统调度、生产计划、物流路径规划、投资组合优化等多个领域。使用优化求解器可以帮助用户更方便、更快速地找到问题的最优解。推荐可以去阿里达摩院求解器的案例广场 https://opt.aliyun.com/platform/case 看看,了解应用场景,和对应的简单的数学模型、源代码。比如:


仓库选址规划

image.png

虚拟电厂的智能调度

image.png

网络流问题:交通调度、仓储运输

image.png

人员排班问题

image.png

数独问题的求解

image.png

广告流量分配:曝光与转换均衡

image.png


五、优化问题的求解计算

5.1 计算方法

优化问题的求解方法有:单纯形法、内点法、分枝定界法、梯度下降法、遗传算法等。在大学的运筹学课程里,一般会教求解线性规划(LP)需要的单纯形法,和求解带整数的线性规划(MILP)的分支定界法。但是,在实际业务里,开发者不太需要关心求解的方法,大都是借助工具来完成计算。更多的需求是:需要了解不同算法计算的复杂度,是否能快速求解,如果不能,如何变更优化问题数学模型,使得能快速求解。建议:求解方法这个知识点,仅作科普了解,更多地去准确描述好自己的优化问题是什么类型的问题,然后熟悉求解优化问题的工具,了解工具是否适合计算自己的优化问题。比如现在我们并不需要关心计算机是通过什么原理算出来了3+5=8,更多地去了解如何使用它。但是如果您刚好是这类计算工具的开发者,就需要查询相关的资料来学习。在选择或者研究求解器时,一般会评估如下特性:

- 是否能求解

- 求解速度

- 稳定性

- 大规模问题求解能力和计算资源占用

- 接口易用性开源的求解器和商用的求解器的差异主要是:求解速度、可求解问题的类型。速度差异可能有几百倍。对于响应速度要求高的场景,通常就是能用和不能用的区别,导致很多场景没有上优化技术。在很多限时要求高的场景,比如互联网、机器人的行业,建议直接用商用求解器(有的厂商提供免费版,比如阿里的求解器 MindOpt),直接体验高速版本验证方案效果。毕竟研发方案期间最耗时的是业务的数学建模,不要因为用错计算工具浪费太多时间浪费方案。就相当于,开发一个方案的一开始,先上一个高性能的电脑试试可行性,后面确认可行后,再研究怎么换芯片降成本。小编这里推荐去MindOpt的平台去看商用的和开源的求解器软件,从这个案例 https://opt.aliyun.com/example/vqaeimyI3iEj ,复制项目进去尝试。全程浏览器里面操作,不需要操心软件安装和License。

5.2 有哪些软件可选?

可以选阿里的 MindOpt 。或者用MindOpt APL建模语言,能一行指令切换求解器,方便对比测试。依然给大家列一下更丰富的信息,供调研可用求解器。

国际上

国际上的优化软件起步很早,可以追溯到上世纪80年代。特别是商用的软件,积累了很多客户的经验,软件更稳定;且很少有研发的方案泄露出来,技术保密的很好,性能领先。国际上的优化求解器:(仅列出常见的、且有软件获取地址的)

国产的:MindOpt,阿里的求解器

从15年后,国内多个团队开始逐步开始研发求解器模块。并且在19年20年,有商业公司的加入,研发的软件更稳定。国内的优化求解器:(仅列出有软件可供下载使用的公司)

  • MindOpt:中国/阿里达摩院。
  • 当前支持:
  • LP、MILP、CQP、SDP这些数学规划求解。可下载使用。网址:https://opt.aliyun.com 。根据网页指引,直接在阿里云产品平台https://help.aliyun.com/document_detail/298275.html 下载软件和获取免费License。
  • 仿真优化 (零阶优化、黑盒优化,可用于调参),未公开下载,需要联系 @有悠。
  • 新手推荐用MindOpt线上的平台,不需要安装直接先学会使用,Notebook中直接码代码,上手学习更快捷。还有自研的代数建模语言、以及AI技术结合开发、大模型技术结合自动建模和码代码的方案,更贴合现代的AI+运筹结合的技术趋势。
  • COPT:中国/杉数。网址:https://www.shanshu.ai/copt 。根据页面指引填写信息申请安装包和License。国内研发的早的公司,求解效果不错。
  • 这个功能和阿里的求解器MindOpt差异不大,目前主要优势是数学规划的求解能力全一些。可以提需求给MindOpt研发团队做针对性调优。
  • 而且,用MindOpt APL建模语言编程,是可以轻松一行代码就换调用COPT的!不用纠结一开始选谁家的。

来秀一下MindOpt 实际的应用的评测,给广大用MindOpt求解器的友友们增加点信心:

电力能源领域,这个问题规模非常大,海外求解器已经搞不定的行业。 MindOpt通过项目合作定制调优,整体最优。友商结果并没有我们优秀。

image.png


数据说明:有9/10的数据都是MindOpt第一,超过商用求解器,远超越开源的求解器。而且MindOpt主打就是一个听劝,非常珍惜用户的反馈,并且尽快实现:

image.png


5.3 其他求解方法

除了上面讲的通用的优化求解软件外,还有很多特定行业的启发式的求解方法,可以更快获得对应解。多数需要启发式求解的场景,是通用求解器无法快速求解的领域。比如带整数的优化问题。启发式(Heuristic)算法的主要思想是模拟人类或者自然界的智慧和经验来寻找最优解或局部最优解。常见的启发式方法有:遗传算法、粒子群算法、鱼群、蚁群算法等。在计算复杂的富含整数变量的优化问题里,如组合优化、路径规划、生产调度、排队论等场景验证有很好的结果。使用启发式算法的时候,需要根据实际问题来选择,要关注参数和随机性带来的影响。MindOpt Tuner调参器可以用于系统调参,通过根据输入到评价输出的探索,一步步迭代出更优的参数组合。可以联系MindOpt团队试用调参器的高阶用法。


六、优化技术使用难点、推荐上手方案

求解环节,是目前有通用求解软件去进行可复制产品化的。但是在用优化技术的应用里,有比较长的时间是在做其他的工作,如梳理问题、搜集数据、数学建模、调试。每个地方都会形成耗时难点、专家经验。运筹优化工程师的从业者一般都是研究生。在和客户聊需求的时候,需要能引导出可实现的方向,去理清楚需求。非常的耗时和繁琐。且还会有的时候到最后发现不需要优化技术,直接规则硬计算(这个过程可以理解为是数学公式的一种变化)。这也是用优化技术的付费用户,大部分是能源、航空、餐饮巨头、金融这些有钱大客户的原因。有用,但普通企业用不起。MindOpt 团队在逐步把这个成本打下来!在初期,如果不清楚怎么用,可以去试一下 MindOpt新发布的基于大模型的“AI工程师”MindOpt Copilot https://opt.aliyun.com/chat ,MindOpt 团队在大语言模型LLM基础上进行了SFT训练,使得大模型具备了数学建模的能力,并且转换成了可运行的代码(得益于去年自研了MindOpt APL),业界创新、首个发布公开使用!正确率也是目前所知的业界第一!


这款聊天机器人在“优化”这个细分小领域,水平差不多达到高中生到大学生的样子。我们可以把前面的简单的模板工作,交给机器人来做,然后快速生成个项目,非常简单就上手开始开发了!


image.png

推荐的使用技巧:

image.png


来源|阿里云开发者公众号

作者|有悠

相关文章
|
4天前
|
人工智能 算法 测试技术
论文介绍:进化算法优化模型融合策略
【5月更文挑战第3天】《进化算法优化模型融合策略》论文提出使用进化算法自动化创建和优化大型语言模型,通过模型融合提升性能并减少资源消耗。实验显示,这种方法在多种基准测试中取得先进性能,尤其在无特定任务训练情况下仍能超越参数更多模型。同时,该技术成功应用于创建具有文化意识的日语视觉-语言模型。然而,模型融合可能产生逻辑不连贯响应和准确性问题,未来工作将聚焦于图像扩散模型、自动源模型选择及生成自我改进的模型群体。[论文链接: https://arxiv.org/pdf/2403.13187.pdf]
109 1
|
8天前
|
JavaScript 前端开发 算法
【JavaScript技术专栏】使用JavaScript实现常见算法
【4月更文挑战第30天】本文介绍了如何使用JavaScript实现常见算法,包括排序、搜索和图算法。首先,通过JavaScript的`sort`方法讨论了排序算法,以快速排序为例展示了自定义排序的实现。接着,探讨了二分查找这一高效的搜索算法,并提供了实现代码。最后,解释了深度优先搜索(DFS)图算法,并给出了在JavaScript中的实现。理解并运用这些算法能有效提升编程能力。
|
10天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的算法优化之路
【4月更文挑战第28天】 在机器学习的广阔天地中,算法是构建智能系统的核心。本文将深入探讨算法优化的策略与实践,从理论到应用,揭示提升模型性能的关键因素。我们将穿梭于参数调整、特征工程、模型选择和超参数优化等关键环节,剖析如何通过迭代改进,达到提高准确率、减少误差的目的。此文不仅为初学者提供启示,也为经验丰富的开发者提供深度思考,共同探索算法的极致潜能。
|
10天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据处理到算法优化
【4月更文挑战第28天】在数据驱动的时代,构建一个高效的机器学习模型是实现智能决策和预测的关键。本文将深入探讨如何通过精确的数据预处理、选择合适的学习算法以及进行细致的参数调优来提升模型的性能。我们将介绍一系列实用的技术和策略,包括特征工程、模型评估、超参数调整以及使用集成学习方法来增强模型的泛化能力。通过这些方法,读者将能够更好地理解并应用机器学习技术来解决实际问题。
|
10天前
|
机器学习/深度学习 自然语言处理 算法
深度解析深度学习中的优化算法:从梯度下降到自适应方法
【4月更文挑战第28天】 在深度学习模型训练的复杂数学迷宫中,优化算法是寻找最优权重配置的关键导航者。本文将深入探讨几种主流的优化策略,揭示它们如何引导模型收敛至损失函数的最小值。我们将比较经典的批量梯度下降(BGD)、随机梯度下降(SGD)以及动量概念的引入,进一步探索AdaGrad、RMSProp和Adam等自适应学习率方法的原理与实际应用。通过剖析这些算法的理论基础和性能表现,我们旨在为读者提供一个关于选择合适优化器的参考视角。
|
14天前
|
机器学习/深度学习 人工智能 算法
揭秘深度学习中的优化算法
【4月更文挑战第24天】 在深度学习的广阔天地中,优化算法扮演着至关重要的角色。本文将深入探讨几种主流的优化算法,包括梯度下降法、随机梯度下降法、Adam等,并分析它们的特点和适用场景。我们将通过理论分析和实例演示,揭示这些优化算法如何帮助模型更高效地学习参数,从而提高模型的性能。
|
21天前
|
算法
PID算法原理分析及优化
这篇文章介绍了PID控制方法,这是一种广泛应用的控制算法,具有结构简单、鲁棒性强等特点。PID通过比例、积分和微分三个部分调整控制量,以减少系统输出与目标值的偏差。文章详细阐述了PID的基本原理,包括比例、积分和微分调节的作用,并提到积分饱和和微分项振荡的问题以及对应的优化策略,如积分分离、变速积分和微分先行等。此外,还提到了数字PID的实现形式,如位置式、增量式和步进式,以及串级PID在电机控制等领域的应用。
125 10
|
22天前
|
机器学习/深度学习 数据采集 算法
Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据
Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据
|
18天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
5天前
|
存储 算法
m基于LDPC编译码的matlab误码率仿真,对比SP,MS,NMS以及OMS四种译码算法
MATLAB 2022a仿真实现了LDPC译码算法比较,包括Sum-Product (SP),Min-Sum (MS),Normalized Min-Sum (NMS)和Offset Min-Sum (OMS)。四种算法在不同通信场景有各自优势:SP最准确但计算复杂度高;MS计算复杂度最低但性能略逊;NMS通过归一化提升低SNR性能;OMS引入偏置优化高SNR表现。适用于资源有限或高性能需求的场景。提供的MATLAB代码用于仿真并绘制不同SNR下的误码率曲线。
145 3