Tôi quyết định chỉnh sửa triệt để câu trả lời của mình dựa trên một số ý kiến.
Tôi chưa sử dụng TAO. Từ việc đọc tài liệu, có vẻ như cách duy nhất mà TAO có thể xử lý các vấn đề tối ưu hóa bị ràng buộc (không bao gồm trường hợp đặc biệt chỉ có ràng buộc hộp) là chuyển vấn đề thành bất đẳng thức thay đổi bằng các điều kiện Karush-Kuhn-Tucker (KKT) , trong đó là cần thiết trong điều kiện ràng buộc (loại mà tôi thường thấy là điều kiện điểm Slater ) và đủ dưới độ lồi của mục tiêu và các ràng buộc (nói chung hơn, tính vô hình của Loại 1). Nếuflà không xác định, công thức bất đẳng thức thay đổi sử dụng các điều kiện KKT KHÔNG tương đương với vấn đề tối ưu hóa ban đầu, vì vậy, nói đúng ra, nếu bạn muốn tối ưu toàn cầu cho vấn đề tối ưu hóa, bạn không nên biểu thị nó như một bất đẳng thức đa dạng. Dù sao, rất khó để tìm thấy một tối ưu toàn cầu cho tối ưu hóa bị ràng buộc bởi PDE (xem bên dưới), vì vậy có thể bỏ qua chi tiết này là tốt. Với những gì Wolfgang đã nói, tôi sẽ nghi ngờ về việc sử dụng TAO; Tôi đã hoài nghi vì nó không triển khai các phương pháp để giải các chương trình phi tuyến (NLP) dưới dạng NLP, thay vì các bất đẳng thức khác nhau.
Tôi không phải là một chuyên gia về tối ưu hóa bị hạn chế PDE; đồng nghiệp và cộng sự của tôi làm việc về các vấn đề tối ưu hóa bị ràng buộc bởi ODE. Tôi biết rằng đối với các công thức xâm nhập, Larry Biegler (và những người khác) sẽ sử dụng các phương pháp sắp xếp thứ tự để phân biệt PDE và biến nó thành một NLP rất lớn, thưa thớt, và sau đó anh ta sẽ giải quyết nó bằng các phương pháp điểm bên trong. Để thực sự giải quyết vấn đề theo sự tối ưu toàn cầu, bạn cũng cần tạo ra các thư giãn lồi, nhưng theo tôi biết, cách tiếp cận này không được thực hiện vì các vấn đề tối ưu hóa bị hạn chế PDE dẫn đến các NLP lớn đến mức khó có thể giải quyết chúng sự lạc quan toàn cầu. Tôi chỉ đề cập đến những chi tiết này bởi vì việc xây dựng vấn đề ảnh hưởng lớn đến sự lựa chọn gói giải. Đối với các công thức không xâm lấn, PDE lặp đi lặp lại sẽ giải quyết thông tin độ dốc cho các thuật toán tối ưu hóa.
Một số người nghiên cứu các vấn đề tối ưu hóa bị ràng buộc bởi ODE sử dụng một cách tiếp cận tương tự để giải quyết vấn đề bằng cách sử dụng sắp xếp thứ tự và phương pháp số, sau đó thư giãn NLP kết quả để đưa ra công thức lồi được sử dụng trong thuật toán tối ưu hóa toàn cầu. Một cách tiếp cận khác để tối ưu hóa bị ràng buộc bởi ODE là để giải quyết vấn đề và sau đó phân biệt ODE, đây là cách tiếp cận được thực hiện trong phòng thí nghiệm của tôi. Có thể thư giãn một số loại vấn đề tối ưu hóa bị ràng buộc bởi PDE, nhưng tôi không biết về bất kỳ công việc còn tồn tại nào được thực hiện cho vấn đề đó. (Đó là một dự án tiềm năng trong phòng thí nghiệm của tôi tại một thời điểm.)
Cuối cùng, điều quan trọng không phải là sự khác biệt của PDE ban đầu, mà là sự khác biệt của sự rời rạc đối với các biến quyết định.
Nếu vấn đề rời rạc có thể phân biệt hai lần đối với các biến quyết định, các gói sau sẽ tính toán một giải pháp cục bộ:
- IPOPT là một bộ giải điểm nội bộ nguồn mở được phát triển bởi Andreas Wächter tại IBM. Đó là một mã chất lượng rất cao. Là một bộ giải điểm bên trong, tốt hơn cho các hàm mục tiêu với ma trận Jacobian lớn, thưa thớt và sẽ hữu ích cho tối ưu hóa bị ràng buộc bởi PDE
- SNOPT là một bộ giải lập trình bậc hai tuần tự thương mại là một mã chất lượng cao khác. Sẽ tốt hơn cho các hàm mục tiêu với ma trận Jacobian nhỏ, dày đặc, vì vậy tôi không hy vọng nó sẽ hữu ích cho tối ưu hóa bị ràng buộc bởi PDE, nhưng bạn có thể thử.
- NLopt là một mã nguồn mở nhỏ, được viết bởi Steven Johnson tại MIT, chứa các triển khai cơ bản của một số thuật toán tối ưu hóa phi tuyến. Tất cả các thuật toán phải phù hợp để giải quyết các vấn đề bị ràng buộc.
fmincon
trong Matlab thực hiện một số thuật toán (bao gồm cả điểm bên trong và lập trình bậc hai tuần tự) để tối ưu hóa phi tuyến
- GAMS và ampl là cả hai ngôn ngữ mô hình thương mại sử dụng để xây dựng các vấn đề tối ưu hóa, và chứa giao diện cho một số lượng lớn các giải quyết lập trình phi tuyến. Tôi biết rằng GAM có phiên bản dùng thử có thể được sử dụng cho các sự cố nhỏ hơn và các trường hợp sự cố cũng có thể được gửi đến máy chủ NEOS để tìm giải pháp.
Tuy nhiên, có thể là sự rời rạc chỉ một lần khác biệt đối với các biến quyết định, trong trường hợp đó, bạn nên sử dụng phương pháp dốc đứng dự kiến hoặc một số phương pháp tối ưu hóa bậc nhất khác khi tính toán giải pháp cục bộ. Vì nhiều nghiên cứu tập trung vào các vấn đề có thể sử dụng các phương pháp bậc hai (và khi bạn có thể sử dụng chúng, các đặc tính hội tụ ưu việt của chúng làm cho chúng trở thành một lựa chọn tốt hơn), tôi không thể tìm thấy nhiều cách thực hiện theo phương pháp dốc nhất mà không phải là giải pháp để làm bài tập về nhà. Các Thư viện khoa học GNU có một thực hiện, nhưng nó chỉ dành cho mục đích biểu tình. Bạn có thể sẽ cần phải viết mã thực hiện của riêng bạn.
Nếu vấn đề chỉ liên tục liên quan đến các biến quyết định, thì bạn có thể sử dụng các phương pháp trực tiếp để giải quyết nó cục bộ. Có một khảo sát tuyệt vời về các phương pháp trực tiếp của Kolda, Lewis và Torczon . Các phương pháp được biết đến rộng rãi nhất là thuật toán đơn giản Nelder-Mead . Nó không được đảm bảo để hội tụ đến mức tối thiểu cục bộ trong nhiều chiều, nhưng dù sao nó cũng đã tìm thấy việc sử dụng thực tế đáng kể.
Lựa chọn gói thực sự phụ thuộc vào ngôn ngữ bạn muốn sử dụng để giải quyết vấn đề, nếu giải quyết vấn đề bị ràng buộc ràng buộc chỉ là một phần của thuật toán bạn muốn thực hiện (hoặc nếu đó là bước duy nhất trong thuật toán của bạn, trong trường hợp đó là ngôn ngữ mô hình hóa trở nên khả thi hơn cho mã sản xuất), loại và kích cỡ của vấn đề và nếu bạn cần bất kỳ sự song song nào.