离散优化模型

最短路及动态规划、网络流模型的决策变量被建模为离散变量,我们仍可以优雅解决这些问题。但现实中还有很多场景无法建模为这种特殊的离散模型。绝大多数的整数及组合优化模型实际上更有挑战性。今天这一篇我们对离散模型做个整体介绍,一共七种场景。

1

块状/批量线性规划及固定成本

一大类离散优化问题是在线性规划基础上加上非此即彼的边际约束或目标函数。我们把这类问题叫做块状/批量线性规划(lumpy linear program)

以瑞典钢材生产案例来说明,重新展示一下该线性规划问题:

案例传送门:线性规划的对偶理论

726950c7e3eef606e60f0b7b17652c90.png

实际应用中,钢铁冶炼更加复杂。在混合物中一些金属原料成分可能是大块的回收材料,这些材料无法被分割成更小的碎块。因此,要么整块被使用,要么整块不被使用。

对于这种生产要素,解决方法是引入新的离散变量:

85e3280fa9316438d18860232545e7e2.png

假设对于瑞典钢材生产案例,原料1和原料2的量只能使用0或75千克和0或250千克,那么线性规划模型将变为:

db0912a57ea6e77a2e0cb3ffbb5d7bb0.png

约束条件随之改变。这里的y被定义为:

c03688a1700ab619f17c43b51a1d48dc.png

进一步,若目标函数存在固定成本(fixed charge),也可以让线性规划问题转变为块状/批量线性规划问题。比如一个非负决策变量x可能具有成本:

f0a9fc8121f422de4e3922ed3c7e1e84.png

f是初始生产启动成本,需要在生产前支付。而后生产过程中,线性规划单位可变成本为c.

解决这样的问题,可以固定成本作为新的变量来建立一个混合整数线性规划模型,转换后的模型形成了开关约束,即连续变量x只有在对应的二元变量y=1时才成立:

3b3e89707b02ab69ea9ac898f0090202.png

依然考虑瑞典钢材生产案例,现在假设考虑四种材料的生产启动成本,均为每次350克朗,那么新的线性规划问题变为:

e0d460eab964919932031a3b85d133cf.png

2

背包模型与资本预算模型

背包模型(knapsack model)是只有一个主约束的纯整数线性规划模型。大多数情况下,所有背包决策变量都是0-1变量。我们有举个电子选票背包问题,利用动态规划思想可以解决——最短路与动态规划(三)

这里我们再举一个案例加以展示模型——印地赛车背包问题

印地赛车队可以给今年的赛车添加6种特性中的几种来提高其最高时速。下表列出了预估引入这些特性的花销及对速度的提高。

eed9343424a575b7fe2abe1521108173.png

赛车队想在不超过35000预算的情况下最大化赛车的表现。使用决策变量:

c89a56379ecc9a369a17ba752fd8b362.png

将原问题化为如下背包模型:

3f874babfb7b13c5e55ad1d15e4957c2.png

背包问题有一个主约束表示预算约束,当在不同时间段都有预算约束时,或有多种受限资源时,我们得到了更普遍的资产预算模型(capital budgeting model),也称维背包问题(multidimensional knapsack)

还是用案例加以说明——NASA资产预算问题

美国宇航局必须持续应对在需多互相竞争的航天任务中分配预算的问题。下表展示了一些航天任务。

201307f6568119ec0d8a7df3c18bf2fc.png

我们必须在长达25年的时间内的5个阶段中,对上表的项目进行选择。因此,容易看出决策变量为:

e6ef88f90d25b7bcbac03cfb9ec4c9ae.png

对于这类问题,有三个要考虑的场景:预算约束互斥选择依赖关系

首先,预算约束(budget constraint)在每个时间段限制了选定的项目、投资品等的总资金或消费的资源,使其不超过可以得到的资金或资源。

对于NASA案例,其预算约束为:

847b58c68eeed6f4c6e1620192696de8.png

互斥条件决定了我们最多可以从选择集合中选出一个选项,这种约束条件可以用每个选择集合中的变量求和形式来表示。

对于NASA案例,其互斥选择为:

d6b3479931067ba5d33495576c00f854.png

依赖关系可以用二元变量给出的约束条件用不等式来表示,比如NASA案例:

79fa90e91fc46f39b562ed0128e4bbeb.png

这样子,就很轻松写出资产预算问题的线性规划形式,这里不再给出。

3

集合包装、覆盖和划分模型

资本预算模型包含互斥约束条件,使得决策变量形成多个子集,每个子集中最多只有一个可以在可行解中出现。集合包装模型(set packing model)覆盖模型(covering model)划分模型(partition model)具有这种约束条件。构建这些模型要解决的核心问题是如何确定这些子集。

