Preview
Description
The first part of the thesis studies the theory of algorithmic improvisation in depth. We begin by introducing the core computational problem of control improvisation (CI), which requires constructing an improviser, a randomized algorithm generating sequences of symbols subject to hard, soft, and randomness constraints. We develop a general approach to building improvisers, instantiate it to obtain efficient synthesis algorithms in some cases, and prove hardness results for others. Next, we generalize CI to the reactive control improvisation (RCI) problem, which allows us to synthesize open systems that interact with an adversarial environment. We again give efficient algorithms for constructing improvising strategies in some useful cases, and hardness results in others. Finally, we investigate language-based improvisation, using a probabilistic programming language (PPL) to provide greater control over the distribution of the improviser. We design a domain-specific PPL, Scenic, for defining distributions over scenes, configurations of physical objects and agents. Scenic significantly decreases the effort required to specify the complex environments of systems like self-driving cars.
In the second part of the thesis, we demonstrate how algorithmic improvisation can help with the design, analysis, and testing of autonomous systems. First, we show how to synthesize randomized planners for mobile robots, for example a patrolling security robot which uses randomness to make its route less predictable while still guaranteeing safety. Next, we study using algorithmic improvisation to create human models with realistic stochasticity and tunable behavior, a vital prerequisite for the design of a system which interacts with people. Finally, we propose a methodology for using language-based improvisation to train, test, and debug cyber-physical systems like autonomous cars by generating synthetic data from customizable distributions. We apply our methodology to an industrial neural network, finding bugs in the system, eliminating them through retraining, and boosting the performance of the network beyond what could be achieved with prior techniques by using Scenic to design training sets in a more intelligent way.
In summary, algorithmic improvisation is a mathematical framework for synthesizing randomized systems satisfying formal specifications. It has already proved useful in a wide range of fields, including robotics, cyber-physical systems, computer music, and machine learning, and shows promise in a variety of further applications to the design of secure and dependable systems.