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.
|