Review of the Orbital library

Table of Contents
  1. Purpose
  2. Design Principles
  3. Content
  4. Performance
  5. Source code
  6. Future Plans

Purpose

The purpose of the Orbital library is to provide highly reusable and algorithmically sophisticated components in the areas of mathematics, logic, and algorithms like search and planning. Its primary focus is a natural and intuitive model of the underlying principles, resulting in object-oriented interfaces of a small conceptual weight but maximum flexibility. This can only be achieved with means of a strong theoretical foundation, as well as a strict separation of interface specification and implementation. The reasons for writing the Orbital library have initially been the inferior support for mathematics in the Java language. For example, complex numbers, vectors and matrix operations are missing in Java. However, the library functionality has been extended by several new areas of application.

Design Principles

The design guideline for the Orbital library favors applicative power and simplicity in use over optimal special-purpose solutions and fine-tuned performance. We think that the broader applicability and greater simplicity outweighs any potential performance loss. Especially the interfaces concentrate on the prime underlying concepts, instead of being bloated with a magnitude of helper or convenience methods or marginal properties. This focus improves the usability and reduces the conceptual weight, in the hope of reaching a good balance of generality, flexibility, and simplicity.

Instead of bundling all potential use cases into a class, helpers that are more often a burden than a relief never make their way into the library. While those assistant methods that still show a high reuse potential but are not that close to the heart of the topic, have been separated into their own utility classes as a compromise. With this philosophy, users do not have to concern themselves with marginal cases initially unless there is a real need.

Content

The distribution contains the library binaries, detailed API documentation, and some simple examples demonstrating how to use some features of the Orbital library. Unfortunately, even though those examples already help to get users off the ground, this sophisticated library still has a non-zero learning curve despite its conceptually lightweight design.

Performance

The functionality of the Orbital library covers a rather broad spectrum, and the features have been (rather) thoroughly tested. Thus the overall stability should be adequate. However, the speed of the implementation can still be improved.

Source code

The Orbital library sources have a high complexity, due to the nature of the problems tackled. Neither logic and automatic proof systems, nor (numerical and symbolic) mathematical functionality should be expected to have trivial implementations. The sources themselves are pure object-oriented Java.

Future Plans

We plan to extend the implementations of the interfaces by providing more alternative and customisable implementations with different flavours. From those implementations, users can then choose depending on the needs of the particular applications. Additionally, we want to integrate more functionality related to logic, maths or (planning) algorithms. For example, neural networks, temporal difference learning, mathematical simplifiers, alternative logics, enhanced fuzzy logic support, parametric types (generics), and more algebraic algorithms. Of course, additional examples demonstrating possible applications should be added as well.