Implementing master of Optimization and Cornell Professor Jim Renegar's frameworks for applying Subgradient Method to Conic Optimization problems. Read Renegars original paper here. Read our final report.
- Zach Rosenof
- Mitch Perry
- Mike Sosa
- GeneralCase
- FindDistinguisedDirection - Use cvxpy to find a feasible solution to the SDP specified by A and b.
- Inputs :
- A : list of numpy matrices - A list of m finite dimensional NxN matrices
- b : numpy matrix - Mx1 matrix
- Output :
- e : numpy matrix - A NxN matrix that can serve as a distinguished direction to the problem
- Inputs :
- RenegarSDP - Uses the algorithm described in Renegar's paper to solve the following SDP: minimize <c, x> subject to Ax= b and x is in the cone of positive semidefinite matrices.
- Inputs :
- A : list of numpy matrices - A list of m finite dimensional NxN matrices
- b : numpy matrix - Mx1 matrix
- c : numpy matrix - NxN matrix
- eps : float - Desired accuracy of solution. Higher epsilon corresponds to higher computation time
- Output :
- Sol : numpy matrix - A NxN matrix containing the solution to the original SDP
- SolValue : float - The objective function value
- Inputs :
- FindDistinguisedDirection - Use cvxpy to find a feasible solution to the SDP specified by A and b.
- IdentityCase
- Checker - Checks to see if the user-defined input is of the correct form.
- Inputs :
- A : list of numpy matrices - A list of m finite dimensional NxN matrices
- b : numpy matrix - Mx1 matrix
- c : numpy matrix - NxN matrix
- eps : float - Desired accuracy of solution. Between 0 and 1
- Output :
- m : int - The number of matrices within A. Only returned if tests pass
- n : int - The dimension of the matrices. Only returned if tests pass
- Inputs :
- Supgradient - Calculates a supgradient that is used to update algorithm guess
- Inputs :
- x : numpy matrix - A NxN matrix that is a feasible solution to the problem.
- Output :
- sup : numpy matrix - NxN matrix that is the supgradient of lambda_min(x) evaluated at the point x
- Inputs :
- SupgradProjection - Projects the supgradient s onto the intersection of the null spaces of the matrices in A with the null space of the matrix c
- Inputs :
- s : numpy matrix - A NxN dimensional matrix that represents a supgradient of lambdamin for some x
- A : list of numpy matrices - A list of m finite dimensional NxN matrices
- c : numpy matrix - NxN matrix
- Output :
- proj : numpy matrix - NxN matrix that is the projection
- Inputs :
- Checker - Checks to see if the user-defined input is of the correct form.
- GeneralCaseTolerance
- RenegarSDPv2 - Same as RenegarSDP except with options for iterations, z value and tolerance
- Inputs :
- A : list of numpy matrices - A list of m finite dimensional NxN matrices
- b : numpy matrix - Mx1 matrix
- c : numpy matrix - NxN matrix
- eps : float - Desired accuracy of solution. Higher epsilon corresponds to higher computation time
- Tol : float - The desired tolerance of the solution
- max_iterations : int - The max number of iterations the algorithm should run before stopping
- z : float - Desired z value for the algorithm
- Output :
- Sol : numpy matrix - A NxN matrix containing the solution to the original SDP
- SolValue : float - The objective function value
- iteration_number : int - The number of iterations the algorithm ran for
- Inputs :
- RenegarSDPv2 - Same as RenegarSDP except with options for iterations, z value and tolerance
- Reggen
- File that can be run to generate and solve a random SDP problem. Prompts the user for the desired number of matrices within A, and desired dimension of the matrices
- createRandGenSDP - Creates a randomnly generated non-sparse SDP with uniform distribution.
- Inputs :
- m : int - Desired number of A matrices
- n : int - Desired dimension of the matrices
- Outputs :
- A : numpy matrix - Random NxN symmetric positive definite matrix
- b : numpy matrix - Random Mx1 matrix
- c : numpy matrix - Random NxN symmetric positive definite matrix
- Inputs :
- Testing
- Identity Testing - Tests case where the identity is the distinguished direction.
- General Testing - Tests general cases
- General Tolerance Testing - Tests the solver without a fixed number of iterations.