Я написал следующий фрагмент кода
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, что - по крайней мере наброски высокого уровня, ключевые слова - может бытьсказал о вышеописанной процедуре?