我需要一种自动使线性编程问题可行的算法。具体地,该算法使得其输入是线性编程问题,其可能没有可行的解决方案,并且其输出是类似的编程(具有最小化的参数),其必然具有可行的解决方案。我是算法的新手,并询问是否有任何现有的研究/工作来解决这些问题?任何建议和意见表示赞赏。 谢谢, 理查德
答案 0 :(得分:1)
您可以将slack variables添加到约束中,然后最小化平方值的总和。
答案 1 :(得分:0)
添加一组“人工变量”,每个方程一个,单位权重在该等式中,零重量在其他地方。然后,您可以选择该设置作为第一个基础,并添加“消除人工变量”作为初始目标。如果你可以消除所有的人为变量,你可以丢弃它们,你将有一个可行的基础来解决你的初始问题;如果你不能消除人为变量,就没有可行的解决方案。
原始问题(以规范形式 - 任何LP问题都可以转换为此!):
minimize c.x, given: [A]x = b, x_i>=0
(but first, need feasible solution)
找到一个可行的解决方案(假设所有b_j>=0
;如果没有,只需将行乘以-1
):
minimize sum(y), given: y + [A]x = b, x_i>=0, y_j>=0
with initial, feasible solution: x_i=0, y_j=b_j
这种方案有各种变化和优化;例如,您不一定需要将所有内容转换为规范形式来执行此类操作(尽管它对于解释的简单性很有用)。您应该能够在任何线性编程文本中找到更多详细信息。
请注意,这类似于“松弛变量”的另一个答案,除了平衡任何东西没有意义(这会使问题变得非线性,因此在线性编程框架中更难解决......)