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 :ref:`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 `_. .. _Anaconda: https://store.continuum.io/cshop/anaconda/ .. _CVXOPT: http://cvxopt.org/ .. _NumPy: http://www.numpy.org/ .. _SciPy: http://www.scipy.org/