引入具体的例子帮助理解——EMS地点规划

奥斯丁市承担一项救护车(EMA)地点规划的研究。该市可以分为不同的救护车服务区,每个救护车站的地点是从很多选项中选出的,使得该区域中的人口可以尽可能多地享受到呼叫救护车的迅速应答。下图展示了该市的地图,被分为20个服务区。我们希望在图中所示的10个可能的地点中选择某些建立救护车站。每个车站可以服务所有相邻的区域。例如,车站2可以服务区域1,2,6,7.

4d79178b64788e6b3b557404fc357c64.png

主要的决策变量显然为:

d7c340dab2b5ab5948848d986075eefe.png

定义集合包装、覆盖和划分模型的约束条件,可以通过寻找子集来解决。在这个案例中,这样的子集是可以为一个服务区提供及时应答的所有地点。比如地点4,5,6均可以为区域12提供应答服务。

包装约束条件要求每个子集中最多只用一个元素出现在解中覆盖约束条件求每个子集的一个元素必须出现在解中,而划分约束条件要求有且只有一个元素。用数学表达为:

80d8dfd1d9e282492187564a7b477c78.png

在EMS案例中,我们要求解是集合覆盖问题,因为每个区域都至少需要有一个车站可以到达,而且车站越多越好。因此,我们可以得到建模结果:

c55c3d68d868545985ceb655353b5c11.png

这样得到的最优解覆盖了所有区域。最优解是x1=x5=x7=x9=0,其余为1,一共设立6个站点。但现实中往往更复杂,比如目前只有足够设立4个EMS的经费,我们该如何找到一个4个站点的子集来最小化无法充分覆盖的问题?在这种情况下,需要评估每个服务区的需求和重要性,假设每个区域的价值如下:

223fdbcaba001950149ec0951e592402.png

接下来,引入额外的决策变量,对每个约束条件的未被覆盖元素进行“惩罚”:

a249c5023ba0ddefa47b66dfce7fa0bc.png

目标函数使得未被覆盖区域价值最小化:

b9163a9c842bc8827c3a842162375ca3.png

现实问题中,比集合包装、覆盖和划分模型更为复杂。这些模型包含了多种组合的可能性,过于复杂,以至于不可能对其精确的建模。这时候需要采取列生成模型进行解决,这个我们以后再说。

4

分配模型及匹配模型

在网络流模型中我们遇到过分配问题(assignment problem)。这一小节我们对这个问题进行拓展,拓展的问题无法用网络流方法解决。在此之前,我们先给标准的分配问题列出数学模型(可用网络流方法解决),又称线性分配模型(linear assignment model)

0b7a493216b26af3aafcdcca87e4d3d9.png

线性分配模型只需要把i与j配对即可,但许多分配问题并不符合线性,因为它们的目标函数与决策的组合相关。换句话说,只有在知道其他决策后,一个决策的影响才能被确定。这种特性通常导致模型变为二次分配模型(quadratic assignment model):

ea09b6f22d6f1879044bf65d0d7bdfe7.png

依然以例子切入——购物商城布局的二次分配模型

最常见的二次分配模型出现在装修布局中。我们需要将一些机器、办公室、部门、商店等布置在一个建筑中一些固定的位置上。我们遇到的问题是怎样决定单元位置的分配方式。

下图显示了一个购物商城中4个可以安置商店的位置。图下面的表格展示的是商店位置的间距(以英尺为单位)。4个可能租借商店的商户在表列出,表格还提供了每周愿意逛某两家商店的顾客数目(以千人为单位)。例如每周约5000名顾客会愿意同时逛商店1和商店2.

4c51a983628ae4d9917c1a447db5fc1c.png

54263ea39c6ff7b8e487d9fa5e0cb14d.png

商城的管理人员想找到最小化顾客不便的商店布局方式。很常见的做法是使用流量-距离来做决策,即各商店的客流量与分配给他们的地点间距的乘积。例如,如果商店1被安置在地点1,商店4被安置在地点2,则每周逛这两个商店的7000名顾客每人需要走80英尺,两家商店之间的距离。此时这两家商店的流量-距离=7*80=560

这个模型注意到,要知道各商店位置后才能计算每一对商店的流量-距离。这种分配组合特性使得我们可以使用二次分配模型,使用如下决策变量:

dffde991d1cff9f6c368bd8eea608d9c.png

接下来我们要考虑每一对商店所有可能位置的流量-距离:

4041ad90d66e5dea8bfaf04fba7680e7.png

