oj! Algorithms – ojAlgo – is Open Source Java code to do mathematics, linear algebra and optimisation. It’s what you need for data science, machine learning and scientific computing.

High Performance on a Rich Feature Set with Zero Dependencies

  1. ojAlgo is the fastest pure Java linear algebra library available. That statement is backed by the latest Java Matrix Benchmark results – that’s a third party independent benchmark (not written by anyone associated with ojAlgo). 
  2. Optimisation (mathematical programming) tools including LP, QP and MIP solvers – again this is pure Java with zero dependencies.
  3. A collection of “array” classes that can be sparse or dense and arbitrarily large. They can be used as 1-, 2- or N/Any-dimensional arrays, and may contain/handle a multitude of different number types including complex numbers, rational numbers and quaternions. The memory for the arrays can alternatively be allocated off heap or in a file. The linear algebra part of ojAlgo builds on these arrays – they’re fast and efficient.
  4. Artificial Neural Networks
  5. Various other things like time series, random numbers, stochastic processes, descriptive statistics…

Design Concepts

  • Code for the JVM: There are no calls to native (C or Fortran) libraries. ojAlgo is primarily a Java library, but Android, Kotlin, Scala, Groovy, Clojure and other programmers are successfully using ojAlgo.
  • No dependencies: NOTHING besides a JDK is needed to compile or execute the code. In fact ojAlgo only requires the Compact Profile ‘compact1’.
  • Write code that scales: When choosing algorithms and data structures ojAlgo often favours designs that perform well on larger more complex cases, even if it’s more than what’s currently required.
  • Anything and everything may change in the future (breaking API compatibility). ojAlgo is a mature code library, but constantly evolving.
License Latest version at Maven Central LGTM Build status of the master branch
Watch Star Fork Issue

Documentation, Support & Services

User documentation, with code examples, can be found here (on this site) in the form of blog posts. The Code Examples page contains a complete list of example programs used in the blog post. All blog posts containing example code are categorised as Documentation.

Programming questions related to ojAlgo are best asked at stack overflow. Just remember there are rules and standards regarding what questions you can ask as well as how you should ask them and what you should do when you get a reply. Also, it’s a good idea to actually mention ojAlgo and tag the question using ‘ojalgo’ and whatever other tags you find suitable.

Bug reports, or any issue with the existing code, should be posted at GitHub Issues. GitHub is all about collaboration. If you raise an issue there then participate in resolving it. Please do not use GitHub Issues for general discussions or support requests.

ojAlgo is Open Source, and you are strongly encouraged to clone or fork the repository and work directly with the source code. The source code is (part of) the documentation, and you should read it.

Commercial Alternatives

ojAlgo is supported through Tidelift Subscriptions.

Tidelift offers professional support for Open Source tools – your entire set of Open Source tools and libraries is supported by a single subscription.

The subscription covers things like:

  • License compliance
  • Version tracking
  • Release notes
  • Security advisories

Part of the fee payed to Tidelift is forwarded to the actual developers/maintainers, and they are the ones that will fix any issues.

A key thing not available through Tidelift is Help Desk support for the individual tools.

Optimatika is the primary sponsor of ojAlgo – it’s built by Optimatika – and they offer commercial support.

If you want private communications directly with the ojAlgo developer(s) regarding how to best solve your particular problem, then you should purchase support from Optimatika.

Support is available through the Optimatika Membership Subscription.

Signing up for that subscription (even if you don’t need anything from Optimatika today) is a great way to ensure future development of ojAjgo.