https://cvxopt.org/userguide/solvers.html
nonlinear convex optimization 문제를 위한 함수는 다음과 같이 호출할 수 있다.
cvxopt.solvers.cp(F, G, h, dims, A, b, kktsolver)
F, G, h, dims, A, b 는 가진 문제를 아래 포멧에 맞춰 해석하면 알아낼 수 있다.
다음과 같은 최적화 문제가 있다고 하자.
def as_column(x):
return np.array(x).reshape(-1,1)
def m(x):
return cvxopt.matrix(x, tc='d')
def F(x=None, z=None): // 위에 F function 을 정의하는 것의 예시이다.
if x is None and z is None: // x, z 가 둘다 주어지지 않았을때,
return (0, m(as_column([0,0])))
([p],[q]) = np.array(x)
f = as_column(p*p + 2*q*q)
Df = np.zeros((1,2))
Df[0,:] = [2*p, 4*q]
if z is None: // x 만 주어졌을때
return (m(f), m(Df))
// x, z 둘다 주어 졌을때
[[z]] = np.array(z)
H = np.array([[2,0],[0,4]]) * z
return (m(f), m(Df), m(H))
G = m(np.array([[-1,0],[1,0],[0,-1],[0,1]]))
h = m(as_column([0,1,0,1]))
A = m(np.array([[1,1]]))
b = m(as_column(1))
res = cvxopt.solvers.cp(F, G=G, h=h, A=A, b=b)
By default, the functions cp and cpl do not exploit problem structure. Two mechanisms are provided for implementing customized solvers that take advantage of problem structure.
위 함수를 호출했을때 가장 시간이 많이 소요되는 연산은 KKT equation 을 푸는 것이다. 이 연산을 빠르게 해주기 위해 kktsolver 을 지정할 수 있다.
https://en.wikipedia.org/wiki/Convex_optimization
교재 추천
https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf
https://web.archive.org/web/20170918180026/http://infohost.nmt.edu/~borchers/presentation.pdf
'석박사 > 최적화는 사기가 아니얏!' 카테고리의 다른 글
Gurobi Constraint Matrix Format 으로 작성하기 (0) | 2023.11.09 |
---|---|
Operations Research Cheat Sheet Technical Interview (0) | 2023.01.30 |
VRP state-of-the-art solver - LKH, HGS (0) | 2022.10.23 |
Column Generation 과 Dantzig-Wolfe Decomposition (0) | 2022.07.19 |
[Gurobi] big-M constraint 가 일으킬 수 있는 문제 (0) | 2021.11.23 |