cvxpy наименьших квадратов под капотом - PullRequest
0 голосов
/ 21 февраля 2019

Я написал следующий фрагмент кода

def solve( p, a ):
    m,n,ids,inv,k = 0,len(p),{},{},0
    for i in range(n):
        for j in range(n):
            #if i != j:
            ids[(i,j)] = k
            inv[k] = (i,j)
            k = k+1
    # Problem data
    A = np.zeros((2*n,n*n))
    b = np.zeros(2*n)
    c = np.zeros(2*n)
    # for i in range(2*n):
    #    for j in range(n*(n-1)):
    #        A[i,j]= -1.00
    for j in range(n):
        for i in range(n):
            #if i != j:
            idx = ids[(i,j)]
            A[j,idx] = 1
        b[j] = 1
    for i in range(n):
        for j in range(n):
            #if i != j:
            idx = ids[(i,j)]
            A[i+n,idx] = p[j]
        b[i+n] = p[i]
    # Construct the problem
    x = cp.Variable(n*n)
    objective = cp.Minimize(cp.sum_squares(A*x-b))
    constraints = [0 <= x]
    prob = cp.Problem(objective,constraints)
    result = prob.solve()
    alpha = np.zeros((n,n))
    # vec = A*x.value-b
    for i in range(n):
        for j in range(n):
            #if i == j:
            #    alpha[i,j] = -1.00
            #else:
            alpha[i,j] = x.value[ids[(i,j)]]
    return (x,alpha)

По сути, я решаю систему линейных уравнений с 2n строками и n * n столбцами, т.е. недоопределенным.CVXPY возвращает хорошие ответы.Что мне нужно знать, так это какой именно математический метод используется под капотом для этой конкретной установки ограничений и критериев оптимизации?Документация CVXPY указывает на 730-страничную книгу по выпуклой оптимизации, и мне бы хотелось, чтобы у меня было достаточно времени и знаний для ее прочтения ... Если не считать чтения исходного кода CVXPY, что - по крайней мере наброски высокого уровня, ключевые слова - может бытьсказал о вышеописанной процедуре?

...