我正在寻找一个Java库来解决这个问题:
我们知道X是稀疏的(它的大部分条目都是零),所以X可以通过求解以下等式来恢复:
variable X; minimize(norm(X,1)+norm(A*X - Y,2));
这是一个MATLAB代码,矩阵A和向量Y是已知的,我想要最好的X。我看到了JOptimizer,但我不会使用它(没有好的文档或示例)。
4ioopgfo1#
你需要的是一个相当好的LP解算器。
6xfqseft2#
据我所知,你在试图解决一个二进制整数程序的可行性
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)。
7kjnsjlb3#
要在java中解决凸优化问题,可以使用以下库https://github.com/erikerlandson/gibbous
3条答案
按热度按时间4ioopgfo1#
你需要的是一个相当好的LP解算器。
可能的Java LP解算器选项
1.如果您可以访问CPLEX (not-free), its Java API,将工作得很好。
1.此外,您还可以查看SuanShu, a Java numerical and statistical library
1.* * lpSolve有一个Java Package 器可以完成这项工作。
1.最后,JOptimizer**确实是一个不错的选择。不确定你是否看过this example。
希望至少有一个能帮上忙。
6xfqseft2#
据我所知,你在试图解决一个二进制整数程序的可行性
我不是很确定,但看起来你可能对最优化问题感兴趣
其中1是与x相同维度的1的向量。
可行性问题实际上可能比最优化问题容易得多--它完全取决于特定的A和b。
如果您可以获得CPLEX或Gurobi的许可证(如果您是一名学者),这些都是具有良好Java API的优秀整数编程解算器。如果您无法访问这些,lpsolve可能是一个不错的选择。
据我所知,JOptimizer不会解决您的问题,因为您的变量是整数(尽管我从未使用过JOptimizer)。
7kjnsjlb3#
要在java中解决凸优化问题,可以使用以下库https://github.com/erikerlandson/gibbous