Tối đa hóa toàn cầu của chức năng mục tiêu đắt tiền


12

Tôi quan tâm đến việc tối đa hóa toàn cầu một chức năng của nhiều ( ) tham số thực (kết quả của một mô phỏng phức tạp). Tuy nhiên, chức năng được đề cập là tương đối tốn kém để đánh giá, cần khoảng 2 ngày cho mỗi bộ tham số. Tôi đang so sánh các lựa chọn khác nhau, và tự hỏi nếu có ai có đề xuất.30

Tôi biết có một bộ phương pháp cho loại quy trình này liên quan đến việc phát triển các hàm gần đúng và sau đó tối đa hóa các hàm đó (ví dụ Jones và cộng sự "Tối ưu hóa toàn cầu hiệu quả các hàm hộp đen đắt tiền" ). Tuy nhiên, điều này dường như tương đối liên quan đến mã.

Tôi có khả năng chạy song song một số lượng lớn các mô phỏng (50+). Điều này dường như gợi ý sử dụng một cái gì đó như thuật toán di truyền để thực hiện tối ưu hóa này - vì tôi có thể tạo ra một quần thể các giải pháp ứng cử viên nhanh nhất có thể.

Dưới đây là câu hỏi của tôi: 1) Có ai có kinh nghiệm với việc triển khai miễn phí loại giải pháp / đề xuất toàn cầu này không? 2) Có lý do nào để thích hoặc tránh các thuật toán di truyền ở đây không?

Đây là một vấn đề vật lý và các thử nghiệm ban đầu của tôi đã cho thấy con số công đức thay đổi khá suôn sẻ khi tôi thay đổi các tham số.

CẬP NHẬT:

Cảm ơn bạn vì sự giúp đỡ! Một vài chi tiết nữa: Tôi không cần bất kỳ thông tin nào ngoài vị trí tối đa. Mô phỏng mang tính quyết định, không phải Monte Carlo, do đó, sự phức tạp không phải là vấn đề lớn. Không có giới hạn rõ ràng hoặc ràng buộc về các tham số. Một thông tin khác mà tôi có (và không đề cập trước đây) là ý thức về kích thước tối đa cần thiết. Trong khi tôi đang tìm kiếm một mức tối đa toàn cầu, tôi cũng sẽ hài lòng với bất kỳ thứ gì có quy mô này hoặc lớn hơn - tôi không biết liệu điều này có cung cấp bất kỳ trợ giúp nào không. Hy vọng rằng nếu tôi thực hiện sàng lọc một cách có hệ thống hơn (siêu âm Latin theo đề xuất của Brian Borchers), điều này sẽ hiển thị.


Khi bạn đánh giá hàm mục tiêu, nó có tạo ra bất kỳ thông tin bổ sung nào không, đặc biệt. đạo hàm (hoặc xấp xỉ) đối với tham số? Vì hàm mục tiêu tự nó rất tốn kém để tính toán, nên có thể các tính toán như vậy cần được vắt sữa để lấy thông tin bổ sung.
hardmath

(Một năm sau), cuối cùng bạn đã làm gì - thay đổi một vài trong số 30 tham số, mô hình ...?
chối

denis: Tôi đã có thể sử dụng một số trực giác vật lý (và may mắn) để đoán các thông số quan trọng nhất, và sau đó thay đổi chúng để có được kết quả "đủ tốt". (Trong trường hợp này, việc tìm kiếm tối ưu chính xác không quan trọng bằng tìm câu trả lời đủ lớn.) Tôi cuối cùng không cần toàn bộ sức mạnh của các kỹ thuật này, nhưng thật tốt khi sử dụng chúng.
AJK

Cấp điều này là 2 năm rưỡi trước, nhưng bạn có lựa chọn mức độ chính xác trong đánh giá chức năng mục tiêu của mình (mô phỏng xác định) và có thể đánh đổi độ chính xác so với thời gian chạy không?
Mark L. Stone

Câu trả lời:


11

Các thuật toán di truyền là một lựa chọn rất kém khi hàm mục tiêu cực kỳ tốn kém để đánh giá - các phương pháp này đòi hỏi rất nhiều đánh giá chức năng trong mỗi thế hệ (mà sự song song có thể giúp) và rất nhiều thế hệ (vốn là tuần tự.) mỗi thế hệ, điều này sẽ rất chậm.

Bạn đã không đề cập đến vấn đề này đến từ đâu. Bạn đang phân tích thống kê một bề mặt khả năng (trong trường hợp đó bạn sẽ muốn nhiều hơn chỉ là các tham số tối ưu và giá trị mục tiêu) hay chỉ tối ưu hóa một hàm mục tiêu?

Bạn chưa đề cập đến việc tính toán hàm mục tiêu là chính xác hay không chính xác. Thông thường, khi hàm mục tiêu được tính toán bằng mô phỏng Monte Carlo, các giá trị khá nhiễu. Điều này có thể đánh lừa nhiều thuật toán tối ưu hóa. Phương pháp đáp ứng bề mặt giúp giải quyết vấn đề này bằng cách làm giảm tiếng ồn.

