Lập trình bậc hai khi ma trận không xác định dương


8

http://cran.r-project.org/web/packages/quadprog/quadprog.pdf

Gói R quadprogdường như chỉ có thể giải quyết vấn đề lập trình bậc hai khi ma trận xác định dương.D

Tuy nhiên, có một trường hợp khi ma trận không xác định dương. nhu laD

min(x2+y26xy)subject tox+y1,3x+y1.5,x,y0.

Làm thế nào tôi có thể giải quyết loại vấn đề này?


Vấn đề có thể liên quan đến thực tế là nếu phương trình bậc hai không dương xác định thì nó không có mức tối thiểu cục bộ. Trong trường hợp này vẫn phải có một mức tối thiểu toàn cầu, vì khu vực bị giới hạn.
Glen_b -Reinstate Monica

1
Nếu không phải là PSD, thì vấn đề không phải là lồi. Bất kỳ thuật toán giảm độ dốc nào sẽ đưa bạn đến mức tối thiểu cục bộ, nhiều hay ít tùy thuộc vào điểm bắt đầu của nó. Bạn có thể phải đưa ra một heuristic để quyết định khi nào nên dừng tìm kiếm. D
user603

4
Không khó để quyết định phân khúc ranh giới tối thiểu nằm ở đâu. Sau đó, đưa ra ràng buộc đó, đủ dễ để đưa nó thành một vấn đề có mức tối thiểu cục bộ ... nhưng đề xuất của @ user603 về việc sử dụng thuật toán tối thiểu hóa tiêu chuẩn như giảm độ dốc có thể khá hữu ích như một cách tiếp cận chung.
Glen_b -Reinstate Monica

Câu trả lời:


4

Có các thói quen tối ưu hóa đặc biệt để tối ưu hóa cục bộ hoặc toàn cầu cho các vấn đề Lập trình bậc hai, cho dù hàm mục tiêu có lồi hay không.

BARON là một trình tối ưu hóa toàn cầu có mục đích chung có thể xử lý và tận dụng các vấn đề lập trình bậc hai, lồi hay không.

CPLEX có một bộ giải lập trình bậc hai có thể được gọi với solutiontarget = 2 để tìm tối ưu cục bộ hoặc = 3 để tìm tối ưu toàn cục. Trong MATLAB, có thể được gọi bằng cplexqp.

Tối ưu hóa mục đích chung có thể xử lý các ràng buộc tuyến tính cũng có thể được sử dụng để tìm tối ưu cục bộ. Một ví dụ trong R là https://cran.r-project.org/web/packages/trust/trust.pdf . Trình tối ưu hóa cho R được liệt kê tại https://cran.r-project.org/web/view/Optimization.html .

Trong MATLAB, hàm quadprog trong Hộp công cụ tối ưu hóa có thể được sử dụng để tìm tối ưu cục bộ.

Trong Julia, có một loạt các tối ưu hóa có sẵn.

Thuật toán giảm dần độ dốc "Bất kỳ" có thể không đưa bạn đến bất cứ điều gì, chứ đừng nói đến việc xử lý các ràng buộc. Sử dụng một gói được phát triển bởi một người biết những gì họ đang làm.

Vấn đề ví dụ được cung cấp dễ dàng được giải quyết để tối ưu toàn cầu có thể chứng minh. Có lẽ với hơn 2 năm trôi qua, nó không còn cần thiết nữa, hoặc có thể là một ví dụ chưa từng có, nhưng trong mọi trường hợp, tối ưu toàn cầu là ở x = 0,321429, y = 0,535714


1
+1. Các phương pháp số nhân Lagrange để giải quyết các vấn đề như vậy thường được dạy trong các lớp Giải tích năm thứ hai. Với chúng, người ta dễ dàng đạt được và (đạt được dọc theo ranh giới ). x=9/28y=15/283x+y=3/2
whuber

1

Bạn có thể xây dựng một cách giải quyết bằng cách sử dụng nearPDtừ Matrixgói như vậy :
nearPD(D)$mat.

nearPD tính toán ma trận xác định dương gần nhất.


2
+1 vì đây là một giải pháp gần đúng tương đối đơn giản . (tôi không nhớ là đã thấy câu hỏi này nếu không tôi sẽ tự đưa ra câu hỏi trong một bình luận.) Đã nói rằng, về cơ bản, người ta đặt giá trị riêng âm về 0 khi sử dụng kỹ thuật này và sau đó xây dựng lại ma trận gốc; nếu các chế độ biến đổi tương ứng có ý nghĩa thì phép tính gần đúng này có thể bị sai sót nghiêm trọng.
usεr11852

3
Đồng ý với câu cuối cùng trong bình luận trước. Đây là một kỹ thuật tuyệt vời để sử dụng miễn là bạn không quan tâm dù chỉ câu trả lời của bạn là đúng hay thậm chí là ở sân bóng, thành phố hoặc tiểu bang phù hợp. Nếu ma trận "Hessian" mục tiêu của bạn nằm trong "khả năng chịu đựng" không có tính xác định tích cực, thì phương pháp này thực sự có thể hợp lý, nếu không thì không.
Mark L. Stone
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.