优化目标显然为:

3d8c8fafb8b6482655b9f027567efac3.png

最后考虑约束条件,一个商店只能安放在一个位置,一个地点也只能容纳一个商店:

5d03f4b6ae6dc9b31e608d66865aa099.png

目前为止我们介绍的分配问题都是要求每一个集合中的元素i恰好被分配给另一个集合中的一个元素j。现在我们把这个问题更进一步,假设每个元素i必须被分配给一些元素j,但是每个元素可以与多个i配对。具体定义如下变量:

21375ef62a3096b43d1b5b4a13c9b92b.png

由此,我们提出广义分配模型(generalized assignment model):

19868f05c66b6553774c3a929c3efd9d.png

举个例子加以说明——CDOT广义分配模型:

加拿大运输部(CDOT)在检查加拿大太平洋海岸上的海岸警卫船的分配时遇到了一个广义分配模型形式的问题。这些船只用来维护航标(如灯塔和浮标)。海岸边的每一区域被分配给一小部分海岸警卫船。由于这些船只属于不同的区域,配备着不同的设备,使用成本也不同,给任何一个区域分配船只的时间和成本随着船只的不同而产生很大的变化。我们的任务是找到一个最小化成本的分配方案。下表展示了3艘船可以在6个区域服务的时间(周)和成本(千加元)。假设每艘船每年可以服务50个星期。

15824008c9542f3e525c0fbe79983280.png

引入决策变量:

f81e302144872df3d53950dfde4c2018.png

建立的模型如下:

5302a95ec8bd34754ee543aab69d9c6d.png

分配模型有一个特性,都是将不同集合的事物配对。它的最后一种变化是消除集合之间的区别,这引申为匹配模型(matching model):

f318eb8480868ef0ab3ed2f639140f60.png

以上,就是分配与匹配问题的全部形式。我们得到:

  • 线性分配模型很容易处理,它们能被建模为网络流问题,即线性规划的特殊情况

  • 二次分配模型的全局最优点难以找到,因为目标函数非线性。需要用到启发式搜索方法

  • 广义分配模型是整数线性规划模型,有时候可用精确优化方法求解

  • 匹配模型比线性分配模型更难解决,但对特殊目的的高效算法还是存在

求解方法以后我们会逐一介绍。

5

旅行商和路径模型

将客户位置、工作、城市、点等的集合组织成序列或路径的问题称为路径模型(routing model),有时候需要将所有点组成为单个序列,有时候也需要组成几条路线。最简单和最著名的路径问题是旅行商问题(traveling salesman problem,TSP)

要求一个最小总成本的路线,使得通过该路线可以访问给定集合中的每个点恰好一次

还是从例子切入——NCB电路板旅行商问题:

电路板具有许多小孔、芯片和其他部件通过这些小孔布线。在典型的例子中,可能需要钻出多达10个不同尺寸的几百个孔。有效的制造过程需要通过移动钻头尽可能快地钻完这些孔。因此,对于任何单个尺寸,找到最有效的钻孔顺序的问题是一个旅行商路径问题。下图是一个虚构的电路板制造商NCB的小例子,我们将用这个例子进行研究。我们寻求一个最佳路线,使其通过所示的10个孔的位置。表报告了孔的位置i和j之间的直线距离d。

7c1863a7e89409b632ddce1ec328dabf.png

ddfe06c13eee70a61316e01e4356a57e.png

旅行商问题的一个重要分类依据是点之间的距离是对称还是不对称:

如果从任何点i到任何点j的距离或成本与从j到i的距离或成本相同,则称旅行商问题是对称的(symmetric),否则,问题是不对称的(asymmetric)

NCB案例是对称的。在现实中很多情况不满足对称性,比如春运期间,从地点i到j的路程很顺畅,而从j到i比较拥堵。在对称情况下,我们需要采用决策变量:

233ce4cada7bb7ab0c8b5046ddb1a98d.png

约束中需满足i<j,这种编号惯例避免可能产生的重复,因为i和j之间的路径跟j到i是一样的。这样我们很轻松得到了总路径长度的目标函数:

6b784eea560e39ff12d426bf05151dd7.png

接下来旅行商比较复杂的部分是约束条件,仔细思考。在对称情况下,每一个点i,可行解在恰好存在两个x变量可以等于1.一个x将i连接到路径上它的前一个城市,另一个x将i连接到路径上它的上一个城市,因此有:

65e38faa0bdfb97e71913c7411104952.png

但这样的约束不够用,比如下图,每一个点都有两条路径,但没有连成所有点的一条单一路线。

b3dc47863d25b49e2c004b8518c9a55f.png

