Google Summer of Code

CVXPY is accepting applications from Google Summer of Code students! We look forward to working with students who enjoy coding and math. This page gives information about CVXPY and describes posssible summer projects.

About CVXPY

CVXPY is a domain-specific language for convex optimization embedded in Python. It allows the user to express convex optimization problems in a natural syntax that follows the math, rather than in the restrictive standard form required by solvers. CVXPY makes it easy to combine convex optimization with high-level features of Python such as parallelism and object-oriented design. CVXPY is available at cvxpy.org under the GPL license, along with documentation and examples.

CVXPY is widely used by researchers and industry practitioners who want to apply optimization to their problems. It has been downloaded thousands of times and used to teach multiple courses. Many tools have been built on top of CVXPY, such as an extension for stochastic optimization.

Contacting CVXPY

The cvxpy mailing list is for users and developers of CVXPY. Use this mailing list to introduce yourself. You can also contact the project leads Steven Diamond and Stephen Boyd directly.

We use GitHub to track our source code and for tracking and discussing issues.

Getting started

To get started as a CVXPY developer, follow the instructions here to install CVXPY from source.

We recommend using Anaconda as a package manager for Python. This makes it easy to install dependencies such as NumPy, SciPy, and CVXOPT.

The CVXPY developers use git for source control. Contributions to CVXPY are made through pull requests or feature branches.

Our Github issues page is the most up to date list of CVXPY bugs and feature requests.

Writing your application

We are looking for one Google Summer of Code student for 2016. The most qualified applicants will have both coding experience and knowledge of convex optimization. We also highly value academic research experience. Be sure to discuss your coding, math, and research background in your application.

Project Ideas

  1. Test Framework for Cone Programming and Convex Optimization.

    Project description: You will build an open source system for automatically testing cone solvers, which are special purpose convex optimization solvers used by CVXPY. The system will include a large library of existing problems, generated by CVXPY from application problems in many fields, as well as randomly generated problems. The system will be able to automatically run a solver against many cone programs of different sizes, scales, and from many different problem areas, giving summary statistics of the accuracy, speed, number and types of failure, and so on. The system will make it much easier for developers of open source solvers to judge the impact of code changes on performance. Ideally the system will run on a cloud computing platform like AWS, so that the tests are parallelized and run continuously.

    Skills: Basic knowledge of convex optimization. Experience with Python, linux, and git. Bonus points for AWS or cloud computing experience.

    Difficulty level: Intermediate.

    Related Readings/Links: See Convex Optimization for useful mathematical background.

    Potential mentors: The mentors for this project are Steven Diamond and Stephen Boyd.

  2. A Centralized Library for Convex Optimization.

    Project description: You will build a C++ library that centralizes the functionality shared by the convex optimization modeling frameworks CVXPY, CVX, and Convex.jl. The modeling frameworks will provide the C++ library with a description of the optimization problem, and the library will transform the problem into standard form, call a solver, and then return the solution. Moving shared functionality into a single library will make it much easier to maintain existing modeling frameworks and to create new modeling frameworks for languages like R and Scala. The C++ library should be modular and extensible, so that novel functionality such as a presolver and code generation can easily be added. You will build on the CVXcanon project.

    Skills: Intermediate knowledge of convex optimization. Experience with C++, Python, linux, and git.

    Difficulty level: Hard.

    Related Readings/Links: See a discussion here of the C++ library functionality. This paper and its references discuss the transformation into standard form in detail, in the section on canonicalization.

    Potential mentors: The mentors for this project are Steven Diamond and Stephen Boyd.