나는 (많은 시간 동안, 다른 많은 것들과 함께 많은 양의 데이터를 위해) 나는 second order cone program으로 내려 간다. 그것은 간결이 같은 CVX 뭔가 표현 될 수있다 :R에서 CVX-esque 볼록 최적화?
cvx_begin
variable X(2000);
expression MX(2000);
MX = M * X;
minimize(norm(A * X - b) + gamma * norm(MX, 1))
subject to
X >= 0
MX((1:500) * 4 - 3) == MX((1:500) * 4 - 2)
MX((1:500) * 4 - 1) == MX((1:500) * 4)
cvx_end
데이터 표시 길이와 평등 제약 패턴 테스트 데이터에서 불과 임의의 값이 있지만 일반적인 형태는 두 개의 목표 조건을 훨씬 동일합니다 - 하나는 최소화하는 오차, 다른 하나는 희박한 희박성 (sparsity), 그리고 변형 된 버전의 최적화 변수의 요소들에 대한 많은 양의 동일성 제약 조건들 (그 자체는 음수가 아닌 제약을 가짐)이다.
이것은 이전의 방식보다 훨씬 훌륭하게 잘 작동하는 것 같습니다. 문제는이 문제를 둘러싼 모든 것이 R에서 일어나고 있으며 Matlab으로 이식해야한다는 것은 상당히 불편할 것입니다. 실용적인면에서 이것을하고 있습니까? 그렇다면 어떻게?
이 정말로 두 개의 질문에 종기 :
1) 이것에 대한 좋은 R 자원이 있습니까? 마찬가지로 CRAN task page에서 알 수 있듯이 SOCP 패키지 옵션은 CLSCOP 및 DWD이며 분류 자의 부속 장치로 SOCP 솔버가 포함되어 있습니다. 둘 다 비슷하지만 상당히 불투명 한 인터페이스를 가지고 있으며 문서 및 예제에 약간 희박하여 다음을 제공합니다.
2) 이러한 패키지에서 사용하는 제약 조건 블록 형식에서 위의 문제를 나타내는 가장 좋은 방법은 무엇입니까? 위의 CVX 구문은 여분의 변수 등으로 많은 지루한 것들을 숨기고 있으며, 주이 권리를 얻으려는 것을 알 수 있습니다. 따라서 올바른 방향으로 나를 미십시오. ..
을 수정하여 L^1 표준을 제거하고 L^2 표준을 원뿔 제약으로 변환하십시오. 은 상대적으로 쉽습니다. 'M % * % x'의 L^1 표준을 대체하십시오. 'yz' 을 사용하고'y> = 0','z> = 0' 제약 조건을 추가하십시오; 'A % * % x - b'의 L^2 규범을't' 으로 대체하고 제약 조건을 't> = sqrt (t (u) % * % u)', 'u = A % * % x - b'. 대부분의 변환은 [자동] (http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html), 과 마찬가지로 CVX, 과 같은 간단한 문제가있을 수 있지만, 그것은 아마도 문제의 가치가 없습니다. –
그러나 'DWD :: sqlp' 또는'CLSOCP :: socp'의 입력 형식 은 문서화되어 있지 않습니다 : 어떤 인수에 제약 조건이 포함되어 있지만 인코딩 방법은 알려지지 않았습니다. 해당 패키지 작성자 에 제약 조건 인코딩에 대한 자세한 정보가 있습니다. 또한'Rcsdp' 패키지를보실 수 있습니다 : 더 큰 클래스의 문제 (준결승 프로그램)를 주소로, 입력이 문서화되어 있고, 원하는 형태로 문제를 변환하는 것이 쉽지는 않을 것입니다 ... –
@ Vincent 감사합니다. 도움이됩니다. (그리고 그것은 꽤 블로그 게시물입니다!)'DWD :: sqlp'는 SDPT3에서 모델링 된 것처럼 보이므로 비교를 통해 입력을 명확히 할 수 있습니다. – walkytalky