PulP线性优化(一)优化过程

本文根据PuLP文档翻译而来,原文请参考
https://pythonhosted.org/PuLP/main/the_optimisation_process.html#getting-the-problem-description

优化过程


解决优化问题不是一个线性过程,但过程可分为五个一般步骤:

  • 获得问题描述
  • 制定数学公式
  • 处理数学公式
  • 执行一些后优化分析
  • 介绍解决方案和分析

但是,在此过程中通常存在“反馈循环”。例如,在制定和解决优化问题之后,您通常需要考虑解决方案的有效性(通常咨询提供问题描述的人员)。如果您的解决方案无效,您可能需要更改或更新您的配方,以包含您对实际问题的新理解。此过程显示在运筹学方法图中。
这里写图片描述
建模过程从明确定义的模型描述开始,然后使用数学方法来确定数学公式。接下来,建模者将数学公式输入到一些求解器软件中,例如Excel并求解该模型。最后,根据原始模型描述将解决方案转化为决策。

使用Python为您提供了建模过程的“快捷方式”。通过在Python中制定数学程序,您已经将它放入PuLP可以轻松使用的形式中,建模者可以调用许多求解器,例如CPLEX,COIN,gurobi,因此您无需将数学公式输入到求解器软件中。但是,您通常不会在配方中添加任何“硬”数字,而是使用数据文件“填充”模型,因此会涉及一些创建相应数据文件的工作。使用数据文件的优点是相同的模型可能会被不同的数据集使用多次。

建模过程


建模过程是优化过程的“整洁”简化。让我们更详细地考虑优化过程的五个步骤:

获取问题描述


此步骤的目的是提出正式,严谨的模型描述。通常,您会启动一个优化项目,其中包含问题和一些数据的抽象描述。通常,您需要花一些时间与提供问题的人(通常称为客户)交谈。通过与客户交谈并考虑可用的数据,您可以获得您习惯的更严格的模型描述。有时并非所有数据都相关,或者您需要询问客户是否可以提供其他数据。有时,可用数据的限制可能会显着改变您的模型描述和后续配方。

制定数学公式


在此步骤中,我们从问题描述中确定关键的可量化决策,限制和目标,并在数学模型中捕获它们的依赖。我们可以将制定过程分为4个关键步骤:

  • 确定特别关注单位的决策变量(例如:我们需要确定每个进程每周运行多少小时)。
  • 使用决策变量制定目标函数,我们可以构建最小化或最大化目标函数。目标函数通常反映给定决策变量值的总成本或总利润。
  • 制定约束,要么是合乎逻辑的(例如,我们不能用于负数小时),要么明确指出问题描述。同样,约束以决策变量表示。
  • 确定目标函数和约束所需的数据。要解决您的数学程序,您需要在目标函数和/或约束中使用一些“硬数”作为变量边界和/或变量系数。

解决数学程序


对于相对简单或易于理解的问题,通常可以将数学模型解决为最优性(即,识别出最佳可能的解决方案)。这是使用诸如修订的单纯形法或内点法之类的算法来完成的。然而,使用这些技术解决最优性需要很长时间的许多工业问题,因此使用不保证最优性的启发式方法来解决这些问题。

进行一些后优化分析


通常问题描述存在不确定性(无论是提供的数据的准确性,还是将来的数据值)。在这种情况下,我们的解决方案的稳健性可以通过执行后优化分析来检查。这涉及确定最佳解决方案在公式的各种变化下如何变化(例如,给定成本增加或特定机器失效会产生什么影响?)。这种分析对于制定战术或战略决策也很有用(例如,如果我们投资开设另一家工厂,这会对我们的收入产生什么影响?)。

此步骤(以及下一步)中的另一个重要考虑因素是数学程序解决方案的验证。您应该仔细考虑解决方案的变量值在原始问题描述方面的含义。确保它们对您,更重要的是您的客户有意义(这就是为什么下一步,提出解决方案和分析很重要)。

介绍解决方案和分析


优化过程中的关键步骤是解决方案的呈现和任何后优化分析。从数学程序的解决方案转换回简明易懂的摘要与从问题描述到数学公式的转换同样重要。通过优化生成的关键观察和决策必须以易于理解的方式呈现给客户或项目利益相关者。

您的演示文稿是实施数学计划所产生决策的关键第一步。如果决策及其后果(通常由数学计划约束决定)没有明确而明智地呈现,那么您的最佳决策将永远不会被使用。

这一步也是您未来建议其他工作的机会。这可能包括:

  • 定期检查数学公式的有效性;
  • 进一步分析您的解决方案,为您的客户寻找其他好处;
  • 寻找未来的优化机会。

猜你喜欢

转载自blog.csdn.net/frone/article/details/81388770