Gói phần mềm để tối ưu hóa bị hạn chế?


21

Tôi đang tìm cách giải quyết vấn đề tối ưu hóa bị ràng buộc trong đó tôi biết giới hạn của một số biến (cụ thể là ràng buộc đóng hộp).

argminuf(u,x)

tùy thuộc vào

c(u,x)=0
ad(u,x)b

Trong đó u là một vectơ của các biến thiết kế, x là vectơ của các biến trạng thái và c(u,x) là một ràng buộc đẳng thức (thường là PDE). Các ràng buộc dưới và trên ab có thể thay đổi theo không gian.

Những gói nào có thể xử lý các hệ thống của hình thức này?


1
Phiên bản chỉnh sửa trông không giống như một vấn đề tối ưu hóa bị ràng buộc trong hộp. Một vấn đề tối ưu hóa bị ràng buộc trong hộp sẽ có aub là một ràng buộc. Là u coi là một chức năng của x ? Là c tuyến tính trong u ? Nếu không, nó có thể phân biệt hai lần? Là f lồi trong u ? Là nó hai lần khác biệt trong u ? Cuối cùng, argminu biểu thị tập hợp các điểm trong u mà tại đó giá trị nhỏ nhất của f được thành tựu. Ý bạn là minu thay vào đó?
Geoff Oxberry

d(u,x)=u là một trường hợp đặc biệt, nhưng hình thức tổng quát hơn này thực sự phổ biến trong thực tế. Bạn luôn có thể giới thiệu các biến phụ nếu phương thức của bạn chỉ có thể xử lý các ràng buộc trực tiếp trên u . Chúng ta thường quan tâm nhiều hơn đến giá trị u mà tại đó đạt được mức tối thiểu so với giá trị tối thiểu của f . Sean đã thêm thẻ [pde], vì vậy bạn có thể nhận được một số tính thường xuyên từ đó. Anh ta không nói rõ hệ thống có cường điệu hay không, vì vậy chúng ta đừng giả sử. Chúng ta đừng cho rằng f là lồi, vì nó thường không.
Jed Brown

Nó khá phổ biến đối với f liên quan đến chính quy hóa L1 hoặc W1,1 , vì vậy chúng ta không nên giả sử hai dẫn xuất.
Jed Brown

@JedBrown: Điều đó có ý nghĩa; thật khó hiểu khi thấy "ràng buộc hộp" được đề cập mà không có ràng buộc hộp rõ ràng. Đối với các loại vấn đề bạn đang nói đến (vấn đề thiết kế, vấn đề kiểm soát), u chắc chắn thú vị hơn, nhưng vấn đề tối ưu hóa thường được nêu bằng cách sử dụng ký hiệu min và các bộ giải pháp của chúng được mô tả bằng ký hiệu argmin .
Geoff Oxberry

Có thể hữu ích khi chỉ định ngôn ngữ / môi trường mà bạn mô hình hóa các PDE. Nó có thể hạn chế sự lựa chọn tối ưu hóa.
Dominique

Câu trả lời:


18

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
  • GAMSampl 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.


4

Chúng tôi đã thử TAO nhưng thấy nó không hữu ích cho các vấn đề ràng buộc bất bình đẳng. Về cơ bản, nó cũng chỉ ở chế độ bảo trì ít nhất là năm 2003, không có tính năng mới thực sự ngoài các bản cập nhật để theo dõi các thay đổi trong PETSc mà nó được xây dựng.


3

Một cách khác là OPT ++ . Nó hỗ trợ các ràng buộc tuyến tính và phi tuyến với bộ giải điểm bên trong phi tuyến hiệu quả, cung cấp điều khiển cho độ chính xác của chức năng (nếu cần phân biệt số), kiểm soát kích thước bước, v.v. Tôi thường tối ưu hóa các hàm ẩn lớn (ví dụ FEM) trong đó các loại này điều khiển có thể hữu ích.


Bạn có thể giải thích lý do tại sao OPT ++ là một gói tốt để sử dụng? Bạn (hoặc đồng nghiệp của bạn) có bất kỳ kinh nghiệm với nó?
Geoff Oxberry

Để rõ ràng, tôi không có lý do gì để nói rằng OPT ++ vượt trội hơn bất kỳ ứng dụng nào bạn đã liệt kê trước đây vì tôi không có bất kỳ kinh nghiệm nào với chúng (mặc dù tôi đã đánh dấu một vài trong số chúng để kiểm tra). Nhưng tôi có kinh nghiệm với OPT ++ và đã tìm thấy nó phù hợp với nhu cầu của tôi. Nó hỗ trợ các ràng buộc tuyến tính và phi tuyến với bộ giải điểm bên trong phi tuyến hiệu quả, cung cấp điều khiển cho độ chính xác của chức năng (nếu cần phân biệt số), kiểm soát kích thước bước, v.v. Tôi thường tối ưu hóa các hàm ẩn lớn (ví dụ FEM) trong đó các loại này điều khiển có thể hữu ích.
Barron

2
@Barron: bạn nên đặt nó trong câu trả lời của bạn để bắt đầu. :)
JM

2

Nếu sự cố được coi là vấn đề bổ sung, bạn có thể sử dụng TAO (Bộ công cụ để tối ưu hóa nâng cao). Một số phương thức trong TAO, chẳng hạn như phương thức không gian giảm (một biến thể của phương thức thiết lập hoạt động), hiện có sẵn như là một phần của SNES trong PETSc ( SNESVI ).


