Giải bài toán bình phương tối thiểu với các ràng buộc tuyến tính trong Python


12

Tôi cần giải quyết

minxAxb22,s.t.ixi=1,xi0,i.

Tôi nghĩ rằng đây là một vấn đề bậc hai có thể giải quyết được với CVXOPT , nhưng tôi không thể tìm ra cách nào.


Tôi hy vọng câu hỏi này không quá cụ thể cho compsci.
tillsten

Geoff Oxberry: Chỉ là một sự tò mò, nhưng tại sao bạn lại chỉnh sửa phần tuyến tính? Tôi nghĩ rằng nó là một phần bất lực của mô tả vấn đề, giải pháp sẽ khá khác nhau cho việc tối ưu hóa bình phương tối thiểu phi tuyến tính.
tillsten

Btw, các chỉnh sửa khác là tuyệt vời!
tillsten

Bạn có thể dễ dàng giải quyết điều này bằng mã của riêng bạn theo cách rất hiệu quả. Không cần CVXOPT.
Royi

Câu trả lời:


11

Tôi đã viết một câu trả lời đầy đủ (bên dưới dòng) trước khi khám phá CVXPY , trong đó (như CVX cho MATLAB) thực hiện tất cả những điều khó khăn cho bạn và có một ví dụ rất ngắn gần giống với bạn ở đây . Bạn chỉ cần thay thế dòng có liên quan với

 p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])

Câu trả lời cũ của tôi, làm điều đó theo cách khó hơn với CVXOPT:

Theo đề xuất của Geoff để bình phương hàm mục tiêu của bạn đưa ra

Mộtx-b22= =xTMộtT-bT,Mộtx-b= =xTMộtTMộtx-bTMộtx-xTMộtb-bTb

Tất nhiên, tất cả các điều khoản này là vô hướng, vì vậy bạn có thể transpose một thứ ba và thả người cuối cùng (vì nó không phụ thuộc vào và do đó sẽ không thay đổi mà mang đến cho bạn một mức tối thiểu, mặc dù bạn sẽ cần phải thêm nó trở lại sau khi giải để có được giá trị chính xác của mục tiêu của bạn) để có được Điều này (bao gồm các ràng buộc của bạn) có dạng chương trình bậc hai, như được đưa ra trong tài liệu CVXOPT ở đây , nơi cũng có mã ví dụ để giải quyết vấn đề như vậy.xx

xTMộtTMộtx-bT(Một+MộtT)x

4

Thay vì vấn đề bạn đã giải quyết, hãy giải quyết

tối thiểuxMộtx-b22,S.t.ΣTôixTôi= =1,xTôi0,Tôi.

Vấn đề này là một vấn đề tối ưu hóa lồi, phi tuyến khác biệt, có thể được giải quyết trong CVXOPT, IPOPT hoặc bất kỳ bộ giải tối ưu hóa lồi nào khác.

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.