跳至主要内容

Excel 求解器:在多变量下优化复杂决策

学习如何使用 Excel 求解器解决含多重约束和决策变量的优化问题。本指南通过实用示例涵盖设置、求解与结果解读。
· 12分钟 阅读

使用 AI 探索

假设分析可让您测试不同情景,观察它们如何影响结果。它为您提供一个安全的试验空间,去调整成本或产能等变量,从而找到最有效的方案。对于需要进行资源管理、排期规划或制定战略性业务决策的人来说,这种方法至关重要。

手动反复试错要花上数小时,且常常错过最优解。求解器能在几秒内保证数学上的最优性。这就是凭感觉分配资源与确信自己做出最佳决策之间的差别。

本教程将带您深入了解 Excel 求解器,这是一项专门用于此类优化问题的高级功能。我将通过真实案例向您展示如何搭建工作表、执行分析并解读结果。

理解 Excel 求解器:基础概念

在演示如何使用求解器之前,我先解释每个优化问题的三个构件。这些不只是术语,它们是求解器运作的核心。

目标单元格、决策变量与约束

将目标单元格视为您的目标。它是您想要最大化或最小化的公式,比如总利润或总成本。它必须是公式而非纯数字,因为求解器需要看到当您调整其他内容时它如何变化。

决策变量是您要找出的量。我们应生产多少把椅子?各个营销渠道应投入多少预算?我通常将这些初值设为 0,这样在求解器运行后更容易看出变化。

约束是您的限制与规则。您不能超出预算。您不能生产负数量。有些项目需要最低投资额。这些约束让数学问题更贴近现实,反映实际的业务限制。

工作原理如下:求解器会调整您的决策变量,在满足所有约束的前提下优化目标。如果您学过运筹学,这听起来会很熟悉;如果没有,也可以把它理解为带有保证的“聪明试错”。

与单变量求解的比较

我经常被问到这点。单变量求解更简单,它更改一个单元格以达到特定目标。当您知道想要的结果,只需找到能达到它的输入时,就用它。

求解器不同。当您需要在多个决策与多个约束之间寻找最佳答案时用它。如果您需要在权衡多个变量的同时实现最大化或最小化,求解器就派上用场了。

我的经验法则是:如果您能明确说出“我要的就是这个数”,用单变量求解;如果您在问“做这件事的最佳方式是什么?”,用求解器。

加载并激活求解器加载项

求解器随 Excel 一起提供,但您需要先开启它。别担心,不到一分钟。

Windows 与 Mac 的安装步骤

Windows:

  1. 文件 > 选项 > 加载项
  2. 在“管理”下拉中选择 Excel 加载项,点击 转到
  3. 勾选Solver Add-in(求解器加载项),点击 确定
  4. 转到数据选项卡,在分析组中找到求解器

Install Excel Solver on Windows

Install Excel Solver on Windows

Install Excel Solver on Windows

Mac:

  1. 工具 > Excel 加载项
  2. 勾选Solver Add-in(求解器加载项),点击确定

Install Excel Solver on Mac

Install Excel Solver on Mac

如果您使用的是 Excel Online,很遗憾,它不支持求解器。您需要桌面版(2016 或更高)。

配置

激活后,通过 数据 选项卡 > 求解器 按钮进入。默认设置适用于大多数问题,不必过度思考。

不过,遇到问题时有两个设置更关键:精确度(Precision)决定求解器满足约束的严格程度。做财务模型、每分钱都重要时我会收紧它。收敛(Convergence)告诉求解器何时停止继续改进解。如果求解器过早停止且结果不够理想,我会降低这个阈值。

两者都在 求解器 参数 对话框 > 选项 按钮中,老实说我很少改动它们。

建立问题:在 Excel 中进行模型表述

干净的工作表能让求解器配置变得简单。

让我带您通过一个示例:一家家具制造商生产椅子和桌子。椅子每件利润 $60(需 4 小时工时、2 单位木材),桌子每件利润 $75(需 6 小时工时、2 单位木材)。我们有 240 小时工时与 100 单位木材可用。各应生产多少?

问题定义与工作表搭建

我对每个求解器模型的组织方式都相同。永远是四个部分:

  1. 输入数据(产品信息、资源上限)
  2. 决策变量(生产数量)
  3. 目标函数(总利润)
  4. 约束计算(资源使用量 vs. 可用量)

