Excel解算器教程与分步实例

  • Share This
Michael Brown

该教程解释了如何在不同的Excel版本(从2016年到2003年)中添加和在哪里找到Solver。 逐步的例子显示了如何使用Excel Solver来寻找线性编程和其他类型问题的最优解。

每个人都知道,Microsoft Excel包含很多有用的函数和强大的工具,可以为你节省数小时的计算时间。 但你知道吗,它还有一个工具可以帮助你找到决策问题的最佳解决方案?

在本教程中,我们将介绍Excel Solver插件的所有基本方面,并逐步指导如何最有效地使用它。

    什么是Excel解算器?

    Excel解算器 属于一个特殊的命令集,通常被称为假设分析工具。 它的主要目的是模拟和优化各种商业和工程模型。

    Excel Solver插件对解决线性编程问题(又称线性优化问题)特别有用,因此有时被称为 线性编程求解器 除此之外,它还可以处理平滑的非线性问题和非平滑问题。 更多细节请参见Excel解算器的算法。

    虽然Solver不能破解所有可能的问题,但在处理各种需要做出最佳决策的优化问题时,它确实很有帮助。 例如,它可以帮助你实现投资回报的最大化,为你的广告活动选择最佳预算,为你的员工制定最佳工作计划,使交付成本最小化,等等。

    如何在Excel中添加解算器

    从2003年开始,所有版本的Microsoft Excel都包含了Solver插件,但它在默认情况下是不启用的。

    要在你的Excel中添加Solver,请执行以下步骤。

    1. 在Excel 2010 - Excel 365中,点击 文件 > 选择 .

      在Excel 2007中,点击 微软办公室 按钮,然后点击 Excel选项 .

    2. Excel选项 对话框,点击 附加元件 在左边的侧栏,确保 Excel插件 中选择了 管理 窗口底部的方框,然后点击 进展 .
    3. 附加元件 对话框,选中 求解器插件 框,并点击 认可 :

    要想让Solver开启 Excel 2003 ,请到 工具 菜单,并点击 附加元件 附加元件 可用的 列表,检查 求解器插件 框,并点击 认可 .

    注意:如果Excel显示一条消息说你的计算机上目前没有安装Solver插件,请点击 来安装它。

    Excel中的Solver在哪里?

    在现代版本的Excel中, 解决方法 按钮出现在 数据 选项卡,在 分析报告 组。

    Excel 2003中的Solver在哪里?

    解算器插件加载到Excel 2003后,其命令被添加到 工具 菜单。

    现在你知道在哪里可以找到Excel中的Solver了,打开一个新的工作表,让我们开始吧!

    注意:本教程中讨论的例子使用的是Excel 2013中的Solver,如果你有其他Excel版本,虽然Solver的功能基本相同,但屏幕截图可能与你的版本不完全一致。

    如何在Excel中使用求解器

    在运行Excel Solver插件之前,在工作表中制定你要解决的模型。 在这个例子中,让我们为以下简单的优化问题寻找解决方案。

    问题 假设你是一家美容院的老板,你打算为你的客户提供一项新的服务。 为此,你需要购买一台新的设备,费用为40,000美元,应在12个月内分期支付。

    目标 计算每项服务的最低成本,使你能在指定的时间范围内支付新设备的费用。

    为了这项任务,我创建了以下模型。

    现在,让我们看看Excel Solver如何为这个问题找到解决方案。

    1.运行Excel解算器

    关于 数据 选项卡,在 分析报告 组,点击 解决方法 按钮。

    2.定义问题

    ǞǞǞ 解算器参数 窗口将打开,你必须在这里设置3个主要组件。

    • 目标单元
    • 可变的细胞
    • 限制条件

    究竟Excel Solver对上述参数做了什么? 它为公式中的内容找到了最佳值(最大、最小或指定)。 目标 中的值来改变单元格。 变化的 细胞,并受限制于 限制条件 细胞。

    目标

    ǞǞǞ 目标 细胞( 目标 在早期的Excel版本中是单元格 包含一个公式 该目标可以是最大化、最小化或实现某些目标值。

    在这个例子中,目标单元格是B7,它使用公式计算出了付款期限 =B3/(B4*B5) 而公式的结果应该等于12。

    可变的细胞

    变化的 细胞( 变化 细胞或 可调节的 Excel Solver允许指定多达200个变量单元格,在早期版本中是指包含可变数据的单元格。

    在这个例子中,我们有几个单元格的值可以被改变。

    • 每月预计客户数(B4)应小于或等于50;以及
    • 我们希望Excel Solver计算的每项服务成本(B5)。

    提示:如果你的模型中的变量单元格或范围是 不相邻的 选择第一个单元格或区域,然后按住Ctrl键,同时选择其他单元格和/或区域。 或者,手动输入范围,用逗号分隔。

    限制条件

    Excel解算器 限制条件 换句话说,约束是必须满足的条件。

    要添加一个或多个约束条件,请执行以下操作。

    • 点击 添加 按钮右侧的" 受制于限制条件 "的盒子。

    • 拘束 窗口,输入一个约束条件。
    • 点击 添加 按钮将该制约因素添加到列表中。

    • 继续输入其他限制条件。
    • 在你输入了最后的约束条件后,点击 认可 返回到主界面 解决方法 参数 窗口。

    Excel解算器允许在引用的单元格和约束条件之间指定以下关系。

    • 小于或等于 , 等于 ,以及 大于或等于 你通过选择一个单元格来设置这些关系。 细胞参考 框中,选择以下标志之一。 <= , =, >= ,然后输入一个数字、单元格引用/单元格名称或公式。 拘束 框(请看上面的截图)。
    • 整数 如果引用的单元格必须是一个整数,选择 䵮䵮 ,而这个词 整数 将出现在 拘束 箱子。
    • 不同的价值 如果引用范围内的每个单元格都必须包含一个不同的值,选择 分歧 ,而这个词 差异化 将出现在 拘束 箱子。
    • 二进制 如果你想把一个被引用的单元格限制为0或1,选择 ,而这个词 二进制 将出现在 拘束 箱子。

    注:该 䵮䵮 , ,以及 分歧 关系只能用于对变量单元的约束。

    编辑 删除 对一个现有的约束进行以下操作。

    • 解算器参数 对话框,点击该约束。
    • 要修改选定的约束,请点击 变化 并做你想做的改变。
    • 要删除该约束,请点击 删除 按钮。

    在这个例子中,约束条件是。

    • B3=40000 - 新设备的成本是40000美元。
    • B4<=50--每月预测的病人数量在50人以下。

    3. 解决问题

    在你配置完所有参数后,点击 解决问题 的底部的按钮。 解算器参数 窗口(见上面的截图),让Excel Solver插件为你的问题找到最佳解决方案。

    根据模型的复杂性、计算机内存和处理器速度,可能需要几秒钟、几分钟,甚至几小时。

    当Solver完成处理后,它将显示 求解器结果 对话窗口,在这里你可以选择 保留解算器解决方案 并点击 认可 :

    ǞǞǞ 解算结果 窗口将关闭,解决方案将立即出现在工作表中。

    在这个例子中,B5单元格中出现了66.67美元,这是每个服务的最低成本,可以让你在12个月内支付新设备的费用,前提是每月至少有50个客户。

    提示。

    • 如果Excel解算器处理某个问题的时间过长,你可以按Esc键来中断这个过程。 Excel会用最后发现的数值重新计算工作表,为 变化的 细胞。
    • 要获得有关已解决的问题的更多细节,请点击报告中的一个报告类型。 报告 框,然后点击 认可 该报告将在一个新的工作表中创建。

    现在你已经对如何在Excel中使用Solver有了基本概念,让我们再仔细看看几个例子,也许能帮助你获得更多的理解。

    Excel解算器实例

    下面你将看到另外两个使用Excel Solver插件的例子。 首先,我们将找到一个著名谜题的解决方案,然后解决一个现实生活中的线性编程问题。

    Excel求解器实例1(魔方)

    我相信每个人都熟悉 "魔方 "谜题,你必须把一组数字放在一个正方形里,使所有的行、列和对角线相加都是某个数字。

    例如,你知道一个包含1到9的数字的3x3正方形的解决方案,其中每一行、每一列和对角线加起来都是15吗?

    通过试验和错误来解决这个难题可能没什么大不了的,但我敢打赌,解题器会更快地找到答案。 我们的部分工作是正确定义这个问题。

    首先,在一个由3行3列组成的表格中输入从1到9的数字。 Excel求解器实际上不需要这些数字,但它们会帮助我们直观地了解问题。 Excel求解器插件真正需要的是将每一行、每一列和两个对角线相加的SUM公式。

    在所有公式就绪后,运行Solver并设置以下参数。

    • 设置 目标 在这个例子中,我们不需要设置任何目标,所以让这个方框为空。
    • 可变单元格 我们想在B2到D4单元格中填入数字,所以选择B2:D4单元格。
    • 限制条件 应满足以下条件。
      • $B$2:$D$4 = AllDifferent - 所有的变量单元格都应该包含不同的值。
      • $B$2:$D$4=整数-所有的变量单元格都应该是整数。
      • $B$5:$D$5=15--每一列的数值之和应该等于15。
      • $E$2:$E$4 = 15 - 每一行的数值之和应该等于15。
      • $B$7:$B$8=15--两条对角线之和应等于15。

    最后,点击 解决问题 按钮,而解决方案就在那里!

    Excel求解器实例2(线性规划问题)。

    这是一个具有线性目标的简单运输优化问题的例子。 这种更复杂的优化模型被许多公司用来每年节省成千上万美元。

    问题 :你想将货物从2个不同的仓库运往4个不同的客户的成本降到最低。 每个仓库的供应量有限,每个客户都有一定的需求。

    目标 :最大限度地降低总运输成本,不超过每个仓库的可用数量,并满足每个客户的需求。

    来源数据

    下面是我们的运输优化问题的样子。

    制订模型

    为了定义我们的线性编程问题,让我们回答3个主要问题。

    1. 要做什么决定? 我们要计算出从每个仓库向每个客户交付的最佳货物数量。 这些是 变化的 细胞(B7:E8)。
    2. 什么是约束条件? 每个仓库的可用物资(I7:I8)不能超过,每个客户订购的数量(B10:E10)应该被交付。 这些是 受约束的 细胞 .
    3. 目标是什么? 最小的运输总成本。 而这就是我们的 目标 细胞(C12)。

    接下来你要做的是计算每个仓库的总发货量(G7:G8)和每个客户的总收货量(B9:E9)。 你可以用下面截图中展示的简单的Sum公式来做。 另外,在C12中插入SUMPRODUCT公式来计算总的运输成本。

    为了使我们的运输优化模型更容易理解,创建以下命名范围。

    范围名称 细胞 解算器参数
    产品_已发货 B7:E8 可变的细胞
    可用的 I7:I8 拘束
    发货总量 G7:G8 拘束
    已订购 B10:E10 拘束
    收到的总数 B9:E9 拘束
    运输费用 C12 目标

    留给你的最后一件事是配置Excel解算器参数。

    • 目标:航运成本设置为 闵行区
    • 变量单元:Products_shipped
    • 约束条件:Total_received = Ordered and Total_shipped <= Available

    请注意,我们已经选择了 单纯的LP 如果你不确定你的问题是什么类型的,你可以在这个例子中保留默认的 GRG非线性 欲了解更多信息,请参见Excel解算器算法。

    解决方案

    点击 解决问题 的底部的按钮。 解算器参数 在这个例子中,Excel求解器插件计算出了从每个仓库运送给每个客户的货物的最佳数量,并且运输的总成本最小。

    如何保存和加载Excel求解器的情景

    在解决某个模型时,你可能想保存你的 变化的 单元格的值作为一个场景,你可以在以后查看或重新使用。

    例如,在本教程讨论的第一个例子中计算最低服务成本时,你可能想尝试每月不同的预计客户数量,看看这对服务成本有什么影响。 这时,你可能想保存你已经计算出的最可能的情况,并在任何时候恢复它。

    节约 Excel解算器的方案可以归结为选择一个单元格区域来保存数据。 负载 下面是详细的步骤。

    保存模型

    要保存Excel求解器的方案,请执行以下步骤。

    1. 打开带有计算模型的工作表,运行Excel求解器。
    2. 解算器参数 窗口,点击 加载/保存 按钮。

  • Excel Solver会告诉你需要多少个单元格来保存你的方案。 选择那么多的空单元格并点击 拯救 :
  • Excel将保存你当前的模型,它可能看起来与此类似。
  • 同时,在 解算器参数 窗口将出现,你可以改变你的约束条件,并尝试不同的 "假设 "选项。

    加载已保存的模型

    当你决定恢复已保存的情景时,请做以下工作。

    1. 解算器参数 窗口,点击 加载/保存 按钮。
    2. 在工作表上,选择保存模型的单元格范围,然后点击 负载 :

  • 负载模型 对话框,点击 替换 按钮。
  • 这将打开Excel求解器的主窗口,其中有先前保存的模型的参数。 你需要做的就是点击 解决问题 按钮来重新计算。
  • Excel解算器的算法

    当为Excel解题器定义一个问题时,你可以在以下方法中选择一种 选择一种解题方法 下拉框。

    • GRG非线性。 广义的减梯度非线性 更多的细节可以在这里找到。
    • LP单片机 Simplex LP求解方法是基于美国数学科学家George Dantzig创造的Simplex算法。 它被用来解决所谓的 线性编程 问题 - 数学模型,其要求的特点是线性关系,即包括一个由线性方程表示的单一目标,必须最大化或最小化。 更多信息,请查看此页面。
    • 进化的 它用于非光滑问题,这是最难解决的一类优化问题,因为有些函数是非光滑的,甚至是不连续的,因此很难确定一个函数的增加或减少的方向。 更多信息,请见本页面。

    要改变Solver寻找解决方案的方式,请点击 选择 中的按钮。 解算器参数 对话框,并配置任何或所有选项。 GRG非线性 , 所有方法 ,以及 进化的 标签。

    这就是你如何使用Excel中的Solver来为你的决策问题找到最佳解决方案。 现在,你可能想下载本教程中讨论的Excel Solver实例,并对其进行逆向开发,以便更好地理解。 感谢你的阅读,希望下周在我们的博客上见到你。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.