求解绝对值二次优化问题

计算科学 优化 二次规划
2021-12-26 19:48:50

你能帮我解决以下问题吗

x=argmin xLxT+|PTx|

  • x 是二进制的
  • P是已知向量(具有正值和负值)
  • L是拉普拉斯矩阵

我对优化的了解有限。正如我在网上看到的,如果目标函数的第二个元素没有绝对值,我可以用二次 MILP 来解决这个问题。

问题:既然不是一个恒定的正值,那么如何去掉绝对值呢?P

2个回答

您可以将其重新表述为

x=argminxTLx+t

受制于

tPTx

tPTx

x{0,1}n

这是一个 0-1 混合整数二次规划问题 (MIQP)为正定的情况可由 CPLEX 等求解器很好地处理。 L

您可以免费下载 YALMIP http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Main.DownloadYALMIP 会为你做脏活。安装 YALMIP,运行 yalmiptest 测试安装,阅读http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Tutorials.Basics如果您有 CPLEX 可用并安装在 MATYLAB 下,它将/可以使用它,否则会使用其他东西。L 不必是 psd 以便在 YALMIP 下使用 CPLEX 或 scip 作为求解器求解。但是,您说它是拉普拉斯矩阵,因此必须是 psd。

n = length(P); % this is not really YALMIP code
x = binvar(n,1) % declare x as binary; would use sdpvar instead for continuous variable
sol = optimize([Ax<=b,Ax==b,lb<=x<=ub],x'*L*x+abs(P'*x))

是完整的 YALMIP 代码来解决这个问题。求解后,value(x) 提供了 x 的最优值。

如果您想指定一个特定的求解器,例如 scip,而不是让 YALMIP 选择求解器,请使用表格

sol = optimize([Ax<=b,Ax==b,lb<=x<=ub],x' L x+abs(P'*x), sdpsettings('solver','scip'))

您不需要输入通用格式。YALMIP 会在“幕后”为您处理这些问题,以形成适合求解器的形式。只需输入您拥有的约束即可。如果除了 x 是二进制之外没有任何约束,则可以使用 [] 代替 [Ax<=b,Ax==b,lb<=x<=ub] 。另请注意, sdpvar 并不意味着 x 被声明为 senidefinite。该声明是 YALMIP 仅针对 SDP 时的保留。