julia

Mutability, scope, and separation of concerns in library code

It has been about a year since I joined the Zuse Institute to work on optimization methods and computation. One of the key projects of the first half of 2021 has been on building up FrankWolfe.jl, a framework for nonlinear optimization in Julia using Frank-Wolfe methods. You can find a paper introducing the package here. This was an opportunity to experiment with different design choices for efficient, scalable, and flexible optimization tools while keeping the code simple to read and close to the algorithms.

Sets, chains and rules - part II

Differentiating set projections.

Sets, chains and rules - part I

The Pandora box from simple set membership.

Experiments on communicating vessels, constrained optimization and manifolds

Constrained optimization on a fundamental engineering problem

Differentiating the discrete: Automatic Differentiation meets Integer Optimization

What can automated gradient computations bring to mathematical optimizers, what does it take to compute?

Working with binary libraries for optimization in Julia

When going native is the only option, at least do it once and well.

Lessons learned on object constructors

Constructors are a basic building block of object-oriented programming (OOP). They expose ways to build specific types of objects consistently, using arbitrary rules to validate properties. Still, constructors are odd beasts in the OOP world. In Java, this is usually the first case of function overloading that learning programmers meet, often without knowing the term. An overloaded constructor is shown in the following example: class Car { private Motor motor; public Car(Motor m) { this.

Bridges as an extended dispatch system

Compiling mathematical optimization problems in a multiple-dispatch context.

Leveraging special graph shapes in LightGraphs

In a previous post, we pushed the boundaries of the LightGraphs.jl abstraction to see how conforming the algorithms are to the declared interface, noticing some implied assumptions that were not stated. This has led to the development of VertexSafeGraphs.jl and soon to some work on LightGraphs.jl itself. Another way to push the abstraction came out of the JuliaNantes workshop: leveraging some special structure of graphs to optimize some specific operations. A good parallel can be established be with the LinearAlgebra package from Julia Base, which defines special matrices such as Diagonal and Symmetric and Adjoint, implementing the AbstractMatrix interface but without storing all the entries.

Vertex removal in LightGraphs

In various graph-related algorithms, a graph is modified through successive operations, merging, creating and deleting vertices. That’s the case for the Blossom algorithm finding a best matching in a graph and using contractions of nodes. In such cases, it can be useful to remove only the vertex being contracted, and maintain the number of all other vertices. LightGraphs.jl offers a set of abstractions, types and algorithms to get started with graphs.