Computing

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.

Kalaha with the Minimax Decision Rule
Solving Soduko in Matlab
It means that I, like God, do not play with dice
and do not believe in coincidence.
V in Vendetta

Tensor - exact precision, multi-dimensional linear algebra


The tensor library was developed with the following objectives in mind

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
* Credits: The arithmetic for the scalar type Quantity was developed in collaboration with Micha Güdel from the Swisstrolley+ project. Joel Gächter contributed functionality to the probability distribution and the image processing packages.

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

Subare - Reinforcement Learning Library


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 source code is hosted on github

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

List of algorithms:

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