Я пытался передать некоторый код из Matlab в Python. У меня такая же проблема с выпуклой оптимизацией, которая работает над Matlab, но у меня проблемы с передачей ее CVXPY или CVXOPT.От CVX до CVXPY или CVXOPT
n = 1000;
i = 20;
y = rand(n,1);
A = rand(n,i);
cvx_begin
variable x(n);
variable lambda(i);
minimize(sum_square(x-y));
subject to
x == A*lambda;
lambda >= zeros(i,1);
lambda'*ones(i,1) == 1;
cvx_end
Это то, что я пытался с Python и CVXPY.
import numpy as np
from cvxpy import *
# Problem data.
n = 100
i = 20
np.random.seed(1)
y = np.random.randn(n)
A = np.random.randn(n, i)
# Construct the problem.
x = Variable(n)
lmbd = Variable(i)
objective = Minimize(sum_squares(x - y))
constraints = [x == np.dot(A, lmbd),
lmbd <= np.zeros(itr),
np.sum(lmbd) == 1]
prob = Problem(objective, constraints)
print("status:", prob.status)
print("optimal value", prob.value)
Тем не менее, это не работает. Кто-нибудь из вас знает, как заставить его работать? Я уверен, что моя проблема связана с ограничениями . И также было бы неплохо иметь его с CVXOPT.
Правильно, вы не можете использовать функции NumPy, такие как '' np.sum'' на cvxpy o bjects. – steven
Итак, как CVXPY и CVXOPT работают вместе? – jmcmahon443
Согласно cvxpy, они используют библиотеки cvxopt для решения проблем. В cvxopt вы должны написать свою проблему более стандартным способом для типа решателя, который хотите использовать, тогда как cvxpy должен адаптировать вашу проблему на основе структуры, которую вы используете для своей проблемы (они должны выбрать тип cvxopt решатель в зависимости от вашей проблемы и передайте переменные стандартным способом cvxopt). В конце дня CVXPY - это обертка, которая пытается облегчить ситуацию. – silgon