Bạn đã không đề cập đến bất kỳ ràng buộc về các tham số. Họ có bị ràng buộc không? Có các ràng buộc tuyến tính hoặc phi tuyến giữa các tham số?

Rất có thể là hầu hết 30 thông số của bạn không thực sự quan trọng đối với vấn đề. Tôi sẽ đề nghị sử dụng phương pháp sàng lọc thiết kế thử nghiệm để xác định trước trong số 30 tham số nào thực sự quan trọng trong tối ưu hóa, và sau đó sau khi đặt giá trị hợp lý cho các tham số không quan trọng tối ưu hóa các tham số quan trọng. Các phương pháp như Latin Hypercube Sampling có thể rất hữu ích trong việc sàng lọc các tham số tương đối không quan trọng. Trong giai đoạn sàng lọc này, bạn có thể dễ dàng sử dụng hàng trăm bộ xử lý.

Sau khi giảm số lượng tham số xuống kích thước hợp lý hơn, tôi sẽ sử dụng phương pháp phản hồi bề mặt để tối ưu hóa các tham số còn lại. Nếu bề mặt phản hồi thực sự là đa phương thức và bạn sử dụng mô hình bề mặt phản hồi quá đơn giản (thường là những người chỉ phù hợp với mô hình bậc hai) thì bạn có thể dễ dàng bị đánh lừa và bỏ lỡ mức tối đa toàn cầu. Hãy cẩn thận! Trong giai đoạn này, một lần nữa bạn có thể sử dụng rất nhiều bộ xử lý bằng cách sử dụng một thiết kế thử nghiệm cung cấp độ bao phủ rất tốt của không gian tham số. Tìm kiếm các điểm thiết kế nơi mô hình được trang bị cách xa các giá trị được tính toán - đây là dấu hiệu cho thấy bề mặt phản hồi không hoạt động tốt trong khu vực đó. Bạn có thể phải xây dựng các bề mặt phản hồi trong các vùng riêng biệt của không gian tham số.

Bước cuối cùng, bạn có thể bắt đầu với các tham số từ tối ưu hóa bề mặt phản hồi của mình và cố gắng cải thiện các giá trị của các tham số được sàng lọc bằng cách điều chỉnh từng tham số (phối hợp gốc).

Tôi sẽ khuyến nghị thứ hai về DAKOTA như là một khung cho loại tối ưu hóa này. Nếu bạn chỉ thực hiện việc tối ưu hóa này một lần thì việc tổ chức tính toán bằng tay sẽ dễ dàng hơn, nhưng nếu bạn sẽ thực hiện việc đó nhiều lần, thì DAKOTA sẽ rất hữu ích.


4
  1. Tôi không có bất kỳ kinh nghiệm nào với những người giải quyết này; một số đồng nghiệp của tôi đã sử dụng chúng. DAKOTA dường như là gói phần mềm được đề xuất cho các loại nhiệm vụ này. Nó bao gồm một giao diện cho phép người dùng liên tục gửi công việc đến hàng đợi gửi và sử dụng đầu ra cho các nghiên cứu tham số, phân tích độ nhạy, v.v. Tôi không đủ quen thuộc với nó để biết liệu nó có tận dụng việc chạy nhiều mô phỏng hay không đồng thời.

  2. Giả sử rằng các tham số của bạn là liên tục, nếu con số công đức thay đổi suôn sẻ khi tham số thay đổi, thì một mô hình thay thế sẽ thực hiện công việc hợp lý để phù hợp với công đức và thông tin phái sinh thay thế sẽ hữu ích cho việc tinh chỉnh hội tụ. Đối với 30 tham số, các phương pháp tối ưu hóa không có đạo hàm xác định cũng sẽ hữu ích; Có một lần nữa, sự trơn tru sẽ giúp. Ngược lại, các thuật toán di truyền hoàn toàn không sử dụng thông tin phái sinh và thường yêu cầu điều chỉnh các tham số như tốc độ đột biến, tốc độ tái tổ hợp và các tham số lựa chọn để đạt được hiệu suất tốt. Là một lựa chọn thuật toán, tôi sử dụng thuật toán di truyền như một dự phòng, bởi vì tôi mong đợi một tối ưu hóa thay thế được thiết kế tốt hoặc một phương pháp tối ưu hóa không có đạo hàm xác định để có hành vi hội tụ tốt hơn.


Một vài lý do mà sử dụng phương pháp tối ưu hóa không có đạo hàm xác định có thể không khôn ngoan. Đầu tiên, đây là các phương pháp tìm kiếm cục bộ có thể sẽ tìm thấy một cực đại cục bộ và thiếu một điểm tốt hơn nhiều ở nơi khác trong không gian tham số. Thứ hai, các phương thức này thường yêu cầu rất nhiều lần lặp với các đánh giá chức năng tương đối ít trên mỗi lần lặp, vì vậy chúng không song song tốt.
Brian Borchers

