Tôi đến bữa tiệc muộn một chút, nhưng câu trả lời ngắn gọn là có thể song song hóa phương pháp điểm bên trong cho GPU, nhưng việc đó có thành công hay không phụ thuộc vào cấu trúc của vấn đề. Về phần mềm hiện có, Optizelle có thể làm điều đó. Lấy chi nhánh phát triển cho đến khi một bản phát hành mới xảy ra trong tương lai gần.
Các tình huống hơi khác nhau tùy thuộc vào việc vấn đề ban đầu có chứa bất đẳng thức hay bất đẳng thức hay không. Có nhiều cách để làm điều này, nhưng theo tôi, cách tốt nhất để làm điều này cho các vấn đề chỉ với các ràng buộc bất bình đẳng là sử dụng phương pháp Newton trong vùng tin cậy không chính xác kết hợp với phương pháp điểm nội bộ kép nguyên thủy.
Chỉ đối với bất đẳng thức, phương pháp Newton vùng tin cậy không chính xác cơ bản có thể được tìm thấy trong Tối ưu hóa số của Nocedal và Wright ở trang 171 hoặc trên Phương thức vùng tin cậy của Conn, Gould và Toint trên trang 205. Thuật toán này có thể được kết hợp thành công với một số nguyên tố- Phương pháp điểm bên trong kép bằng cách sử dụng phương pháp cắt ngắn-CG đã sửa đổi từ trang 890 của bài viết Phương pháp điểm nội bộ để lập trình phi tuyến quy mô lớn của Byrd, Hribar và Nocedal. Cá nhân, tôi không thích cách họ thiết lập hệ thống điểm bên trong của họ, vì vậy tôi sẽ không sử dụng công thức điểm bên trong của họ, nhưng đó là sở thích. NITRO là một thuật toán tốt. Theo như chi tiết về điểm bên trong, hướng dẫn của Optizelle giải thích cách thực hiện điều này trong hướng dẫn sử dụng. Tôi có lẽ nên đăng một hướng dẫn cập nhật,
Đối với trường hợp có cả ràng buộc bất bình đẳng và bất đẳng thức, tôi tin rằng thuật toán tốt nhất là kết hợp phương pháp SQP bước hỗn hợp vùng tin cậy không chính xác từ Heinkenschoss và Ridzal trong một bài báo có tiêu đề Phương pháp SQP theo vùng tin cậy không ma trận để tối ưu hóa giới hạn bình đẳng. Về cơ bản, quá trình xử lý một phương pháp điểm bên trong hoạt động khá giống với trường hợp không bị ràng buộc ngoại trừ bước quasin normal cũng cần phải được bảo vệ.
Theo như các cơ hội song song, các thuật toán tôi tham chiếu ở trên hoạt động tốt bởi vì các thuật toán này có thể được thực hiện không có ma trận. Cụ thể, triển khai của Optizelle cho vấn đề này
minx∈X{f(x):g(x)=0,h(x)≥0}
Yêu cầu người dùng cung cấp một triển khai cho
f(x),∇f(x),∇2f(x)∂x
g(x),g′(x)∂x,g′(x)∗∂y,(g′′(x)∂x)∗∂y
h(x),h′(x)∂x,h′(x)∗∂y,(h′′(x)∂x)∗∂y
Nó không quan tâm những việc triển khai này đến từ đâu hoặc làm thế nào song song hóa chúng. Chúng có thể được thực hiện trong bộ nhớ dùng chung, bộ nhớ phân tán hoặc GPU. Không quan trọng. Những gì hoạt động tốt nhất cho một vấn đề cụ thể, phụ thuộc vào cấu trúc. Ngoài ra, nó yêu cầu người dùng cung cấp đại số tuyến tính cho
init: Memory allocation and size setting
copy: y <- x (Shallow. No memory allocation.)
scal: x <- alpha * x
axpy: y <- alpha * x + y
innr: innr <- <x,y>
zero: x <- 0
rand: x <- random
prod: Jordan product, z <- x o y
id: Identity element, x <- e such that x o e = x
linv: Jordan product inverse, z <- inv(L(x)) y where L(x) y = x o y
barr: Barrier function, barr <- barr(x) where x o grad barr(x) = e
srch: Line search, srch <- argmax {alpha \in Real >= 0 : alpha x + y >= 0} where y > 0
symm: Symmetrization, x <- symm(x) such that L(symm(x)) is a symmetric operator
Các hoạt động này có thể được thực hiện trong bộ nhớ nối tiếp, song song, bộ nhớ phân tán, bộ nhớ dùng chung hoặc trên GPU. Không quan trọng. Điều gì tốt nhất phụ thuộc vào cấu trúc vấn đề.
Cuối cùng, có các hệ thống tuyến tính và có ba hệ thống có thể được cung cấp:
- Điều kiện tiên quyết cho∇2f(x)
- Điều kiện tiên quyết còn lại chog′(x)g′(x)∗
- Điều kiện tiên quyết bên phải chog′(x)g′(x)∗
Mỗi điều kiện tiên quyết này có thể được thực hiện theo bộ nhớ nối tiếp hoặc song song, bộ nhớ phân tán hoặc chia sẻ hoặc trên GPU. Về cơ bản, điều kiện tiên quyết đầu tiên là điều kiện tiên quyết cho hệ thống CG bị cắt cụt liên quan đến các hệ thống tối ưu. Hai điều kiện tiên quyết cuối cùng được sử dụng cho hệ thống tăng cường giải quyết liên quan đến thuật toán SQP bước tổng hợp. Nói chung, đây là nơi bạn sẽ tăng hiệu suất lớn nhất. Hãy tưởng tượng nếu ràng buộc đại diện cho một số loại PDE. Sau đó, điều kiện tiên quyết cho tương ứng với một giải pháp PDE chuyển tiếp theo sau là một giải pháp PDE bổ trợ. Lưu ý, nếu chúng là hình vuông,gg′(x)g′(x)∗(g′(x)g′(x)∗)−1=g′(x)−∗g′(x)−1. Đối với một số lượng lớn các công thức PDE, chẳng hạn như các phương pháp sai phân hữu hạn với các tích hợp thời gian rõ ràng, các giải pháp này có thể được song song rất tốt trên GPU.
Cuối cùng, các thuật toán trong Optizelle thực hiện các bài toán về hình nón đối xứng, bao gồm các ràng buộc, hình nón bậc hai và các ràng buộc semidefinite. Tuy nhiên, nói chung, các hình nón tuyến tính sẽ có xu hướng thực hiện nó. Về cơ bản, các giải pháp hình nón tuyến tính có thể làm giảm tính khả thi và khả năng tối ưu hóa được thực hiện đối với một hệ thống thực sự nhỏ gọn có thể được Choleski bao gồm. Vì Optizelle hoạt động với các hệ thống phi tuyến, nên nó thực sự không thể làm được điều đó. Ít nhất, tôi không biết làm thế nào. Trên hết, có những hạn chế về kích thước của các khối SDP mà Optizelle có thể xử lý. Nhà điều hànhlinv
ở trên đòi hỏi nghịch đảo của ma trận SDP và nghịch đảo đó thực sự tốn kém cho các khối lớn. Ngoài ra, có thêm một người bảo vệ an toàn đòi hỏi phải có nhân tố Choleski. Những yếu tố này không thực sự song song tốt trên GPU. Ít nhất, tôi không biết về một triển khai song song tốt. Dù sao, điểm mấu chốt là nếu đó là chương trình hình nón tuyến tính, hãy sử dụng bộ giải hình nón tuyến tính như CSDP hoặc SDPT3.
TLDR; Sử dụng Optizelle . Nó miễn phí, mã nguồn mở và BSD được cấp phép. Tôi đã nhân rộng nó thành một nửa tỷ biến và nó hoạt động tốt. Tôi đã chạy nó với GPU và nó hoạt động tốt. Việc nó có hoạt động tốt với GPU hay không phụ thuộc vào việc các hoạt động trên có song song tốt với GPU hay không.