excel solver spreadsheet setup

包含四个部分的完整求解器模型。作者供图。

这种布局让一切一目了然。查看您模型的人能立即看到您在优化什么以及受哪些限制约束。

接着,我总会为重要单元格创建所谓的命名区域。与其写=B8*B3+B9*B4,我可以写=SUMPRODUCT(QuantityToProduce,ProfitPerUnit)。六个月后当您忘了这些单元格引用含义时,这样更容易理解。

excel solver problem definition

命名区域让公式更易读。作者供图。

创建方法:选中单元格,点击名称框,输入名称,按 Enter。两秒钟的事,省去后患。

决策变量与目标函数

我把决策变量初值设为 0,便于对比。有些人喜欢用估计值起步,也没问题,但 0 对我来说更顺手。

目标函数必须是公式。就我们的家具示例,我用:

=SUMPRODUCT(B8:B9,B3:B4)

它计算的是:(椅子 × $60)+(桌子 × $75)

就是乘法加法。对多数商业问题来说,这已足够。

约束

约束是您将真实业务限制转化为数学表达的地方。我们的家具厂有两条资源约束:

  • 工时:=SUMPRODUCT(B8:B9,C3:C4) <= 240

  • 木材: =SUMPRODUCT(B8:B9,D3:D4) <= 100

还有一点是我吃过亏才记住的:务必添加非负约束(B8:B9 >= 0)。否则求解器可能会建议生产“负数量”的椅子,这在现实中显然行不通。

我还会加一个状态列,用 =IF() 公式,比如 =IF(B16<=C16,"OK","EXCEEDED")。这样在运行求解器之前就能即时看到可视化反馈。绿色表示可以,红色表示设置有问题。

分步操作:如何在 Excel 中使用求解器

好了,模型已建立。现在我来演示如何实际运行求解器。一旦上手,这部分大概只需 30 秒。

使用“求解器参数”对话框

点击 数据 选项卡 > 求解器 按钮打开求解器。

excel solver parameters dialog

配置前的求解器对话框。作者供图。

您需要填写:

设置目标(Set Objective):点击该字段,然后点选B12 单元格(我们的“总利润”)。

目标(To):选择最大值(Max),因为我们要最大化利润。

可变单元格(By Changing Variable Cells):选择B8:B9(我们要决定的数量)。

受约束条件限制(Subject to the Constraints):为每个约束点击添加(Add):

  • 工时:$B$16 <= $C$16

  • 木材:$B$17 <= $C$17

  • 非负性:$B$8:$B$9 >= 0

选择求解方法(Select a Solving Method):选择Simplex LP。其他方法稍后再讲,但对这种线性问题,Simplex LP 就是您要的。

change variable cells excel solver

求解器已配置,准备求解。作者供图。

求解模型

点击“求解”之前,先快速查看当前值。所有地方都应为 0。

solve the model in Excel Solver

初始状态全部为 0。作者供图。

现在点击求解(Solve)。像我们这样的简单问题,几秒就能完成。

solving the model in Excel Solver

成功!求解器找到了最优解。作者供图。

当求解结果对话框弹出时,应显示“Solver found a solution.” 在“报告”下勾选答案(Answer)与敏感性(Sensitivity)。这些会生成详细分析,我们稍后查看。然后点击 确定。

Excel showing solved values with maximized profit

最优解:30 把椅子和 20 张桌子。作者供图。

就这样。解显示我们应生产 30 把椅子和 20 张桌子,利润 $3,300。注意两条约束均为“OK”,说明我们高效使用了资源且未超限。

流程回顾

我每次都遵循这个流程:

  1. 搭建模型(输入、变量、目标、约束)
  2. 配置求解器(设置优化目标与可调整项)
  3. 点击 求解 并等待
  4. 检查结果是否符合业务常识
  5. 查看报告以获得更深入洞见

最后一步很重要。即使求解器找到了答案,也不代表它就是适合您业务的答案。务必对结果做理性检验。

求解方法、参数与高级选项

求解器提供三种不同算法。选对能显著提升速度与准确性。

求解方法概览

Excel Solver dropdown showing Simplex LP, GRG Nonlinear, and Evolutionary

三种方法对应不同问题类型。作者供图。

