Tôi cần phải giải quyết (nhiều lần, đối với nhiều dữ liệu, cùng với một loạt các thứ khác) những gì tôi nghĩ tóm tắt thành một số second order cone program. Nó có thể được cô đọng thể hiện trong CVX một cái gì đó như thế này:Tối ưu hóa lồi CVX-esque trong R?
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
Dữ liệu độ dài và các mẫu chế bình đẳng thể hiện chỉ là giá trị tùy ý từ một số dữ liệu kiểm tra, nhưng dưới hình thức nói chung sẽ được nhiều giống nhau, với hai nhiệm kỳ mục tiêu - - một lỗi giảm thiểu, sự khan hiếm khuyến khích khác - và một số lượng lớn các ràng buộc bình đẳng trên các phần tử của một phiên bản biến đổi của biến tối ưu hóa (bản thân nó bị ràng buộc là không âm).
Điều này dường như hoạt động khá độc đáo, tốt hơn nhiều so với cách tiếp cận trước đó của tôi, điều này làm nảy sinh những hạn chế một cái gì đó thối. Vấn đề là mọi thứ khác xung quanh điều này đang xảy ra trong R, và nó sẽ là một mối phiền toái khi phải chuyển nó sang Matlab. Vì vậy, làm điều này trong R khả thi, và nếu như vậy làm thế nào?
Điều này thực sự có hai câu hỏi riêng biệt:
1) Có tài nguyên R tốt cho điều này không? Theo như tôi có thể biết từ CRAN task page, các tùy chọn gói SOCP là CLSCOP và DWD, bao gồm trình giải mã SOCP làm phụ trợ cho trình phân loại của nó. Cả hai đều có giao diện tương tự nhưng khá mờ đục và hơi mỏng về tài liệu và ví dụ, đưa chúng ta đến:
2) Cách tốt nhất để biểu diễn vấn đề ở trên trong định dạng khối ràng buộc được sử dụng bởi các gói này là gì? Cú pháp CVX ở trên che giấu rất nhiều tẻ nhạt với các biến phụ và như vậy, và tôi chỉ có thể thấy mình chi tiêu tuần cố gắng để có được quyền này, vì vậy bất kỳ lời khuyên hoặc gợi ý để di chuyển tôi đi đúng hướng sẽ rất hoan nghênh. ..
Cải biến vấn đề (giới thiệu các biến slack để loại bỏ định mức L^1 và biến L^2 thành giới hạn hình nón) tương đối dễ dàng: thay thế L^1 định mức 'M% *% x' với 'yz' và thêm các ràng buộc' y> = 0', 'z> = 0'; thay thế L^2 tiêu chuẩn của 'A% *% x - b' bằng' t' và thêm các ràng buộc 't> = sqrt (t (u)% *% u)', 'u = A % *% x - b'. Hầu hết các biến đổi đó thậm chí có thể là [tự động] (http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html), như với CVX, nhưng đối với một vấn đề đơn giản như vậy, nó có lẽ không đáng để gặp rắc rối. –
Tuy nhiên, định dạng đầu vào của 'DWD :: sqlp' hoặc' CLSOCP :: socp' không có giấy tờ: bạn được cho biết đối số nào chứa các ràng buộc, nhưng không phải cách chúng được mã hóa ... Bạn có thể thử liên hệ với tác giả của các gói đó, để có thêm thông tin về việc mã hóa các ràng buộc. Bạn cũng có thể xem gói 'Rcsdp': để giải quyết vấn đề (chương trình bán xác định), đầu vào được ghi thành tài liệu, nhưng chuyển vấn đề của bạn thành biểu mẫu mong muốn sẽ không đơn giản ... –
@Vincent Cảm ơn, điều đó rất hữu ích. (Và đó là một bài đăng trên blog!) 'DWD :: sqlp' trông giống như được mô hình hoá trên SDPT3, vì vậy có thể làm rõ các đầu vào bằng cách so sánh. – walkytalky