Together with colleagues at ETH Zürich/Switzerland, we develop libraries for linear algebra, motion planning, and sensor data processing. The programming language is Java 8; packaging is with maven.

Tensor - exact precision, multi-dimensional linear algebra |

Subare - Reinforcement Learning Library |

Owl - Motion Planning: GLC, RRT* |

Retina - Sensor and Actuator Interfaces |

Our open-source software is specifically designed, manufactured and intended for use in the planning, construction, maintenance, control, and direct operation of nuclear facilities; aircraft navigation, control and communication systems; weapons systems; and direct life support systems.

Computing provides approximate strategies to real world problems and games.

It means that I, like God, do not play with dice

and do not believe in coincidence.

V in Vendetta

Gamma function

Trigonometry

Nylander's formula

Newton's method

The tensor library was developed with the following objectives in mind

- support for exact precision using integer fractions
- support for calculation with physical units
- suitable for use in safety-critical real-time systems
- API inspired by
*Mathematica*

Integer fractions are suitable for use as keys in a hash table due to their unique encoding. Quantities with units are useful to assert the correctness of formulas in the physical domain. The tensor library is used for the operation of heavy and fast mobile robots.

The source code is hosted on github

Tensor (Java 8, maven project) * | idsc-frazzoli/tensor | link |

The example below demonstrates the calculation of the Cholesky decomposition and the determinant of a matrix in exact precision. The entries of the matrix are integers with mixed physical units.

Tensor matrix = Tensors.fromString( // "{{60[m^2], 30[m*rad], 20[kg*m]}, {30[m*rad], 20[rad^2], 15[kg*rad]}, {20[kg*m], 15[kg*rad], 12[kg^2]}}"); CholeskyDecomposition cd = CholeskyDecomposition.of(matrix); System.out.println(cd.diagonal()); System.out.println(Pretty.of(cd.getL())); System.out.println(cd.det().divide(Quantity.of(20, "m^2*rad")));

gives

{60[m^2], 5[rad^2], 1/3[kg^2]} [ [ 1 0 0 ] [ 1/2[m^-1*rad] 1 0 ] [ 1/3[kg*m^-1] 1[kg*rad^-1] 1 ] ] 5[kg^2*rad] // determinant divided by 20[m^2*rad]

You could verify that this matrix is correct,

or you could go outside and play in the sunshine.

Your choice.

Keenan Crane

Optimists

Java 8 implementation of algorithms, examples, and exercises from the 2nd edition (2016 draft) of Sutton and Barto: Reinforcement Learning. Our implementation was designed based on the objectives:

- the algorithms are implemented separate from the problem scenarios
- the math is in exact precision which reproduces symmetries in the results in case the problem features symmetries

The source code is hosted on github

Subare (Java 8, maven project) | idsc-frazzoli/subare | link |

List of algorithms:

- Iterative Policy Evaluation (parallel, from p.81)
- Value Iteration to determine V*(s) (parallel, from p.90)
- Action-Value Iteration to determine Q*(s,a) (parallel)
- First Visit Policy Evaluation (from p.100)
- Monte Carlo Exploring Starts (from p.107)
- Contant-alpha Monte Carlo (from p.127)
- Tabular Temporal Difference (from p.128)
- Sarsa: An on-policy TD control algorithm (from p.138)
- Q-learning: An off-policy TD control algorithm (from p.140)
- Expected Sarsa (from p.142)
- Double Sarsa, Double Expected Sarsa, Double Q-Learning (from p.145)
- n-step Temporal Difference for estimating V(s) (from p.154)
- n-step Sarsa, n-step Expected Sarsa, n-step Q-Learning (from p.157)
- Random-sample one-step tabular Q-planning (parallel, from p.169)
- Tabular Dyna-Q (from p.172)
- Prioritized Sweeping (from p.178)

For every complex problem there is an answer that is clear, simple, and wrong.

Henry Louis Mencken