Bạn nói đúng về phương pháp tìm kiếm địa phương. Có các phương pháp tìm kiếm toàn cầu (TRỰC TIẾP, tìm kiếm tọa độ chi nhánh và liên kết, đa cấp) không xây dựng các mô hình thay thế và nên hoạt động tốt hơn các phương pháp tìm kiếm cục bộ. Tôi không thể nói đến hiệu quả của việc song song hóa các phương pháp này.
Geoff Oxberry

1

Hãy xem TOMLAB, DAKOTA và OpenMDAO để tối ưu hóa hộp đen.


Chỉnh sửa # 3: Tối ưu hóa Bayes rất giống với EGO:

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

giấy phép hạn chế:

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


Chỉnh sửa # 2:

Cách tiếp cận đầu tiên là xây dựng một metamodel / surrogate (sử dụng kriging / GP) xung quanh chức năng đắt tiền và sử dụng thông tin bổ sung này để tìm điểm tối ưu toàn cầu nhanh hơn và có ít đánh giá hơn (EGO).

Cách tiếp cận thứ hai như trong MDAS, là thực hiện tìm kiếm trực tiếp với một số điều chỉnh thông minh ở nhiều cấp độ.

Phương pháp tiếp cận heuristic là di truyền / ngẫu nhiên trong tự nhiên và không có bất kỳ đảm bảo.


Chỉnh sửa số 1:

TOMLAB là công cụ dựa trên MATLAB có tốc độ / chất lượng tối ưu hóa tốt nhất theo bài báo của Sahinidis. Nhưng đây là công cụ thương mại với việc sử dụng đáng kể của công ty. Tôi không sử dụng cái này.

DAKOTA được điều chỉnh phù hợp hơn cho Định lượng không chắc chắn, bên cạnh tối ưu hóa chung. Dựa trên c ++ và một số mã Fortran cũ. Mặc dù theo giấy phép LGPL và các tệp nhị phân có sẵn để tải xuống, rất khó để biên dịch lại ít nhất từ ​​kinh nghiệm của tôi trên Win7 với GCC hoặc MSVS / ifort. Có sự phụ thuộc vào boost, lapack, cmake để xây dựng. Về cơ bản, đây là một trình bao bọc cho nhiều người giải quyết nguồn mở và một vài người thương mại. Đây là sản phẩm SNL và được tích hợp chặt chẽ với các dự án khác từ Sandia NL. Tôi đã có thể tích hợp thành công cái này thay vì một số thói quen của IMSL. Bài báo của Sahinidis đã bỏ lỡ sự song song lớn có thể có với DAKOTA.

OpenMDAO là phần mềm thiết kế dựa trên tối ưu hóa được phát triển bằng Python bởi NASA theo Giấy phép APACHE. Tôi đang thử điều này hiện tại.


Chào mừng đến với SciComp! Như hiện tại được viết, bài đăng của bạn không thực sự giải thích tại sao nhìn vào TOMLAB hoặc OpenMDAO sẽ là một ý tưởng tốt (các câu trả lời khác đã thảo luận về DAKOTA). Chúng tôi đang tìm kiếm câu trả lời không chỉ cung cấp các khuyến nghị mà còn thảo luận về lý do tại sao những đề xuất đó hữu ích, những cạm bẫy tiềm ẩn, v.v.
Geoff Oxberry

Tôi vội vàng với câu trả lời của mình trước và bây giờ tôi đã thêm lời giải thích.
denfromufa

0

Nếu bạn không đủ khả năng 30 lần chạy, mỗi lần thay đổi một tham số, thay đổi chúng theo nhóm:
ví dụ: 8 lần chạy mỗi tham số khác nhau 4 thông số, sau đó tinh chỉnh 2 lần chạy / 8 tham số tốt nhất ...
(Tôi không biết làm cách nào để đánh đổi thông tin đạt được so với tổng thời gian chạy; tên cướp đa vũ trang ?)


-3

Đây là một cho phép tối ưu hóa hiệu quả các chức năng hộp đen đắt tiền bằng cách sử dụng CPU đa lõi.

Một mô tả về toán học đằng sau mã được đưa ra ở đây .


1
Đây là cùng một câu trả lời bạn cung cấp trong bài viết này . Ngoài ra, có vẻ như đây là công việc của riêng bạn. Nếu đó là sự thật, xin vui lòng nêu rõ điều đó trong câu trả lời của bạn.
nicoguaro

Bạn có thể cung cấp chi tiết về cách tiếp cận được mô tả trong bài báo và thực hiện trong phần mềm không? Phương pháp được sử dụng là gì? Tại sao nó lại tốt? Điều gì được cung cấp trong phương pháp này mà các câu trả lời khác không bao gồm?
nicoguaro

1
Ngoài ra, vui lòng đề cập rằng bạn là tác giả của phần mềm này , vì vậy bất kỳ ai đọc phần này cũng sẽ biết rằng bạn a) biết những gì bạn đang nói và b) có thể là một phần.
Christian Clason
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.