2

我正在寻找一个java库来解决这个问题:

在此处输入图像描述

我们知道 X 是稀疏的(它的大部分条目都是零),所以 X 可以通过解决这个问题来恢复:

   variable X;
   minimize(norm(X,1)+norm(A*X - Y,2));

这是一个 MATLAB 代码,矩阵 A 和向量 Y 是已知的,我想要最好的 X。

我看到了 JOptimizer,但我无法使用它。(没有好的文档或示例)。

谢谢。

4

2 回答 2

1

据我所知,您正在尝试解决二进制整数程序的可行性

Ax = b, x in {0,1}.

我不完全确定,但似乎您可能对优化问题感兴趣

min 1'*x
s.t. Ax = b, x in {0,1}

其中 1 是与 x 维数相同的 1 向量。

可行性问题在实践中可能比优化问题容易得多——这完全取决于特定的 A 和 b。

如果您可以获得 CPLEX 或 Gurobi 的许可证(如果您是一名学者),那么这些都是具有良好 Java API 的优秀整数编程求解器。如果您无权访问这些,lpsolve可能是一个不错的选择。

据我所知,JOptimizer 不会解决您的问题,因为您的变量是整数(尽管我从未使用过 JOptimizer)。

于 2013-07-14T22:26:54.333 回答
1

您需要的是一个相当好的 LP Solver。

可能的 Java LP 求解器选项

  1. Apache Commons(数学)单纯形求解器。 请参阅此博客文章。

  2. 如果您可以访问CPLEX(不是免费的),它的 Java API会很好用。

  3. 此外,您可以查看Java 数值和统计库 SuanShu

  4. lpSolve有一个 Java 包装器可以完成这项工作。

  5. 最后,JOptimizer确实是一个不错的选择。不确定你是否看过这个例子

希望其中至少有一个帮助。

于 2013-07-14T17:01:45.773 回答