day18
今天是18天,昨日是针对生产质量数据分析算法进行阐述,主要是如何转换到质量较强的场景下,比如控制参数如何调优之类。今日主要是针对生产效率优化(PEM进行阐述),主要是阐述线性规划、整数规划建模技巧
线性规划的建模技巧
线性规划、整数规划、混合整数规划等线性模型有很多很好的性质,也存在普适性的求解引擎,这样数据分析师可将精力集中在问题建模上。但在对实际问题建模的时候,通常会遇到一些非线性关系或约束条件,此时通过一些技巧,如过增加指标变量、变换变量或松弛参数等技巧,很多时候可以将核心数学规划模型变成线性模型。同时,注意避免数值计算精度可能带来的一些困扰
绝对值
问题描述: 在数学优化问题中,绝对值函数常常出现在目标函数或约束条件中,直接处理绝对值函数可能会导致问题变得非线性,不易求解。
如何处理: 为了将绝对值转化为线性形式,通常采用引入辅助变量的方法。例如,绝对值 |x| 可以通过两个变量 t 和 z 来表示,具体做法是:
或者等式约束:
举个例子: 假设我们需要最小化目标函数 |x - 5|。我们可以引入一个新的变量 t,使得问题变为:minimize t
约束条件:
通过这种方式,原来的非线性绝对值问题就变成了线性规划问题,便于求解。
Min-Max问题
问题描述: Min-Max问题(最小化最大值问题)通常出现在那些希望优化一个变量的最坏情况或最大值时的场景。比如,想要最小化一个工厂的生产时间,但需要考虑最慢的生产线。
如何处理: 在数学上,Min-Max问题可以通过引入额外变量来转换成线性问题。例如,目标函数是最小化最大值,形式为:
这时,可以引入一个新的变量t,使得:
目标变为:min t
举个例子: 假设你有两个机器的生产速度分别为 f1=x1 和 f2=x2,目标是最小化最大生产速度。可以引入变量 ttt,并将约束改为:
现在,问题变为:最小化 t。
分式目标函数
问题描述: 分式目标函数是指目标函数中含有变量的分式形式,如 f(x)/g(x),这种形式通常是非线性的,求解起来比较复杂。
如何处理: 这类问题常常可以通过引入辅助变量或者变换变量的技巧来转化为线性模型。例如,如果目标函数是 f(x)/g(x),可以引入一个新的变量 y 来表示 f(x)/g(x),并通过一些约束使问题变为线性形式。
举个例子: 假设我们有一个目标函数 1/x1 和约束 x1≥0,为了解决这个问题,可以通过以下步骤:
- 引入变量 t,并设定 t=1/x1。
- 将目标变为最小化 ttt,然后通过约束条件 t≥1/x1来处理。
这样,虽然问题依然含有非线性,但可以通过转换技巧使其变为一个线性问题。
范围约束
问题描述: 范围约束是指一个变量的值必须在某个给定的区间范围内,形式一般是 a≤x≤b,这类约束也可能会导致问题的非线性或复杂性。
如何处理: 在实际求解中,这类问题通常通过引入两个变量来表示范围约束。例如,约束 a≤x≤b可以被拆分成两个线性约束:
这样,就可以将范围约束转化为两个简单的线性约束。
举个例子: 假设你有一个变量 xxx,且有如下约束 3≤x≤7。我们可以通过以下两个约束来处理:
这样,这个范围约束就变成了线性的,不再影响求解的难度。
总结:
- 绝对值:通过引入辅助变量将其转化为线性形式。
- Min-Max问题:通过引入额外变量,使得目标函数变为最小化一个新的变量。
- 分式目标函数:通过变量变换将分式目标转化为线性目标。
- 范围约束:通过将范围拆分成两个线性约束,使其变为线性问题。
整数规划的建模技巧
两种技巧
- 增加整数,表示是否符合或存在某种情形
- 引入松弛参数(大M法),把一条非线性约束转为两条(或多条)线性约束,针对一定变量取值范围,其中的1个(或一部分)会自动满足(松弛约束),起作用的是另外1个(或一部分)约束
2种方式都需要特别注意自由度的保持,通过增加合适约束条件避免变量空间自由度的增加。
决策变量值域不连续
含义:某些决策变量的取值可能不是连续的,可能只允许在某些特定值之间选择。例如,某个变量只能取整数值,或者它只能在几个离散的值之间取值。
举例: 假设你需要在一个仓库中选择某些机器进行配置,但这些机器有不同的规格和功能,并且某些机器的选购只能是固定的一些型号(例如只能选1号、2号或3号型号)。这时,决策变量“机器型号”只能在{1, 2, 3}中取值,不连续。
建模技巧:可以引入整数变量来表示不同的选择。例如,假设 x_1
代表选择1号机器,x_2
代表选择2号机器,x_3
代表选择3号机器。你可以通过约束条件确保只选其中之一,通常这种情况会用类似以下的约束:
其中,x_1, x_2, x_3
都是0或1的整数变量。
目标函数不连续
含义:目标函数本身可能是非线性或不连续的,这使得问题变得复杂,因为很多优化算法更适合处理连续或线性目标函数。
举例: 假设你在进行一个生产调度问题,其中生产每种产品的成本有不同的价格区间。例如,当生产量低于一定数量时,单位成本较高;但生产量超过某个阈值时,单位成本会降低,这种不连续的变化会影响目标函数的表达。
建模技巧:你可以使用整数变量结合大M法来“平滑”不连续的目标函数。通过引入一个足够大的常数M,把不连续点转换为线性关系。
例如,设定变量y
表示是否达到一个生产阈值,目标函数可以通过增加大M常数,使得当y=1
时,目标函数就发生变化。通过引入合适的松弛约束,可以使得优化过程不再受不连续点的影响。
或关系约束
含义:在某些问题中,约束条件涉及“或”关系,即满足一个条件或另一个条件,但不是两个都满足。例如,你在选择不同的项目时,只能选择其中之一。
举例: 假设你要在多个地点建一个仓库,但只能在其中的一个地点建。这里的约束关系就是“或”关系,表示可以在地点A建仓库,或者在地点B建仓库,但不能同时在A和B都建。
建模技巧:使用整数变量来表示“是否选择”某个地点,通常可以使用0-1变量来建模。例如,x_A = 1
表示选择地点A,x_B = 1
表示选择地点B。你可以用以下的约束表示“或”关系:
这个约束保证了只会选择一个地点。
条件型约束
含义:条件型约束指的是某些约束的成立依赖于其他条件。即,某些约束只有在某些特定情况下才有效。
举例: 假设某个生产设施在工作时必须同时满足一些条件:比如,只有当设施的工作时间超过10小时时,才能加班。如果工作时间小于10小时,那么加班是不允许的。
建模技巧:你可以使用整数变量表示条件是否成立。例如,定义一个0-1的变量x
,当x = 1
时表示允许加班,x = 0
时表示不允许加班。通过以下约束,可以将“条件型”约束转化为线性形式:
如果x = 0
,则y = 0
,表示不允许加班;如果x = 1
,则y
可以大于等于10,表示可以加班。
逻辑表达式
含义:在整数规划中,常常需要表达一些逻辑关系,如“如果A成立,则B必须成立”或者“至少一个条件成立”等。
举例: 例如,你有一个条件是:如果选择了某个生产线进行生产(用x = 1
表示),那么相应的机器必须开启(用y = 1
表示)。这个就是一个逻辑表达式:“如果x = 1
,则y = 1
”。
建模技巧:可以通过引入适当的整数变量,并加上一些线性约束来转换逻辑表达式。例如,可以使用以下约束:
这个约束意味着,如果x = 1
,则y
必须是1(机器开启);如果x = 0
,则y
可以是0或1,但没有强制要求y = 1
。
消除变量相乘
含义:在整数规划中,如果模型中有变量相乘的情况,通常会导致非线性,这会增加求解的复杂度。
举例: 比如,一个生产问题中,生产数量x
和单位生产成本c
相乘形成总生产成本z = c \times x
。这就是一个非线性关系。
建模技巧:可以引入新的辅助变量,转化成线性关系。例如,定义一个新变量z
表示生产总成本,然后通过以下约束把相乘的非线性转化为线性形式:
为了保证z = c \times x
,你需要引入一些条件和约束,可能使用“松弛参数”或“大M法”来帮助表达。
大M法
含义:大M法是一种常用的技巧,用来处理一些逻辑约束或者不等式约束中的松弛条件。通过引入一个很大的常数M
,将某些非线性约束转化为线性约束。
举例: 假设有一个约束:当某个条件成立时,另一个变量y
的值必须满足一定范围。例如,只有在x
为1时,y
才能大于等于10。否则,y
可以自由取值。使用大M法,可以将这个非线性约束转化为两个线性约束:
这里,M
是一个足够大的常数。如果x = 1
,这个约束就变成y \geq 10
;如果x = 0
,由于M
非常大,约束对y
没有影响。
总结:
通过这些技巧,可以在整数规划中处理各种复杂的约束和目标函数,使问题能够转换为线性问题或简化为适合求解的形式。在建模时,需要特别注意保持自由度的控制,避免不必要的复杂性。