
简介一份名为《EXCEL规划求解案例分析.ppt》的演示文稿系统讲解如何利用Excel的规划求解工具解决约束条件下的最优化问题。内容先阐述规划问题的概念与特点再演示加载“规划求解”宏、设置参数、使用SUMPRODUCT函数引入约束与目标等关键操作并梳理完整的求解步骤。资料以雅致家具厂生产计划优化问题为主要案例分析四种家具在木材、玻璃、劳动时间及最大销售量限制下如何安排日产量以使利润最大同时延伸介绍目标规划问题如产量比例、原材料消耗、设备工时和利润目标等多重决策目标并涉及敏感性分析。整套资源为1个PPT文件压缩包仅541KB便于下载学习。已有543人学习浏览适合运筹学初学者、管理类课程学生以及需要借助Excel进行生产与运营决策的职场人士参考。1. EXCEL规划求解案例分析把生产计划这类多约束问题交给求解器很多人做生产排产、原料配比、物流调运时还在靠手工试算和经验拍板。EXCEL规划求解案例分析里讲的那道经典题目——某工厂生产两种产品原材料限量60kg、设备工时限量40h单件利润分别为6元和8元——人工凑出一组可行解不难但想证明“这就是利润最大的方案”就麻烦了。实际上它的最优解是产品I生产8件、产品II生产2件利润64元。这个数字不是拍出来的是让Excel的规划求解工具在约束空间里搜索出来的。这份PPT资源解决的正是这类问题给定一组不等式约束和一个目标函数如何用Excel快速找到最优解并看懂求解器给出的敏感性报告。适合做生产计划、采购排期、资源调度的人也适合运筹学教学时拿真实工具演示建模过程。2. 把业务问题翻译成线性规划模型决策变量、约束与目标函数的三步走2.1 从文字描述提炼决策变量与限制条件例1的完整建模过程拿到一个规划问题第一件事不是打开Excel而是先把业务语言翻译成数学语言。这个翻译过程是后续所有操作的地基翻错了求解器再强大也算不出有意义的结果。以PPT中的例1为例某工厂生产产品I和产品II原材料单件消耗分别为5kg和10kg总供应量60kg设备工时单件消耗都是4h总共40h单件利润分别为6元和8元。问各生产多少件利润最大。先定决策变量。这里要决策的是两种产品的产量设x1为产品I产量x2为产品II产量。变量定义要写清楚单位是“件”不是“箱”也不是“批”后续所有约束和目标的单位都必须与之一致。再列约束条件。原材料约束5x1 10x2 ≤ 60意思是两种产品消耗的原材料总量不得超过供应量。设备工时约束4x1 4x2 ≤ 40含义同理。最后加非负约束x1, x2 ≥ 0产量不可能为负这是新手最容易漏掉的一行漏了它求解器可能给出负数产量的荒谬结果。目标函数是利润最大化max Z 6x1 8x2。这里有个值得注意的细节目标函数和约束条件的系数来自同一个数据表但含义完全不同。系数6和8是利润单位是元/件系数5和10是原材料消耗单位是kg/件。把它们放在一起求解靠的是线性规划框架的统一性Excel本身不会帮你判断这些系数合不合理建模的人必须自己保证量纲正确。整理成标准形式就是max Z 6x1 8x25x1 10x2 ≤ 604x1 4x2 ≤ 40x1, x2 ≥ 0这套模型正好是线性规划的标准形态目标函数是线性的所有约束都是线性的变量是连续的。满足这些条件时Excel的求解器用的是单纯形法或GRG2算法能保证找到全局最优。若目标函数或约束里出现非线性项比如x1乘以x2那就得换求解方法问题性质也完全不同了。PPT里例1的最优解是x18件x22件max Z64元。可以手工验证原材料消耗5×810×260正好用完设备工时4×84×240也正好用完。这说明最优解往往落在约束边界的交点上这也是线性规划“顶点最优”理论的实际体现。2.2 目标函数怎么选利润最大化不是唯一目标多目标时要转换思路例1只有单一目标——利润最大化这是最简单的线性规划场景。但PPT紧接着抛出了例2同一个工厂计划人员提出了四条新意见产品II产量希望不超过产品I的一半原材料应避免过量消耗最好能节约4h设备工时计划利润不少于48元。注意这里的变化四个意见里有“不希望”“最好能”“不少于”这类弹性表述它们不再是硬性的不等式约束而是带有优先级和偏差容忍度的期望目标。这就从线性规划进入了目标规划的范畴。目标规划的核心思想是引入偏差变量把每个目标写成“目标值 正偏差 - 负偏差 期望值”的形式然后按优先级顺序极小化偏差的加权和。用Excel处理这类问题常见做法是把每个目标拆成一个独立的“目标行”并给每个目标设定优先级权重。比如“原材料避免过量消耗”对应正偏差变量d1希望它越小越好“利润不少于48元”对应负偏差变量d2-希望它越小越好。规划求解时目标单元格不再是一个简单的利润公式而是偏差变量的加权组合。这里有一个新手常犯的错误以为目标规划还是直接套用普通线性规划的求解流程把四个意见全写成硬约束往里扔。结果往往是求解器直接报“无可行解”因为“产品II不超过产品I一半”和“利润不少于48元”在原有资源约束下可能根本无法同时满足。正确做法是先算一遍原问题的最优解再根据可行程度调整优先级或放宽某些目标值。我的习惯是先把每个目标单独求解一次看各自能达到什么水平再统一放进目标规划模型里做权衡。这套方法在PPT的授课场景里经常被一笔带过但它恰恰是从书本案例走向实际决策的关键一步。2.3 SUMPRODUCT为什么是规划求解的首选函数语法与使用习惯Excel规划求解的模型搭建中SUMPRODUCT函数出镜率极高。PPT中特意提到“利用函数SUMPRODUCT引入约束与目标”这个选择不是偶然的。SUMPRODUCT的作用是把两个区域对应位置的元素相乘后再求和。在规划求解场景里它的典型用法是可变单元格区域存放决策变量另一片区域存放系数二者逐项相乘汇总。以例1为例目标函数6x1 8x2可以写成SUMPRODUCT(B2:C2, B3:C3)其中B2:C2存放利润系数[6, 8]B3:C3是可变单元格即x1和x2的值。两个区域一一对应乘积之和就是总利润。约束条件的写法同理把利润系数区域换成原材料消耗系数或工时消耗系数即可。SUMPRODUCT(B5:C5, $B$3:$C$3)逻辑说明B5:C5是原材料消耗系数[5, 10]$B$3:$C$3是加了绝对引用的决策变量区域。绝对引用很关键因为后续向下填充约束公式时决策变量区域不能跟着移动。如果不加$符号公式下拉后引用位置会错位约束计算出来的数值全是错的这种问题排查起来非常隐蔽。参数说明SUMPRODUCT要求两个区域维度完全一致一个是行向量另一个也必须是同样的行向量一个是3行2列区域另一个也得是3行2列。区域里不能混入文本或空单元格否则函数会返回#VALUE!错误。我一般会在模型搭建区把系数表和变量表在布局上严格对齐宁可多留几行空行做分隔也不要让区域错位。另外SUMPRODUCT里的可变单元格区域一定要用绝对引用目标单元格和约束单元格里的公式要能区分开这样在规划求解对话框里填引用时不会指错位置。3. 加载规划求解并完成第一轮求解参数设置与求解选项的实操3.1 不同版本Excel加载规划求解的入口差异“规划求解”不是Excel默认显示的功能它是一个加载宏。PPT里描述的加载路径是“工具”菜单下点“加载宏”这个操作只适用于Excel 2003及更早版本。现在多数人用的是Excel 2016、2019、365或WPS菜单位置完全不同这里把各版本的入口差异讲清楚避免照搬旧教程找不到按钮。Excel 2016及以后版本点击“文件”“选项”“加载项”在底部的“管理”下拉框里选择“Excel加载项”点“转到”在弹出的“加载宏”对话框里勾选“规划求解加载项”确定后回到主界面打开“数据”选项卡最右侧会出现“规划求解”按钮。WPS表格同样在“文件”或“工具”里找“选项”进入“加载项”管理勾选规划求解。WPS部分版本把这个功能放在“数据”选项卡下的“模拟分析”或“规划求解”入口里找不到时优先检查加载项是否已启用。老版本Excel 2003直接按PPT原文操作“工具”菜单“加载宏”勾选“规划求解”确定后“工具”菜单下出现“规划求解”子菜单。加载宏路径按版本区分 - Excel 2016 / 365文件 选项 加载项 管理:Excel加载项 转到 勾选规划求解 - WPS表格选项 加载项 勾选规划求解入口在数据选项卡 - Excel 2003工具 加载宏 勾选规划求解参数说明加载项对话框里列出的是当前检测到的所有可用加载宏没看到“规划求解”时先确认安装的Office组件里是否包含该功能。有些精简版Office把规划求解裁掉了这种情况只能重装完整版或换WPS。另外勾选后如果按钮没出现重启Excel再检查一次。我遇到过几次勾选后按钮仍不显示的情况基本都是Excel进程没完全重启或者是公司电脑装了多个Office版本加载项注册到了另一个版本的注册表里。3.2 设置目标单元格、可变单元格与约束的完整流程加载完成后进入正式求解流程。以PPT中的雅致家具厂问题为例模型中有4种家具决策变量是每天的产量约束包含劳动时间、木材、玻璃三种资源限制以及每种家具的最大销售量限制。目标函数是日利润最大化。在Excel里操作时布局推荐如下一张干净的数据表A列放项目名称B到E列放4种家具的数据F列放合计或可提供量。具体做法是第一步先在单元格里准备三块区域。可变单元格区域放4种家具的产量初值比如初始填0或填预估的产量。目标单元格里写利润公式用SUMPRODUCT把利润系数和产量区域相乘。约束单元格区域分别写劳动时间消耗、木材消耗、玻璃消耗的公式同样用SUMPRODUCT每一行对应一种资源。第二步打开“规划求解”对话框按顺序填四个要素设置目标$F$6利润合计单元格 到选择“最大值” 通过更改可变单元格$B$4:$E$4四种家具产量 遵守约束添加约束区域第三步添加约束。点“添加”按钮在弹出的对话框里逐个指定约束关系。劳动时间约束的格式是$F$8 $H$8其中F8是劳动时间消耗合计H8是400小时的可用量。木材约束、玻璃约束同理。销售量上限约束是每个产量单元格分别小于等于对应最大销售量比如$B$4 $B$10。这里有一个操作细节约束引用里可以直接引用单元格也可以输入数值但强烈建议引用单元格而不是硬编码数值。比如把600单位木材的限量写在某个单元格里约束写成$F$9 $G$9这样以后修改限量时只需改单元格内容不用重新编辑约束条件。这个习惯在做敏感性分析时尤其重要因为敏感性报告会引用约束单元格的地址来给出阴影价格。添加约束的对话框里还有“整数”、“二进制”等选项这些用于整数规划和0-1规划场景。比如家具产量必须是整数时就把对应变量区域添加一个整数约束。但要注意整数约束会把问题从线性规划变成混合整数规划求解时间会显著增加后面避坑章节会详细展开。3.3 求解选项里的关键参数精度、迭代次数与线性模型在“规划求解”对话框里点“选项”打开的“规划求解选项”对话框藏着几个容易影响求解结果的参数。这些参数默认值对多数简单问题够用但遇到复杂模型或求解失败时需要手动调整。参数名称默认值作用与调整建议最大时间100秒求解器允许运行的最长时间复杂问题可以调大到300秒以上迭代次数100迭代上限非线性问题经常需要加大到500或1000精度0.000001约束满足的判断精度精度越高越耗时一般无需改动允许误差5%仅整数规划有效整数最优解与真正最优解的允许偏差追求精确解时改成0收敛0.0001非线性求解时判断迭代停止的阈值结果不稳定时调小到0.00001采用线性模型不勾选线性规划问题务必勾选勾选后使用单纯形法速度快且保证全局最优假定非负不勾选强烈建议勾选等价于自动添加所有变量≥0的约束自动按比例缩放不勾选当变量或约束量纲差异巨大如一个是0.001一个是10000时勾选这里最关键的两个参数是“采用线性模型”和“假定非负”。很多新手把规划求解当作黑匣子模型明明是线性的却不勾选“采用线性模型”结果求解器跑的是非线性算法的GRG2不仅慢而且对初值敏感可能给出局部最优解。判定方法很简单目标函数和所有约束中变量都是一次方且没有变量相乘就是线性模型。“假定非负”等价于给所有可变单元格自动加一个下限为0的约束。手工添加非负约束当然也可以但勾选这个选项更省事还能避免漏加某个变量导致求解器给出负产量。求解设置完成后点“求解”Excel会弹出“规划求解结果”对话框显示“找到一解满足所有约束及最优性条件”并询问保留求解结果还是恢复原值。建议先选“保留规划求解的结果”然后在“报告”里勾选“运算结果报告”、“敏感性报告”、“极限值报告”三个报告中的任意几个这些报告会写入新的工作表。敏感性报告对理解模型的边际变化极有价值下一章会细说。4. 避坑规划求解最容易翻车的五个场景与排查方法4.1 无可行解模型约束相互矛盾时的表现与定位现象点击求解后弹窗提示“规划求解找不到可行的解”目标单元格和可变单元格里没有任何有效结果。原因约束条件之间存在冲突导致可行域为空。最常见的是约束方向写反比如把≤写成≥或者不同约束之间数值上互相矛盾比如原料消耗下限超过供应量上限。解决逐条检查约束条件的引用关系。我一般把每个约束的左侧公式和右侧限量单独列一列手工验证当前值是否满足约束方向。比如临时把可变单元格填入一个明显可行的产量组合看约束单元格的数值是否落在限量范围内。逐条排查后把可疑的约束先停用在约束列表里删掉或注释掉重新求解看能否得到可行解。这个“二分定位法”比一条条肉眼检查快得多。另有一个细节约束方向写反在Excel里很隐蔽右侧的引用选错单元格也会导致类似现象建议在添加约束时放慢节奏确认每个不等式左侧和右侧的地址都与数表中的位置对得上。4.2 假定非负未勾选导致负产量结果现象求解“成功”但可变单元格里出现负数比如生产计划中某种家具产量为-20件。业务上一眼就能看出不合理但求解器认为这是“最优解”。原因没勾选“假定非负”也没手工添加变量≥0的约束。线性规划求解器不会主动限制变量符号负变量在数学上同样满足约束条件甚至可以带来更高的“利润”只是业务上没有意义。解决在“规划求解选项”对话框里勾选“假定非负”或者把可变单元格区域添加一条新约束$B$4:$E$4 0。两条路任选其一即可。这个坑我踩过一次后现在每次建模都在选项里默认勾上“假定非负”形成肌肉记忆。这个选项对生产计划类问题几乎总是正确的因为产量、库存、采购量都不该是负数。4.3 线性模型未勾选导致结果随初值变化现象同一套模型改了一下可变单元格的初始值再求解得出的结果不一样。初始填0和初始填100得到的“最优解”不同让人怀疑求解器的可靠性。原因目标函数或约束中存在非线性项或者虽然是线性模型但没勾选“采用线性模型”选项。后者导致求解器使用GRG2非线性算法而非单纯形法。GRG2对初值敏感遇到多极值问题会收敛到局部最优任意换初值就可能跳到另一个局部最优。解决先确认模型是否是线性的。检查公式里是否有两个变量相乘的单元格、是否有指数运算、是否有绝对值函数或IF嵌套。如果是线性模型在选项里勾选“采用线性模型”求解方法会自动切换到单纯形法此时解与初值无关。如果模型确实包含非线性项需要接受局部最优的现实或者多试几组初值比较结果。血泪经验是很多自称非线性问题其实是能用线性技巧转化的比如分段线性化、引入中间变量值得多琢磨一下。4.4 整数约束导致求解时间暴增或求解停滞现象给产量加了整数约束后原本几秒出结果的模型跑了十几分钟还在转有些复杂模型甚至直接卡死不动。原因整数约束把连续可行域切碎成离散点集求解器必须用分支定界法搜索整数节点计算量呈指数级增长。变量数量越多、整数约束越多搜索空间越大这是问题本身的复杂性决定的。解决先不加整数约束求解一次确认连续最优解再观察这个解是否已经接近整数。如果小数部分很小直接四舍五入后手工验证可行性不必强行精确求解。如果必须求整数解把整数约束范围缩小只对确实需要整数的变量限制不要一股脑把全部变量都设为整数。规划求解选项里的“允许误差”也可以适当放宽比如设为1%或2%求解器会在接近最优时提前停止速度提升明显代价是结果可能差百分之几的利润。4.5 单位不统一导致的目标值数量级异常现象求解结果的目标值大得离谱比如日利润显示几百万元或者资源消耗量为几千单位远超实际业务合理范围。原因建模时量纲没理清。比如材料消耗单位用的是“千克”供应的限量写的是“吨”工时单位用的是“小时”限量写的是“天”。数值直接相除或相乘后量纲错位导致结果数量级混乱。解决建模前在数据表头部标注每个参数的单位统一换算后再填入模型。约束单元格和限量单元格的单位必须逐条比对。这个坑最容易出现在从多个部门收集数据的场景采购给的是吨车间记的是千克财务算的是万元三个单位混在一起模型跑出的结果根本没法用。我现在的习惯是数据收集后第一步就做统一单位换算而不是在Excel公式里临时乘1000或除以24因为临时换算容易漏还不容易复查。建议在数表里单独加一列“换算后数值”让数据源到模型之间有一条清晰的换算链条排查问题时能一眼看到单位是否一致。5. 从线性规划走向目标规划软约束处理与敏感性分析的进阶用法5.1 目标规划的本质把“必须满足”降级为“尽量满足”线性规划里所有约束都是硬性的不满足就不叫可行解。但实际管理场景中很多目标是弹性的比如“尽量少加班”“希望利润不低于某个数”“最好不超过某个库存水平”。这些要求的共性是不存在绝对的红线违背了也还能接受只是程度不同。目标规划正是为此设计的引入正偏差变量d和负偏差变量d-每个柔性目标写成约束等式目标函数改成极小化各偏差的加权和。以例2的第4条意见“计划利润不少于48元”为例写成约束就是利润 - d2 d2- 48。其中d2-表示利润低于48的缺口目标函数里要极小化它。d2则表示利润超过48的部分这个方向上没有惩罚。类似地“原材料避免过量消耗”对应原材料用量加正偏差等于限量极小化正偏差。不同目标之间还可以设置优先级高优先级目标的偏差权重要远大于低优先级实现逐级优化的效果。在Excel里实现时做法是把每个偏差变量也放进可变单元格区域新增对应偏差的目标单元格公式然后在规划求解对话框里把目标设置为偏差加权组合的最小化。需要注意偏差变量和原决策变量都需要非负约束这一点在选项里勾选“假定非负”即可统一覆盖。5.2 敏感性分析报告怎么看阴影价格、允许增量和允许减量求解完成后勾选“敏感性报告”Excel会生成一张新工作表。这张表对决策的价值有时候比最优解本身更大因为它回答了“条件变化了结果怎么变”的问题。敏感性报告上半部分是可变单元格的终值、递减成本、允许的增量和减量。递减成本的含义是该变量每增加一个单位目标函数的变化量。如果某个决策变量的递减成本是-2说明它的值被迫偏离最优方向每增加一单位会让利润减少2元。允许增量和允许减量给出了系数波动的安全范围比如利润系数在允许范围内变化时当前最优解结构不改变。下半部分是约束的阴影价格这是最实用的部分。阴影价格表示某种资源每增加一个单位目标函数能改善多少。假设原材料约束的阴影价格是2.5意思是原材料供应量每增加1kg最大利润能增加2.5元。这个数字直接指导资源采购决策如果增加原材料的边际成本低于2.5元/kg就值得多采购高于2.5元则买了反而亏。允许增量和允许减量同样给出了阴影价格成立的范围超出范围后影子价格会变化不能再简单套用。看敏感性报告还有一个容易踩的坑只有模型是线性且勾选了“采用线性模型”时敏感性报告才有意义。如果用的是GRG2非线性求解Excel会提示“未满足线性条件无法生成敏感性报告”或者报告数据不可靠。5.3 把单次求解做成可复用的模板命名区域与模型保存实际工作中生产计划不是拍一次脑袋就结束的每周、每月都要重新算。建议把整个规划求解模型做成模板每次只改数据刷新求解。具体做法分两步。第一步是用命名区域替代单元格引用。在Excel里把决策变量区域命名为“Variable”目标单元格命名为“Objective”约束左侧区域命名为“Constraint_LHS”等。这样规划求解对话框里的引用全部换成可读的名字模型结构一目了然改动数据时也不容易引错区域。第二步是在“规划求解选项”对话框里点“保存模型”把当前的全部设置存到指定区域下次打开Excel时从“加载模型”一键恢复。推荐布局结构单张工作表 - 数据区原始参数单位统一 - 模型区决策变量、目标公式、约束公式 - 报告区保留每次求解摘要参数说明布局分三块区域的意义在于数据区只填原始数据模型区只写公式两个区域的改动互不干扰。更新周期数据时只动数据区模型区公式自动重算再跑一次规划求解几十秒拿到新方案。从那以后我每次做这类排产模型都会先搭好这套模板再填数边际成本极低收益却很稳定。这个习惯帮我省掉了无数次重复设置参数的时间希望帮到你。本文还有配套的精品资源点击获取