This document provides pointers to the most useful classes of the Orbital library along with a brief description of possible applications. It helps you jump right into action, profiting from the various features of the Orbital library, spontaneously. Nevertheless, there are still large parts of the library which - however useful - can not be discussed here, briefly. To discover them you should still browse the primary documentation.

Pointers, Links and Hints

  1. GeneralSearch is the main class for general purpose state-space search algorithms applicable in various problems. For applying a multitude of different algorithms for general search problems it is sufficient to model the specific problem as a state-model. In programming terms, this is achieved by implementing a common interface shared amongst all implementations. Especially conservative artificial intelligence problems profit from this collection of ready-to-use algorithms. Some example applications of GeneralSearch are provided, including 8-Puzzle, and Rubik's Cube. A very simple example is provided as SimpleGSP.
  2. Several additional algorithmic templates are available that follow the same scheme of providing the algorithms for problem solution and deferring the problem-specific part into an interface. These include backtracking problems, greedy algorithms, Divide and Conquer, dynamic programming, MDPs. See the documentation of these algorithms for more details. Also see the Algorithms subdirectory of the examples, as well as robot navigation, and Knapsack.
  3. CustomizerViewController has the capability of inventing a standard customizer for JavaBeans from scratch just-in-time. With just a few calls to reflection and introspection, a default customizer view appears that allows changing the properties of any Bean very easily. If available, a bean's corresponding BeanInfo class is queried for property descriptions etc. Even incredibly sophisticated user dialogs can be created by providing a BeanInfo class with extended information, or register new PropertyEditors. An application that uses the default customizer to allow the user change its settings is kept in the Propertizer subdirectory of the examples.
  4. Functionals, and Setops constitute a useful combination of powerful tools for collection data processing. Functionals provides very general functional combinators and possibilities for processing collections of data in bulks in a very simple way. Setops complements this with typical set operations, implicit traversion, filtering, powersets, cross-products. In conjunction, Functionals and Setops provide a very flexible and simple way of using functional-style operations in Java.
  5. Arithmetic objects are accessible through a common unified interface for arithmetic operations like +,-,*,/,^. Like with polymorphic operators, the advantage of using the Arithmetic interface for implementing an algorithm or function is, that it will run unchanged for other algebraic data types of the same structure and laws. This way, many operations will as well work with ordinary double value, specialized integer, complex-valued or matrix-valued data through one single interface. Implementations of arithmetic objects already support matrix, vector, complex number, functional and even symbolic operations. Some examples with numerical algorithms, statistics and matrices are provided in the SimpleDemos directory. To see how easy a single function can be applied to a multitude of different arithmetic data types, see FunctionalTest.
  6. Mathematical functions have a general interface for functions in mathematics with the abilities of (even symbolic) differentiation and integration. Along with several compositional functionals that are aware of symbolic derivatives as well, comes a bunch of common function implementations. What often proves very useful, too, are the generalized mathematical operations provided, which can handle arithmetic objects as well as functions. There is also a parser for mathematical expressions in the implementation package orbital.moon.logic. Apart from the Functional subdirectory of the examples, functions are also used in some of the SimpleDemos.
  7. Logic functions, predicates and functionals found the basis for the major part of this library, and also form the foundations of the mathematical functions API. However, they have proven to be that useful in such a broad range of situations that you may well want to apply them directly, too. What you can expect them to do is provide a framework for generalized call-backs, allow functional operations like composition, argument binding, list mapping, function nesting, and argument swapping. They also give you essential tools for structural composition of functions and common schemes of recursion, as well as fixed point operations. Last but not least, you will get term substitution functions and a term rewrite system for Java. Although the examples include a directory Functional just for functions, you can also admire them in real world use in the other examples, due to their virtual omnipresence.
  8. Logic is a generic logic framework and has an implementation of classical logic and fuzzy logic. It provides you with a general interface to logic systems. As with all logic functions you can choose between different notations (prefix, infix, postfix,...) for your logical junctors' string representation. There is also an extensible parser for logical functions and mathematical expressions in the implementation package orbital.moon.logic. The documentation of the logic package is itself very extensive and self-contained, while some examples of applications are provided in the Logic subdirectory. Also note that there is a binary tool (in the bin subdirectory) for invoking classical logic and the mathematical parser from the command line. Call "ClassicalLogic --help" for help.
  9. StreamMethod is a class that introduces concurrent and streamed connectors that turn programming multi-threaded methods with multiple return-values or collections into something almost as simple as conventional single threaded programming. Additionally, instead of affecting the implementation of a stream method, its aspect of synchronicity is merely parametric. A short instructive code snippet with tree iterators is contained in the documentation of StreamMethod. Examples showing how to apply stream methods and comparing the different modes of stream method connectors are provided in the SimpleDemos directory, whilst a real world example is an asynchronous variation of the 8-Puzzle implementation.