弹性 LP 编程

计算科学 优化 凸优化 线性规划
2021-12-09 13:28:29

假设我有一个不可行的 LP,并且我想找到在不严重违反当前约束的情况下使其可行的解决方案。

解决这个问题的原则性方法是什么,我怎么能事后知道必须违反哪些约束?

我找到了以下示例,但我不清楚如何继续为弹性变量的惩罚选择一个好的值。更具体地说:

  1. 对松弛变量的任何惩罚是否足够?如何为我的松弛变量选择“显着成本”?
  2. 设置松弛变量的成本系数的原则方法是什么?
  3. 是否总是这样,只要解中的松弛变量为正,相应的原始约束是不可行的?
min: x + y;
c1: x >= 6;
c2: y >= 6;
c3: x + y <= 11;

这种模式显然是不可行的。我们现在可以以很大的成本引入松弛变量

min: x + y + 1000 e1 + 1000 e2 + 1000 e3;
c1: x1 + e1 >= 6;
c2: y + e2 >= 6;
c3: x + y - e3 <= 11;

这个模型的结果是:

Value of objective function: 1011

变量的实际值:

x                               5
y                               6
e1                              1
e2                              0
e3                              0

使用这个简单的示例模型,可以有多种解决方案。在这里,第一个约束被放宽了,因为 e1 不为零。只有这一个约束必须放宽以使模型可行。1011的客观价值并没有说太多。但是,如果我们从中减去 1000 e1 + 1000 e2 + 1000 e3,则它变为 11,即原始目标函数 (x + y) 的值。

1个回答

不,任何处罚都不会奏效。然而,这是一个经过充分研究的领域,并被称为精确惩罚。基本上,如果惩罚大于取决于原始问题的对偶的值,则在可能的情况下,具有松弛惩罚的模型的解将与原始模型的解一致。我认为这可以在例如“Fletcher - Practical Methods of Optimization”中找到。否则,只需搜索宽松裤等的确切惩罚。