因此,我们还需要加入约束。我们把上面连在一起的节点称为一个子集,用S表示:

3e41db598165174b310564ca36a9f578.png

这里有三个子集S1={1,2,3},S2={4,7,8},S3={5,6,9,10}。每种路径必须在S集合内外穿过两次(从S内的点到达S外的点,或从S外的点到S内的点,算作一次)。消除这样子路径的约束可以表示为:

9d4cf223c1781632b70e9f6be7d7eed5.png

这样,我们得到了一个对称旅行商问题的整数线性规划模型

c081597f258245b2863f194cff3949c7.png

我们只要稍微改变一下约束条件,就能得到不对称旅行商问题的整数规划模型

b03c0cb9ec970795e1e068fedaee4300.png

旅行商问题可以建模为二次分配模型(QAP),这个我们后面讲到启发式迭代再说

6

设施选择和网络设计模型

设施选址模型,也称仓库选址模型和工厂选址模型,是设计固定费用问题最常见的一种模型。它要规划:

设施/工厂/仓库选址模型从一个计划好的位置列表中选择某些作为建立设施的地点,使得满足特定客户需求的总成本最小。这里的成本包括选定设施服务客户的可变成本和设置设施的固定成本

以Tmark设施选址为例加以说明。

AT&T计划为其电话销售客户的免费呼叫中心进行选址。这些呼叫中心会处理许多地理区域发生的电话预订和订单,由于电话费也根据呼叫人的区域和接收中心的位置而显著变化,因此站点选择是非常重要的。一个设计良好的系统应尽量减少通话费和呼叫中心设置费用的总和。下图展示了一个具有14格呼叫区域的地图,其中有8个可能建立呼叫中心的地点。从任意区域j到任意中心i对应得单位呼叫费用c,以及每个区域得预期呼叫需求d。

60d38f723232f2154a52e7ed59477c91.jpeg

5dee7bcb74e8d458bdc7634fc67ed933.png

每个被选中的Tmark中心每天可以处理1500到5000个呼叫。然而,由于劳动力和房地产价格的差异,不同的呼叫中心固定运营成本差异很大。上图也显示了8个呼叫中心的每日预期固定成本f。

显然,设施选址问题包含两个决策:一是开设哪些设施,二是被选中的设施应该如何满足客户需求。我们选取决策变量:

43072c1dd00fabf3c2d026c4621112dc.png

Tmark案例中,固定成本是开设设施的成本,变动成本是呼叫中心i为区域j服务产生的成本:区域j服务需求*呼叫中心i对区域j的单位呼叫费*呼叫中心i占区域j需求的服务量占比,得到目标函数:

ad77d28b879605dae48efd3f240d7c29.png

主约束条件有三个:

11204f03b04ae9b95f4b557881441952.png

综上,我们得到基本的设施选址问题可以被建模为整数线性规划模型:

bc3eac1b4daec095e4e22d278dd298e9.png

设施选址问题研究要在网络中哪些节点开设设施。与之相对的是网络设计模型,又称固定费用网络流模型,它要研究的是选取网络中哪些线段。用x表示连续的网络流量,用离散变量y表示两点之间是否建立通路:

4ca0bfe9b23be7f8e00cc586708ee152.png

7

处理机调度及排序模型

调度(scheduling)是资源随时间的分配。如班次计划、航空机组调度、期末考试时间安排等都属于这类。本节我们介绍应用很广的调度模型——处理机调度模型(processor scheduling),它在给定一组处理设备时对作业集在这些处理设备上的处理进行排序。

精美笔记复印店的单机调度:

在每个学期开始之前,附近大学的教授提供给”精美笔记“复印店一套原版课程讲义,告知复印店班级的预计人数,以及来复印店取讲义复印件的截止日期。接下来,精美笔记的员工必须赶快在每个课程开始之前打印并装订需要的所有复印件。在每个学期的忙碌期间,精美笔记唯一的装订站每天24小时运作。下表展示了现在在装订站等待处理的作业j=1,2,....,6的处理时间(process time)发布时间(release time)截止日期(due date)

89c60899597110743f3744a67822d364.png

需要注意的是,有两项作业已经超过了截至日期。我们希望选择一个最佳的顺序来完成这些工作。一次只有一个作业可以被处理,且一旦当前作业开始,当前作业必须在另一个作业开始之前完成。

精美笔记实例时一个单处理机(单机调度)的例子。

单处理机(single-processor)/单机(single-machine)调度问题寻求在单个处理机上完成给定作业集合的最佳序列,且该处理机一次只能进行一项作业

为了把这问题变成数学模型,首先定义时间决策变量

