【算法】Pulp-优化的过程(一)

一、简介

解决一个优化问题不是一个线性过程,但是这个过程可以分解成五个一般步骤:
1、问题描述
2、制定的数学程序
3、解决数学程序
4、执行一些post-optimal分析
5、提供解决方案和分析

然而,在这个过程中经常会出现“反馈循环”。例如,在制定和解决优化问题之后,您通常会想要考虑您的解决方案的有效性(经常与提供问题描述的人员进行协商)。如果你的解决方案是无效的,你可能需要修改或更新你的方法,以结合你对实际问题的新理解。这个过程在操作研究方法图中显示。
建模过程从一个定义良好的模型描述开始,然后使用数学来制定一个数学程序。接下来,建模师将数学程序输入到一些解决程序软件中如Excel并解出模型。最后,这个解决方案被转换成一个关于原始模型描述的决策。
通过使用Python,您可以通过建模过程获得“快捷方式”。通过在Python中编写数学程序,你已经把它变成了一种形式,它可以很容易地使用建模者来调用许多解决者,例如,CPLEX,COIN,gurobi,这样你就不需要将数学程序输入到求解程序软件中。但是,您通常不会将任何“硬”数字放入您的公式中,而是使用数据文件“填充”您的模型,因此在创建适当的数据文件时需要做一些工作。使用数据文件的优点是,相同的模型可能多次使用不同的数据集。

二、模过程

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

2.1 问题描述

这一步骤的目的是提出一个正式的、成熟的模型描述。通常,您会启动一个优化项目,对问题和一些数据进行抽象描述。通常你需要花些时间与提供问题的人交谈(通常被称为客户)。通过与客户交谈并考虑可用的数据,您可以得出您习惯使用的更加成熟的模型描述。有时不是所有的数据都是相关的,或者你需要询问客户是否可以提供其他的数据。有时,可用数据的局限性可能会显著地改变您的模型描述和随后的公式。

2.2 制定的数学程序

在这一步中,我们确定了关键的可量化的决策、限制和目标,并在一个数学模型中捕获它们的相互依赖关系。我们可以将制定过程分解成4个关键步骤:
1、确定那些特别关注单元的决策变量(例如:我们需要决定每个进程将运行多少个小时)。
2、利用决策变量来确定目标函数,我们可以构造一个最小化或最大化目标函数。目标函数通常反映决策变量给定值的总成本或总利润。
3、用逻辑(例如,我们不能在几个小时内工作),或者明确的问题描述来制定约束。同样,约束条件是用决策变量表示的。
4、确定目标函数和约束所需的数据。为了解决你的数学问题,你需要在你的目标函数和/或约束条件下有一些“硬数值”作为变量和/或变量系数。

2.3 解决数学程序

对于相对简单或易于理解的问题,数学模型通常可以被用于最优性(即:最好的解决方案是确定的)。这是通过诸如修改的单纯形法或内部点方法等算法完成的。然而,许多工业问题用这些技术解决最优性问题需要很长时间,因此而用启发式方法解决问题,但启发式方法并不能保证最优性。

2.4 执行一些post-optimal分析

通常在问题描述中存在不确定性(要么是提供了数据的准确性,要么是未来数据的值(s)。在这种情况下,我们的解决方案的健壮性可以通过执行后优化分析来检验。这涉及到确定最佳解决方案是如何在各种变化的情况下发生变化的(例如,一个给定的成本增加,或者一个特定的机器失败的结果是什么?)。这种分析也可以用于制定战术或战略决策(例如,如果我们投资于开设另一家工厂,这会对我们的收入产生什么影响?)。
这个步骤(以及下一个)的另一个重要的考虑是验证数学程序的解决方案。您应该仔细考虑解决方案的变量值在原始问题描述中的意义。确保它们对你有意义,更重要的是,你的客户(这就是为什么下一步,提出解决方案和分析是重要的)。

2.5 提供解决方案和分析

优化过程中的一个关键步骤是表示解决方案和任何后优化分析。将数学程序的解译为简明易懂的摘要和从问题描述转化为数学程序一样重要。通过优化生成的关键观察和决策必须以一种易于理解的方式呈现给客户或项目涉众。
您的演示是实现由您的数学程序生成的决策的关键的第一步。如果决策及其结果(通常由数学程序约束决定)不清楚且智能地呈现,那么您的最佳决策将永远不会被使用。
这一步也是你在未来建议其他工作的机会。这可能包括:
1、定期监测你的数学程序的有效性;
2、进一步分析您的解决方案,为您的客户寻找其他的好处;
3、识别未来的优化机会。

猜你喜欢

转载自blog.csdn.net/longgb123/article/details/79840412