forked from cvxpy/cvxpy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
roadmap.txt
84 lines (65 loc) · 3.25 KB
/
roadmap.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Examples:
basic
- LP
- QP
- SOCP
- SDP
graph
- single commodity flow
- max flow that returns min cut
- electrical grid from Eric's paper
- social network
- latency
- flow control (fixed paths with delay = sum of latency)
control
- optimal control
- MPC
layout
SOC controlled spaceship
portfolio optimization
- static
- time series
parallel
- 10 fold CV (testing error vs training error) for SVM?
- trade off curve
- Monte Carlo
biconvex
- non-negative matrix factorization
- missing data
ADMM
- consensus
- standard form f(x) + g(z) s.t. Ax + Bz = c
images
- foreground vs background classifier
- convolutions
as for examples to be working out, i think we need very basic ones, including ones that are similar to the CVX library and also ones that illustrate simple things like changing the objective (for example, in an LP, you might first minimize, and then maximize, the same objective). we also need some simple examples for non-experts that show how to create a trade off by varying a parameter and repeatedly solving. also, and this one is important --- simple ways to do things in parallel, say using openMP.
we also want some cooler examples that rely on convex optimization as a subroutine. obvious examples are branch and bound, non-convex ADMM/operator splitting and other heuristics for non convex problems, convex-concave procedure, bi-convex problems (like nonnegative matrix factorization), model predictive control, ADMM (general form), and so on.
finally, we want some cool OOCO (object oriented convex optimization) examples. we have talked about network flow problems already. here is another area: geometric problems. we could build up convex sets defined by convex inequalities (or equalities); then we can implement things like intersection, bounding box, and so on. for example, you might intersect a bunch of sets and then ask for the bounding box. or you might ask for a point in the intersection. or the distance between two sets; or, you might ask for a separating hyperplane. this would require some real thought to design it correctly, but it would be very cool when it's done. we wouldn't have too implement very sophisticated methods, but even some basic ones like those already mentioned would be cool.
i'd also like to see some vertical examples, such as a family of examples for portfolio optimization or for time-series fitting.
Bugs:
Need separate BoolMat for constant (see vstack(x,2))
Features:
Finish README (mainly DCP and intro on dcp.stanford.edu)
add parameter example
context/book citation for examples
Choose internal matrix type and get rid of unnecessary interface code.
Switch from object id to variable id so index and transpose can be grouped together?
Add scipy sparse matrix support
Interface for is_dcp
simplify when objective or constraint constructed so only need to stuff parameters in the matrix
Organize atoms
Switch from cvxopt to numpy matrices
exponential cone
expression.value
Organize parse tree
Flatten addition chains.
Variable attributes (e.g. Positive) - BoolVar vs Variable("boolean")
Fix returned statuses for numerical problems in ECOS
Long term:
targeting QCML
put constraints_matrix function in C
branch and bound extension
thread safety
large data sets
ADMM canonicalization
simplification of parse tree (i.e. compiling)