Simplex LP

我有 80% 的时间都用 Simplex LP。适用于线性问题,运算仅为加法与乘法。产品组合?预算分配?资源计划?用 Simplex LP。它速度快,并能保证获得最优解。

GRG Nonlinear

GRG 非线性用于您的公式包含曲线、平方或指数项的情况。比如价格提升导致需求下降但不是直线关系的定价模型,或包含方差计算的投资组合优化。它找到的是局部最优,可能不是全局最优,但通常已足够好。

Evolutionary

进化算法是“暴力”选项。当您有整数约束(只能生产整数单位)、二元决策(是/否)或公式中包含 =IF() 时使用。它更慢,因为基本上是在尝试大量随机解并保留较好的那些,但当其他方法失效时它能奏效。t 它在其他方法失败时有效。

方法

适用场景

速度

示例

Simplex LP

线性问题(仅加法与乘法)

快

产品组合、预算分配

GRG Nonlinear

含曲线、平方、指数项的问题

中

定价模型、投资组合优化

Evolutionary

整数约束、IF 语句

慢

排班、项目选择

我的选择规则很简单:先用 Simplex LP;如果公式里有指数或变量与变量相乘,切换到 GRG 非线性;若需要整数或二元变量,使用进化算法。

求解器选项与设置

在求解器对话框中点击选项(Options)查看高级设置。我很少调整,但下面这些更重要:

用最大时间(Max Time)限制运行时长。默认 100 秒,对多数问题足够。大型模型需要更长时间时我会调高。

用迭代次数(Iterations)限制尝试次数。如果在此上限前未求解成功,增加它。

用精确度(Precision)控制对约束的严格程度。财务模型里我会收紧,否则保持默认。

报告生成与敏感性分析

还记得我让您勾选报告吗?您会得到这些。

Excel Answer Report showing variables and constraints

“答案报告”记录解的细节。作者供图。

“答案报告”是您的留存记录。它显示发生了什么变化:决策变量从 0 变为 30 把椅子与 20 张桌子,利润从 $0 变为 $3,300。它还告诉您哪些约束是绑定的(完全用尽)与非绑定的(有松弛)。在我们的例子中,工时与木材均为绑定,意味着我们用满了所有可用产能。

Sensitivity Report showing allowable ranges for variables

输入能变动多大才会改变解。作者供图。

“敏感性报告”更有意思。允许增加/减少(Allowable Increase/Decrease)列显示您的输入在需要更换解之前可变动的幅度。范围越宽,说明答案越稳健;范围越窄,说明小变化就可能颠覆一切。

Sensitivity Report constraints section with shadow prices

影子价格揭示资源价值。作者供图。

真正的“金矿”是影子价格。它告诉您每多一单位资源的价值。如果工时的影子价格是 $7.5,多一小时工时会让利润增加 $7.5。因此,若您能以 $5/小时雇到临时工,就去做;若要 $10/小时,则不划算。

敏感性分析的重要性

我用这些报告回答三个问题:应投资于哪些资源?我的解是否脆弱?如果预测出错会怎样?报告能为这三点提供清晰答案。

首先,我查看影子价格来判断应该投资哪些资源。影子价格越高,价值越高。

接着,我查看允许范围,评估我的解是否脆弱。若利润只要变动 $1 解就会改变,您处境危险;若可变动 $50 才会改变,那就很稳。

最后,我会问如果预测出错会怎样?允许范围告诉您在必须重新计算之前可以偏离多少。

我的建议:在批准预算前总要先看影子价格。如果某资源的影子价格为 0,意味着您有过剩产能。在那里追加投资是浪费。把钱投到影子价格最高的地方。

疑难排解与错误处理

求解器的错误提示看起来吓人,但通常很容易修复。以下是我最常见到的。

常见错误与消息

Solver could not find a feasible solution(找不到可行解)

这表示您的约束互相冲突。

Solver dialog showing infeasible solution error

没有任何解能满足所有约束。作者供图。

这种情况通常出现在您提出不可能的要求时,比如试图达成资源根本无法支持的利润目标。修复方法是一次移除一个约束,直到求解器能工作;这个过程能定位到底是哪条约束引发冲突。

Set Cell values do not converge(目标值不收敛)

这意味着您的目标可以无限增长。某处缺失上限。现实业务总有上限,请添加它们。

