Thư viện C ++ để giảm thiểu ràng buộc phi tuyến


9

Tôi hiện đang cố gắng giải quyết vấn đề tối thiểu hóa bị ràng buộc phi tuyến như được thực hiện trong hàm "fmincon" của matlab. Kỳ vọng của tôi là, tối thiểu hóa (fun1, x0, uB, lB, fun2) trong đó x0 là trạng thái ban đầu, fun1 là hàm cần được thu nhỏ, uB là giới hạn trên, lB là giới hạn dưới và fun2 là hàm cung cấp các vectơ có giá trị phi tuyến / bất bình đẳng như được mô tả trong http://www.mathworks.com/help/optim/ug/fmincon.htmlnhư hàm nonlcon. Các vectơ này cũng đang thay đổi thông qua các lần lặp (chúng không phụ thuộc tuyến tính vào x_n, lần lặp thứ n của vectơ giải pháp). Trong triển khai MATLAB chúng ở dạng c (x) <= 0. Đây là đoạn mã cuối cùng cần được chuyển từ matlab sang c ++ và tôi đã phải vật lộn rất nhiều trong khi cố gắng tìm thư viện c ++ thích hợp có chứa thuật toán này. Đây là lý do tại sao tôi đang tìm kiếm sự giúp đỡ ở đây và tôi sẽ đánh giá cao nếu bạn có thể cung cấp chuyên môn của mình.

Ví dụ hay về những gì tôi muốn làm là lần đầu tiên trên trang này http://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-examples.html#f10960?s_tid=doc_12b Chỉ khác là tôi cũng cần ranh giới ...

Cảm ơn trước.

Peter


Có khả năng sử dụng NLOPT ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Reference nhưng tôi sẽ cần tính toán sự khác biệt hữu hạn bằng cách sử dụng nhiều lệnh gọi để đánh giá hàm "thu nhỏ" từ hàm mục tiêu và tôi đã loại hy vọng rằng nó sẽ được chăm sóc bằng thuật toán tự nó để cải thiện hiệu suất. Chức năng tối thiểu hóa của tôi là thực sự tốn kém để tính toán. Chỉ cần làm rõ, chức năng tối thiểu hóa là khả năng ghi nhật ký của mô hình ước tính với dữ liệu gốc trong ước tính mô hình chuyển mạch markov chuỗi thời gian.
Peter Kottas

1
Bạn đã xem câu trả lời cho câu hỏi này chưa? Nếu các yêu cầu của bạn không được giải quyết đầy đủ ở đó, bạn nên chỉnh sửa câu hỏi của mình để chỉ ra chúng để có được các khuyến nghị hữu ích.
Christian Clason

Cảm ơn, có một số thông tin hữu ích ở đó. Hiện tại tôi đang chống cùi chỏ trong thư viện NLOPT vì tôi phát hiện ra rằng nó cũng có thể phù hợp với vấn đề của tôi. Tôi sẽ giữ chủ đề này được đăng và sẽ cung cấp giải pháp khi tôi đưa ra một chủ đề. Bất kỳ trợ giúp có thể làm cho quá trình nhanh hơn vẫn được đánh giá cao. Ví dụ như triển khai thực tế, v.v.
Peter Kottas

1
Một số câu hỏi: 1. Là vấn đề của bạn lồi? 2. Mục tiêu và các ràng buộc có khác nhau không? Nếu vậy thì bao nhiêu lần? Một lần? Hai lần? 3. Bạn có thể tính toán các dẫn xuất đó một cách dễ dàng, nếu chúng tồn tại? Các phép tính xấp xỉ hữu hạn sẽ dễ dàng tính toán nếu bạn không có sẵn các công cụ phái sinh đó? 4. Bạn có bao nhiêu biến số quyết định? (nghĩa là, bạn đang cố gắng giảm thiểu bao nhiêu biến?) Một ước tính sơ bộ sẽ đủ. 5. Đánh giá chức năng có đắt không? Sẽ rất hữu ích khi có tất cả các thông tin này để cung cấp cho bạn một câu trả lời tốt hơn.
Geoff Oxberry

