Hi Alexander,
Thx for the nice words. Let me give some background:
In plain vanilla Markowitz portfolio optimization you may compute points on the efficient frontier basically with three different approaches: 1. Maximize return given an upper limit on the variance 2. Minimize the variance given a lower limit on the return 3. Maximize a linear combination of the return and the negative variance, where the weights of the linear combination determine your risk preference and the exact location on the efficient frontier.
In practice, often 1 is used, since you can directly control the risk. ecos4j/ECOS allows you to solve all three approaches. ojalgo basically can solve 2 and 3 directly, but to solve 1, it needs to do some extra work (searching the right risk preference s.t. the risk is at the desired level
https://github.com/optimatika/ojAlgo/blob/develop/src/main/java/org/ojalgo/data/domain/finance/portfolio/MarkowitzModel.java#L169).
The convex solver from ojalgo is not a Second Order Cone Program solver, but is has a quadratic and linear objective and linear constraints
https://javadoc.scijava.org/ojAlgo/org/ojalgo/optimisation/convex/ConvexSolver.html. ecos4j/ECOS is a SOCP solver supporting positive orthant, SOC, and exponential cones. With these types of constraints much more is possible than with the ojalgo solver, also outside of finance. The Mosek cookbooks are very nice to see what kind of optimization may be performed with such solvers. You don't want to rewrite the native solvers in e.g. Java as this would be a lot of work. They are quite complex. Reusing the native solvers is much easier.
My starting point was
https://www.cvxpy.org/ and I wanted to bring some solvers to the JVM. The first one was ECOS, that was the default solver for years. ECOS is under the GPL. That's why I had to put ecos4j under the GPL as well. The second one is
https://clarabel.org/ that is the new default in cvxpy. clarabel4j is already able to call the native Clarabel solver, but needs some more work on the Java interface. clarabel4j/Clarabel will be Apache 2. If I find some time, then I will release it in the next weeks. The third solver, where I already have some code is
https://www.scipopt.org/. SCIP is interesting since it can also handle Mixed Integer and non-convex problems.
If you have the budget for commercial solvers in your project, then Mosek and Gurobi are very good solvers with interfaces to Java as well.