Solver cannot improve the current solution(无法改进当前解)

这通常出现在非线性问题上。尝试不同的初值,或切换到进化算法。有时局部最优已足够。

模型表述错误

循环引用

当 A 单元格依赖 B,而 B 又依赖 A 时就会发生。Excel 会警告您。使用 公式 选项卡 > 追踪从属单元 找到并打破循环。

整数约束

Add Constraint dialog showing integer option

为整数添加约束。作者供图。

求解器的局限与大规模问题的替代方案

Excel 求解器很强,但也有您需要了解的限制。

了解求解器的限制

标准版求解器最多支持 200 个决策变量与 100 条约束。听起来很多,但当您要为 200 名员工安排 50 个时段时,就是 10,000 个变量,远超求解器能力。

我会用求解器做月度生产计划、季度预算与项目选择。它非常适合战术层面的决策。但它并非为企业级的大型问题(如含成千上万地点的供应链网络)而建。

大型问题的替代方案

OpenSolver

OpenSolver 是免费的,能移除这些限制。它能处理多到由您电脑内存决定的变量,界面与 Excel 求解器相同,您可以从 OpenSolver.org 下载。我建议当您超出标准求解器能力时使用它。

Frontline Solver Premium

Frontline Solver 需付费($300-$1,500/年),但支持成千上万个变量并配备更优算法。如果我全职专业从事这类工作,我会用它。

独立软件

像 CPLEX 或 Gurobi 等工具可处理数以百万计的变量,但需要编程知识与真正的投入。这是企业级别的东西。

在我看来,对大多数业务分析师而言,Excel 求解器能覆盖 95% 的需求。如果您碰到它的上限,这其实是好事,说明您做的工作足够复杂,值得采用更好的工具。

结语

我们涵盖了很多内容,从基础设置到解读影子价格。

现在,您不必在会议室里用主观意见争论,而是能把数字摆在屏幕上:“这是数学上最优的方案。” 这会改变对话方式。您不再猜测,而是用证据说话。

去试试把它用在您下一个棘手问题上吧,那些您一直在回避的排班冲突或预算挤压。也许完美答案一直就藏在您的工作表里。

如果您想学到更多能让上司刮目相看的技巧,欢迎学习我们的Excel 数据分析课程,继续提升自己。

Khalid Abdelaty

作者

Khalid Abdelaty

我是一名数据工程师兼社区建设者,专注于数据管道、云端与 AI 工具链,同时为 DataCamp 和新兴开发者撰写实用且高影响力的教程。

Excel 求解器常见问答

我可以将求解器与 VBA 宏配合使用吗?

当然可以。您可以把我刚展示的全部流程实现自动化。录制一个宏并在运行求解器时记录基础代码,然后再做微调。请记得在 VBA 编辑器中引用求解器库(工具 > 参考),否则代码无法运行。

求解器能在受保护的工作表上运行吗?

不行,会碰壁。求解器需要更改单元格值来完成工作。如果这些单元格被锁定,它就会失败。运行前请取消保护工作表,或编写一个宏先取消保护、求解,再重新保护。

在不使用缓慢的进化算法下,求解器能处理“If-Then”逻辑吗?

可以,有个小技巧!别用 IF 函数(那会迫使您使用更慢的进化算法),改用二元变量(0 或 1)。例如,Constraint * BinaryVariable <= Limit。这样可保持模型线性,仍可使用快速的 Simplex LP 方法。可以,有个小技巧!别用 IF 函数(那会迫使您使用更慢的进化算法),改用二元变量(0 或 1)。例如,Constraint * BinaryVariable <= Limit。这样可保持模型线性,仍可使用快速的 Simplex LP 方法。

为什么我每次运行进化算法都会得到不同答案?

因为它涉及随机性。就像掷骰子寻找最佳路径。如果您想要一致的结果,前往 选项 > Evolutionary 并将“Random Seed”设置为一个特定数字(例如 1)。这样就会每次都以相同方式“掷骰子”。

求解器有撤销按钮吗?

很遗憾,没有。一旦您点击“Keep Solver Solution”,原始数据就永久丢失。务必、且我是真心说,务必在点击“求解”前保存工作簿。或者更好的是,在结果对话框中使用“保存情景”按钮来保护原始数据。

主题