2 stable releases

1.0.1 Mar 6, 2022
1.0.0 Aug 26, 2021

#730 in Science

MIT license

355KB
10K SLoC

Smoothed Online Convex Optimization

Development

Testing

Unit and integration test can be run with cargo test.

CI

We use the linter Clippy and the code formatter rustfmt which can be run using cargo clippy and cargo fmt, respectively.

Python bindings

Maturin can be used to build the Python bindings for this crate.

  1. create a virtualenv: python3 -m venv venv
  2. build new bindings: maturin develop

Now, the bindings are available as the soco package.


lib.rs:

Algorithms for Smoothed Online Convex Optimization

Smoothed Online Convex Optimization (SOCO) is the problem of choosing a sequence of points in some decision space minimizing a hitting cost which is paid for choosing a point and which changes in-between rounds as well as a movement cost that is paid for movement in the decision space.

Thus, SOCO can be understood as online convex optimization with an additional smoothing element.

A special focus of this work is the application to the dynamic right-sizing of data centers.

Thesis, Presentation (with animations), Documentation

Acknowledgement

The following is a result of my undergraduate thesis work at TUM under the supervision of Prof. Dr. Susanne Albers and advised by Jens Quedenfeld.

Overview

The implementation can mainly be broken down into three separate parts.

  • Algorithms - The implementation of various offline and online algorithms for SOCO andrelated problems. Here is a complete list of the implemented algorithms.
  • Streaming - Utilities for streaming the online algorithms in practice. This includes a TCP server that can be queried to run iterations of the online algorithms sequentially.
  • Data Center Model - For the application of dynamically right-sizing data centers, this implementation includes a comprehensive cost model of data centers.

To achieve optimal performance, everything is implemented in Rust and heavily parallelized. Python bindings are included to interface with the streaming and data center model components.

Dependencies

~17–25MB
~381K SLoC