Clearable, per-instance method cache in Python

October 1, 2018

In standard Python, you can do this to cache the return value of an expensive function:

def function(n):

This works well, but it does not work very well for class methods:

class MyClass:

    def function(self):

All instances of MyClass will share the same cache. Often, especially for immutable instances, a per-instance cache of size 1 is desired. Python 3.8 adds a useful cached_property decorator, but that does not provide a cache_clear method like lru_cache does.

Read the rest of this entry »

Visualizing the Ryan-Foster Rule

January 24, 2018

In a previous post, I described a system for scheduling shifts to workers that was state of the art. It still is for large problems (small problems can be solved exactly with integer programming). The fixing rule to obtain integer solutions is sometimes called the Ryan-Foster rule [1] and this post will explore how this rule can be visualized.

Read the rest of this entry »

The Vector from Japanese to Western Movies

July 8, 2017

Nothing in this post is new research; this is all relatively basic machine learning. But it is fun.

This is the first day of my vacation. Time for some machine learning! Today, I will create embeddings. I will use the relatively big dataset from the Netflix Prize competition to create embeddings for movies.

We develop a way to automatically find the American counterpart of a Japanese movie! Read the rest of this entry »

Shift Scheduling Benchmark

October 9, 2016

I recently submitted results to the Employee Shift Scheduling public benchmark. My optimizer computed  the best known result for all medium-sized and large instances. I currently do not have time to write and publish an article, but a blog could perhaps be a good substitute.

Read the rest of this entry »

Game of Life in 3D

July 29, 2016

An open problem (as far as I know) in three-dimensional Game of Life is to construct a “glider gun” for a reasonable three-dimensional ruleset.

One natural set of rules are 5,6,7/6, in which cells stay alive with 5–7 neighbors and are created with 6 neighbors. In this set of rules, some two-dimensional patterns from the original game of life still work if they are copied into two adjacent layers.

Another feature is the “time-space barrier.” No new cells can be created close to its surface. To make it stable, we can wrap it into a cube.


Unfortunately, the “Gosper Glider Gun” from standard Game of Life does not work directly in 3D. It interacts into the third dimension. But if we wedge it between two barrier cubes it works for a while.

Everything unravels when the glider reaches the edge of the cubes. I don’t know whether one can construct something that prevents this from happening.

See also: Bays, Carter (1987), “Candidates for the Game of Life in Three Dimensions”, Complex Systems 3 (1): 373–400.


Swedish Umbilical Cord Clamping Study is All Over the News

May 26, 2015

Today, the news in Sweden reported on a study that shows the advantages of delayed cord clamping after 4 years. I thought the results sounded remarkably good, so I looked up the article. Here is a table (from which I have removed most columns):


I am not saying this study is wrong, but look at those p-values! If you measure enough variables, some of them are bound to turn out “significant”!

Continuous Optimization for Fields of Experts Denoising Works

March 25, 2014

Sameer Agarwal and I just uploaded a paper to arχiv.orgContinuous Optimization for Fields of Experts Denoising Works. We show that simple non-linear least-squares is better than sophisticated discrete optimization methods for certain image denoising problems.

I have used these denoising problems as a bechmark and motivation when developing generalized roof duality. But as it turns out, continuous optimization is much better. 🙂

Update: I should add that the source code used for the experiments in available in Ceres; see .

Shortest Paths with Curvature and Torsion

December 21, 2013

Johannes Ulén, Fredrik Kahl and I have recently been to the International Conference on Computer Vision to present our paper Shortest Paths with Curvature and Torsion, in which we explore applications of higher-order regularization for shortest paths.

See the paper here.

The code is available here.


August 5, 2013

Consider the following code:

void f(const int &) { cout << 1; }
void f(int&&) { cout << 2; }

template<typename T>
void g(const T&) { cout << 1; }
template<typename T>
void g(T&&) { cout << 2; }

int main()

  int i;

What will the code print? The answer is “2212,” which can be quite surprising.

Read the rest of this entry »

Rounding of strings

April 23, 2013

Consider the following program:

int main()
auto f = 1.0f;
printf(“%f\n”, f / 0);
printf(“%.1f\n”, f / 0);
printf(“%.2f\n”, f / 0);
printf(“%.3f\n”, f / 0);

f = 0.0f;
printf(“%f\n”, f / 0);
printf(“%.1f\n”, f / 0);
printf(“%.2f\n”, f / 0);
printf(“%.3f\n”, f / 0);

With Visual Studio 2012, it outputs the following:



The strings are also rounded! That is, ‘#’ + 1 == ‘$’. This can be a bit surprising.