Chào! Trước hết, cảm ơn đã trả lời. 1. Khó có thể nói nhưng rất có thể là không, bởi vì chức năng tối thiểu hóa là khả năng ghi nhật ký giữa ước tính mô hình chuyển mạch markov của thời gian trong ứng dụng tài chính và từ bản chất của nó, tôi giả sử loại đầu ra ồn ào. 2.no 3. chỉ sử dụng các khác biệt hữu hạn 4. vectơ giải quyết bao gồm n biến trong đó n phụ thuộc vào các tham số mô hình mong muốn, nói chung từ 12 để cho biết 30 5. khả năng giữa mô hình và dữ liệu gốc là tốn kém, bất đẳng thức phi tuyến bổ sung đang theo
đuổi

Câu trả lời:


2

Nếu chức năng của bạn không khác biệt, bạn nên cẩn thận về cách bạn sử dụng sự khác biệt hữu hạn. Nếu bạn muốn sử dụng thông tin phái sinh, đặt cược tốt nhất của bạn có lẽ là một loại phương pháp semismooth Newton. Một tập hợp các ghi chú mô tả các phương pháp như vậy có thể được tìm thấy ở đây .

Mười hai đến ba mươi biến có lẽ nằm ở phía trên của những gì có thể thực hiện được với phương thức tìm kiếm mẫu (còn gọi là tìm kiếm trực tiếp). Một bài viết đánh giá gần đây của Rios và Sahinidis trên Tạp chí Tối ưu hóa toàn cầu về các phương pháp tối ưu hóa không có nguồn gốc (như phương pháp tìm kiếm mẫu) có thể được tìm thấy ở đây , cùng với một trang web đồng hành . Một bài viết đánh giá gần đây về các phương pháp này của Kolda, Lewis và Torczon trong SIAM Review có thể được tìm thấy ở đây . Các phương pháp này hoạt động khá tốt với các đánh giá chức năng đắt tiền và không nhất thiết yêu cầu thông tin khác biệt hoặc thông tin phái sinh.

Nhiều phương pháp trong số này đòi hỏi một số loại lồi để đảm bảo sự hội tụ đến mức tối ưu toàn cầu, vì vậy nếu bạn giải quyết vấn đề của mình một cách chặt chẽ, bạn có thể cần kết hợp các phương pháp trên với chiến lược liên kết chi nhánh. Tuy nhiên, nếu bạn không quan tâm đến sự nghiêm ngặt, một cách tiếp cận như MATLAB fminconcó thể hoạt động đủ tốt (không còn gì đảm bảo nữa). Sự khác biệt hữu hạn rất có thể sẽ cung cấp cho bạn một thành viên của chức năng phụ không phân biệt của bạn, điều này có thể đủ cho trường hợp vấn đề của bạn và dữ liệu đầu vào cụ thể để trả về một kết quả đủ chính xác cho mục đích của bạn. Trong trường hợp đó, có lẽ bạn nên xem các thư viện được đề cập trong câu trả lời cho câu hỏi Christian liên kết trong bình luận của mình.


2

Nếu tất cả những gì bạn cần là một thư viện C ++ để giải quyết các vấn đề tối ưu hóa phi tuyến, bạn có thể sử dụng RobOptim . Mặc dù ban đầu RobOptim được phát triển với các vấn đề tối ưu hóa robot, nhưng nó phù hợp với mọi vấn đề tối ưu hóa phi tuyến. Nó cung cấp giao diện C ++ đơn giản với các plugin cho nhiều bộ giải phi tuyến ( Ipopt , NAG , v.v.). Sử dụng loại trình bao bọc đó giúp dễ dàng sử dụng một bộ giải NLP khác. Nếu bạn không thể cung cấp độ dốc, tính toán sai phân hữu hạn có thể được thực hiện tự động.

Đó là nguồn mở để bạn có thể kiểm tra mã nguồn trên GitHub: https://github.com/roboptim/

Phân tích được thực hiện bởi @Geoff Oxberry là điều cần thiết cho sự lựa chọn của người giải phi tuyến sẽ được gọi bởi RobOptim. Lưu ý rằng khi xử lý loại bộ giải đó, việc điều chỉnh tham số có thể ảnh hưởng rất lớn đến hiệu suất và bạn vẫn có thể bị mắc kẹt trong các bản tối thiểu cục bộ (nó thực sự phụ thuộc vào loại vấn đề bạn đang xử lý).

Lưu ý: Tôi là một trong những nhà phát triển của dự án này.

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.