Như Paul tuyên bố, không có thêm thông tin, thật khó để đưa ra lời khuyên mà không có giả định.
Với 10-20 biến và các đánh giá hàm đắt tiền, xu hướng là đề xuất các thuật toán tối ưu hóa không có đạo hàm. Tôi sẽ không đồng ý mạnh mẽ với lời khuyên của Paul: bạn thường cần một độ dốc chính xác của máy trừ khi bạn sử dụng một phương pháp đặc biệt nào đó (ví dụ, giảm độ dốc ngẫu nhiên trong học máy sẽ khai thác hình thức của mục tiêu để đưa ra hợp lý ước tính độ dốc).
Mỗi bước quasi-Newton sẽ có dạng:
H~( xk) dk= - ∇ f( xk) ,
Trong đó là một số xấp xỉ của ma trận Hessian, d k là hướng tìm kiếm, x k là giá trị của các biến quyết định tại lần lặp hiện tại, f là hàm mục tiêu của bạn và ∇ f là độ dốc của mục tiêu của bạn và các biến quyết định được cập nhật như x k + 1 = x k + α k d k , trong đó α kH~dkxkf∇ fxk + 1= xk+ αkdkαklà một kích thước bước được xác định trong một số thời trang (như tìm kiếm dòng). Bạn có thể thoát khỏi việc xấp xỉ Hessian theo một số cách nhất định và các lần lặp của bạn sẽ hội tụ, mặc dù nếu bạn sử dụng một cái gì đó như xấp xỉ sai phân hữu hạn của Hessian thông qua độ dốc chính xác, bạn có thể gặp phải các vấn đề do điều hòa không tốt. Thông thường, Hessian được xấp xỉ bằng cách sử dụng gradient (ví dụ: các phương thức loại BFGS với các cập nhật xếp hạng 1 cho Hessian).
Xấp xỉ Hessian và gradient cả hai thông qua sự khác biệt hữu hạn là một ý tưởng tồi vì một số lý do:
- bạn sẽ gặp lỗi trong gradient, vì vậy phương pháp quasi-Newton mà bạn đang áp dụng gần giống với việc tìm ra gốc của hàm gây nhiễu
- nếu các đánh giá chức năng là tốn kém và bạn đang cố gắng đánh giá một độ dốc liên quan đến các biến , thì nó sẽ khiến bạn phải trả giá cho các đánh giá hàm N trên mỗi lần lặpNN
- nếu bạn có lỗi trong gradient, bạn sẽ gặp nhiều lỗi hơn trong Hessian, đây là một vấn đề lớn về mặt điều hòa của hệ thống tuyến tính
- ... và nó sẽ cho bạn chi phí đánh giá chức năng mỗi lần lặpN2
Vì vậy, để có được một lần lặp lại tồi tệ của Newton, bạn đang thực hiện một số thứ như lên tới 420 đánh giá chức năng trong 30 phút cho mỗi lần đánh giá, điều đó có nghĩa là bạn sẽ chờ đợi một lần cho mỗi lần lặp hoặc bạn sẽ cần một cụm lớn chỉ để đánh giá chức năng. Các giải tuyến tính thực tế sẽ có 20 đến 20 ma trận (nhiều nhất là!), Vì vậy không có lý do gì để song song hóa chúng. Ví dụ, nếu bạn có thể nhận được thông tin về độ dốc, giải quyết vấn đề liên kết, thì có thể đáng giá hơn, trong trường hợp đó, có thể đáng để xem một cuốn sách như Nocedal & Wright.
Nếu bạn sẽ thực hiện nhiều đánh giá chức năng song song, thay vào đó bạn nên xem xét các phương pháp mô hình hóa thay thế hoặc tạo ra các phương pháp tìm kiếm tập hợp trước khi xem xét các phương pháp gần đúng của Newton. Các bài viết đánh giá cổ điển là của Rios và Sahinidis về các phương pháp không có nguồn gốc , được xuất bản năm 2012 và cung cấp một so sánh thực sự tốt, rộng; bài viết điểm chuẩn của More and Wild từ năm 2009; sách giáo khoa năm 2009 "Giới thiệu về tối ưu hóa miễn phí phái sinh" của Conn, Scheinberg và Vicente; và bài viết đánh giá về việc tạo các phương pháp tìm kiếm tập hợp của Kolda, Lewis và Torczon từ năm 2003.
Như đã liên kết ở trên, gói phần mềm DAKOTA sẽ triển khai một số phương thức đó và NLOPT cũng sẽ thực hiện TRỰC TIẾP và một vài phương pháp mô hình thay thế của Powell. Bạn cũng có thể xem MCS ; nó được viết bằng MATLAB, nhưng có lẽ bạn có thể chuyển việc triển khai MATLAB sang ngôn ngữ bạn chọn. Về cơ bản, DAKOTA là tập hợp các tập lệnh mà bạn có thể sử dụng để chạy mô phỏng đắt tiền và thu thập dữ liệu cho các thuật toán tối ưu hóa và NLOPT có giao diện với số lượng lớn ngôn ngữ, vì vậy lựa chọn ngôn ngữ lập trình không phải là vấn đề lớn trong việc sử dụng gói phần mềm; DAKOTA tuy nhiên phải mất một thời gian để tìm hiểu và có một lượng lớn tài liệu để sàng lọc.