我正在寻找一个java库来解决这个问题:
我们知道 X 是稀疏的(它的大部分条目都是零),所以 X 可以通过解决这个问题来恢复:
variable X;
minimize(norm(X,1)+norm(A*X - Y,2));
这是一个 MATLAB 代码,矩阵 A 和向量 Y 是已知的,我想要最好的 X。
我看到了 JOptimizer,但我无法使用它。(没有好的文档或示例)。
谢谢。
我正在寻找一个java库来解决这个问题:
我们知道 X 是稀疏的(它的大部分条目都是零),所以 X 可以通过解决这个问题来恢复:
variable X;
minimize(norm(X,1)+norm(A*X - Y,2));
这是一个 MATLAB 代码,矩阵 A 和向量 Y 是已知的,我想要最好的 X。
我看到了 JOptimizer,但我无法使用它。(没有好的文档或示例)。
谢谢。
据我所知,您正在尝试解决二进制整数程序的可行性
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)。
您需要的是一个相当好的 LP Solver。
如果您可以访问CPLEX(不是免费的),它的 Java API会很好用。
此外,您可以查看Java 数值和统计库 SuanShu
lpSolve有一个 Java 包装器可以完成这项工作。
最后,JOptimizer确实是一个不错的选择。不确定你是否看过这个例子。
希望其中至少有一个帮助。