1

Các PHÚT mô-đun của CERNLIB (dài kể từ khi chuyển đến ROOT ) sử dụng một chuyển đổi trên không gian đầu vào để render ép hộp vào một không gian nơi họ chạy và do đó có thể bị xử lý mà không trường hợp đặc biệt (với chi phí của một số tốc độ, tất nhiên).[,+]

Tôi không nghĩ rằng MINUTE sẽ hoạt động tốt cho nhu cầu của bạn, nhưng việc chuyển đổi có thể nếu bạn buộc phải tự viết một số hoặc tất cả mã.


Sự biến đổi đó có vẻ khó chịu; không có gì ngạc nhiên khi nó đi kèm với một vài đoạn.
Geoff Oxberry

1

Như @Geoff Oxberry đã chỉ ra, một số gói cho phép bạn tìm một giải pháp địa phương. Nếu bạn muốn có thể so sánh các bộ giải NLP khác nhau này cho cùng một vấ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 NLP (ví dụ Ipopt, NAG). 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/

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


1
Nên chỉ ra rằng các câu trả lời khác mô tả người giải quyết , không phải khung. Dễ dàng tìm thấy một khung ( trình điều khiển ) dễ chấp nhận hơn một người giải quyết tốt,
Deer Hunter

@DeerHunter Khi bạn đang tìm kiếm một người giải để giải quyết một vấn đề nhất định, thường rất khó để biết một tiên nghiệm mà người giải sẽ tính toán giải pháp tốt nhất và / hoặc là nhanh nhất. Bạn đang nói về một "người giải quyết tốt", nhưng điều này thực sự phụ thuộc vào những gì bạn đang giải quyết: không có một người giải quyết "tổng thể tốt nhất". Hơn nữa, API bộ giải thường khá khác nhau, vì vậy sử dụng một khung công tác tốt cho phép bạn dễ dàng chuyển đổi từ bộ giải này sang bộ giải khác có thể thực sự hữu ích. Câu hỏi là về "các gói phần mềm để tối ưu hóa bị ràng buộc" và các khung cũng thuộc loại này.
BenC

1

Dưới đây là danh sách một phần các gói tối ưu hóa bị ràng buộc PDE.

Dolfin Adjoint là một phần của FEniCS FEM:

http://dolfin-adjoint.org/

ROL, MOOCHO, Sundance là một phần của Trilinos:

https://github.com/trilinos/trilinos/tree/master/packages/rol/

https://github.com/trilinos/trilinos/tree/master/packages/Sundance/

http://trilinos.org/packages/moocho/

Ví dụ PYOMO để tối ưu hóa ràng buộc PDE:

https://software.sandia.gov/trac/pyomo/browser/pyomo/trunk/examples/dae

Hướng dẫn TAO đưa ra các ví dụ về giải quyết các vấn đề tối ưu hóa bị ràng buộc bởi PDE:

http://www.mcs.anl.gov/petsc/petsc-3.5/docs/tao_manual.pdf


1
Chào mừng bạn đến với SciComp.SE! Chỉ cung cấp một liên kết (hữu ích vì nó có thể) không thực sự là một câu trả lời tốt; xem meta.stackexchange.com/questions/8231 . Bạn có thể mở rộng về điều này một chút (ngôn ngữ điện toán, loại ràng buộc nào có thể được xử lý, phương pháp nào được thực hiện, v.v.) không?
Christian Clason

Tôi đồng ý với @ChristianClason. Đã có sự phát triển đáng kể trong các bộ giải cho phần mềm tối ưu hóa bị ràng buộc bởi PDE; tuy nhiên, câu trả lời này về cơ bản không có nền tảng về những thuật toán mà các gói đó thực sự thực hiện.
Geoff Oxberry

0

Các gói APM MATLAB và APM Python có thể giải quyết các hệ thống phương trình đại số vi phân hỗn hợp quy mô lớn (100.000+ biến). Phần mềm có sẵn như là một dịch vụ web cho mục đích thương mại hoặc học tập. Nếu bạn đang giải quyết một hệ thống PDE, bạn có thể rời rạc một lần để đưa nó vào dạng DAE hoặc ODE để đưa nó vào ngôn ngữ mô hình hóa APMonitor. Ngôn ngữ lập mô hình sử dụng các bộ giải APOPT , BPOPT, IPOPT, SNOPT và MINOS.


1
Vui lòng tiết lộ liên kết của bạn với tư cách là nhà phát triển APMonitor trong câu trả lời này và trong tương lai có đề cập đến phần mềm của bạn. Xem Câu hỏi thường gặp để biết chi tiết về chính sách công bố thông tin của chúng tôi.
Geoff Oxberry

Geoff, cảm ơn vì tiền boa. Tôi bắt đầu làm việc trên nền tảng APMonitor vào năm 2004 khi còn là sinh viên tốt nghiệp tại Đại học Texas ở Austin. Bây giờ chúng tôi sử dụng nó trong nhóm nghiên cứu của chúng tôi tại Đại học Brigham Young để kiểm soát và tối ưu hóa quy trình ( apm.byu.edu/prism ) về sinh học, hóa học, hàng không vũ trụ và các ứng dụng khác. Tôi làm cho nó miễn phí có sẵn cho người dùng thương mại hoặc học tập.
John Hedengren
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.