Tôi muốn đề xuất một cách tiếp cận hơi khác so với các câu trả lời khác, mặc dù @barron đã gián tiếp thảo luận về điều tương tự.
Thay vì tối ưu hóa trực tiếp chức năng của bạn, tức là bằng cách đánh giá nó tại một loạt các điểm điểm (hy vọng) hội tụ đến tối ưu (cục bộ), bạn có thể sử dụng khái niệm mô hình thay thế , đó là rất phù hợp cho các vấn đề thuộc loại bạn mô tả (chi phí cao, trơn tru, giới hạn, chiều thấp tức là dưới 20 ẩn số).x1, x2, Lọ , xkngười mẫu thay thế
Cụ thể, người mẫu đại diện hoạt động bằng cách thiết lập một mô hình chức năng chức năng thực sự của bạn f ∈ R d → R . Điều quan trọng là trong khi c tất nhiên không đại diện hoàn hảo cho f , thì nó rẻ hơn rất nhiều để đánh giá.c ∈ Rd→ Rf∈ Rd→ Rcf
Vì vậy, một quá trình tối ưu hóa điển hình sẽ như sau:
- Đánh giá tại một tập hợp j điểm ban đầu x 1 , x 2 , Mạnh , x j . Lưu ý rằng các dẫn xuất là không cần thiết. Cũng lưu ý rằng những điểm này phải được phân phối đồng đều trong không gian tìm kiếm, ví dụ như Latin Hypercube Sampling hoặc một thiết kế lấp đầy không gian tương tự.fjx1, x2, Lọ , xj
- Dựa trên tập dữ liệu gốc này, tạo một hàm mô hình . Bạn có thể sử dụng xác thực chéo để xác thực mô hình của mình (nghĩa là chỉ sử dụng một tập hợp con của các điểm j ban đầu để tạo c , sau đó sử dụng phần còn lại của tập dữ liệu để kiểm tra xem c dự đoán các giá trị đó như thế nào )cjcc
- Sử dụng một tiêu chí như tiêu chí Cải thiện dự kiến (EI) để tìm ra nơi '' điền vào 'nhiều mẫu hơn để làm cho chính xác hơn bằng cách lấy mẫu f . Điều này thực sự được nghiên cứu tốt hơn về mặt lý thuyết so với vẻ ngoài của nó, và tiêu chí EI được nghiên cứu rất kỹ. Tiêu chí EI cũng không phải là một tiêu chí tham lam, vì vậy cả hai bạn đều có được sự cải thiện tổng thể tốt về độ chính xác của mô hình, trong khi ưu tiên độ chính xác gần tối ưu tiềm năng.cf
- Nếu mô hình của bạn không đủ chính xác, hãy lặp lại bước 3, nếu không, hãy sử dụng thói quen tối ưu hóa yêu thích của bạn để tìm ra mức tối ưu của , sẽ rất rẻ để đánh giá (vì vậy bạn có thể sử dụng bất kỳ thói quen nào bạn muốn, ngay cả những thói quen cần dẫn xuất hoặc đơn giản đánh giá chức năng trong một lưới tốt).c
Nói chung, đây là ý nghĩa của EGO, Tối ưu hóa toàn cầu hiệu quả, như @barron đề xuất. Tôi muốn nhấn mạnh rằng đối với ứng dụng của bạn, điều này có vẻ hoàn toàn phù hợp - bạn có được một mô hình chính xác đáng ngạc nhiên dựa trên tương đối ít đánh giá của , và sau đó có thể sử dụng bất kỳ thuật toán tối ưu hóa nào bạn muốn. Điều thường cũng thú vị là bây giờ bạn có thể đánh giá c trên một lưới và vẽ đồ thị, từ đó hiểu rõ hơn về diện mạo chung của f . Một điểm thú vị khác là hầu hết các kỹ thuật mô hình thay thế cũng cung cấp các ước tính lỗi thống kê, do đó cho phép ước tính độ không đảm bảo.fcf
Làm thế nào để xây dựng tất nhiên là một câu hỏi mở, nhưng thường sử dụng Kriging hay còn gọi là mô hình ánh xạ không gian.c
Tất nhiên, đây là tất cả khá nhiều công việc mã hóa, nhưng rất nhiều người khác đã thực hiện rất tốt. Trong Matlab, tôi chỉ biết hộp công cụ phần mềm DACE DACE là miễn phí. TOMLAB cũng có thể cung cấp gói Matlab, nhưng tốn tiền - tuy nhiên, tôi tin rằng nó cũng hoạt động trong C ++ và có nhiều khả năng hơn DACE từng có. (Lưu ý: Tôi là một trong những nhà phát triển phiên bản DACE mới, sắp được phát hành, sẽ cung cấp hỗ trợ bổ sung cho EGO.)
Hy vọng rằng tổng quan sơ bộ này đã giúp bạn, vui lòng đặt câu hỏi nếu có những điểm có thể được làm rõ hơn hoặc những thứ tôi đã bỏ lỡ, hoặc nếu bạn muốn có thêm tài liệu về chủ đề này.