处理机调度模型中的一组决策变量通常决定其所需的处理机上每个作业的开始完成时间

在精美笔记中,我们定义,

37e70e23bb1a951f97a2874addabcfc3.png

约束为作业的开始时间必须在到达时间(发布时间)之后:

eaf0de03a98510cf2abc02589b8776cf.png

然后进行冲突约束与变量分离:

处理机调度模型的一组离散(分离)变量(disjunctive variable)通常通过指定每个作业是在可能冲突的每个其他作业之前还是之后被调度来确定作业在处理器上启动的顺序。

这句话比较难理解,我们知道单机调度的核心问题时任何时间任何处理机上只能有一个作业正在进行,如果我们知道开始(完成)时间,则不难写出这种冲突约束(conflict constraint):

a40f83b0e5ca802dc6d408ef153623dd.png

实际建模中,我们用一对一对的线性约束实现冲突预防:

d247a9445f16761ce1a499a52733b0f1.png

在精美笔记实例中,具体的表述如下:

cddf0dcd018f1ef8517cd67e35d3bdf4.png

最后处理截止日期的约束问题,但这部分可用被目标来处理,反映在目标函数里面,所以无需用显式约束的方式来处理。

接下来我们看处理机调度问题的目标函数,这是一个有趣的特征,因为目标函数具备多样性。

作业j的开始时间由x表示,处理时间由p表示,到达时间由r表示,截止日期由d表示。处理机调度目标函数通常最小化以下函数之一:

7f23ab7e8f880ecdada458b6a249e8b8.png

其中,最大完成时间又被称为完工时间(makespan)。完成时间度量方式适合于有固定数量的工作要完成的情况,即没有其他的预期工作。当模型涉及更连续的操作时,流动形式可能更合适。流动时间记录作业处在系统中的时间长度

流动时间=完成时间-到达时间

这个想法的目标时最大程度减少在制品数量(work in process),以便减少部分完成品的库存成本。

在截止日期很关键时,迟到时间很重要,它既包含提前完成的时间,又包含推迟完成的工作:

迟到时间=完成时间-截止日期

延迟时间则只考虑推迟完成的工作(即只考虑正的迟到时间)”

延迟时间=max{0,迟到时间}

注意到,当以任何最小最大值形式为目标函数时,问题变为整数非线性规划(INLP),我们仍可通过引入新的决策变量f转化为整数规划形式,比如精美笔记中以迟到时间为目标函数时:

e9eef1e11b05db7597c906adf8f43999.png

单机调度是一个机器上的排序问题,而作业车间调度(job shop scheduling problem)涉及必须在几个不同机器上处理的作业:

为给定的作业集合寻找最佳调度,每个作业要求一个已知的处理机序列,这些处理机每次只能容纳一个作业。

以定制金属作业车间调度为案例。

一家定制金属加工公司为附近的发动机制造商生产原型金属零件。下图提供了有关等待调度的3个作业的详细信息。首先是需要在5个工作站顺序处理的模具:先是1(锻造),然后是2(加工),然后是3(磨削),然后是4(抛光),最后是6(放电切割)。作业2是需要在4个站顺序处理的凸轮轴,作业3是需要5个步骤的燃料喷射器。框中的数字表示处理时间:

pjk——作业j在车间k上的处理时间(分钟)

例如,作业1需要在工作站4(抛光)处理45分钟。

5286f229140d18e154f677f6f60f38df.png

我们假定公司希望尽快完成所有3个工作(尽量减少最大完成时间),以便工人可以离开度假。

该问题的决策变量由作业和处理机共同标定:

fe86a1cb9d9bdafe535c5dfbd2739843.png

完工形式的调度目标可以表示为:

2ff02cc55e535ddc32cf2dba7205bb44.png

上式中包含每个作业的最后一步,完成多处理机任务意味着完成所有步骤。

每个作业的车间存在优先顺序,比如作业1的车间2必须在车间1完成后才开始,约束条件为:

05cbf3e54a7c0203f3c527664bd0819f.png

作业2和3类似,这里不再列举。

接下来要考虑冲突约束,即要避免同一处理器上同时安排两个及以上的作业。比如作业1和作业2可能在两者都需要进行作业的车间1处冲突。我们引入离散决策变量来建模冲突:

030060570719e0c36921193ead7f0857.png

比如车间1和2的冲突约束为:

f20448364fc4806b9ed7742353690414.png

其他车间类似,不再列举。

这样,我们就得到了作业车间调度的混合整数规划模型。

猜你喜欢

转载自blog.csdn.net/qq_27388259/article/details/129483889