Tôi đang tìm cách chạy tối ưu hóa độ dốc gốc để giảm thiểu chi phí của việc khởi tạo biến. Chương trình của tôi rất tốn kém về mặt tính toán, vì vậy tôi đang tìm kiếm một thư viện phổ biến với việc triển khai nhanh GD. Thư viện/tài liệu tham khảo được đề xuất là gì?Triển khai thực hiện độ dốc nhanh trong thư viện C++?
Trả lời
GSL là thư viện tuyệt vời (và miễn phí) đã triển khai các chức năng chung về lợi ích toán học và khoa học.
Bạn có thể xem qua toàn bộ reference manual online. Poking xung quanh, this bắt đầu trông thú vị, nhưng tôi nghĩ rằng chúng ta sẽ cần phải biết thêm về vấn đề này.
Các thuật toán thay thế được liệt kê trong tham chiếu GSL là các phương pháp gradient liên hợp/biconjugate, và sẽ cho hiệu suất tốt hơn so với gốc dốc miễn là dữ liệu của bạn được "cư xử tốt". –
Và nếu bạn đang tính số lượng các dẫn xuất của bạn từ các giá trị hàm thì bạn có thể muốn thay thế này: http://www.gnu.org/software/gsl/manual/html_node/Multimin-Algorithms-without-Dericies.html –
Điều này trông giống như một câu trả lời thực sự tốt, nhưng tôi đang có một thời gian thực sự khó khăn nhận được điều này đi với VS2010 (cầu kỳ, tôi biết ...) – Jim
Hãy thử CPLEX được cung cấp miễn phí cho sinh viên.
Một trong những thư viện được kính trọng nhất cho loại công việc tối ưu hóa này là NAG libraries. Chúng được sử dụng trên toàn thế giới trong các trường đại học và công nghiệp. Chúng có sẵn cho C/FORTRAN. Chúng rất không miễn phí và chứa đựng nhiều chức năng hơn là các chức năng giảm thiểu - Rất nhiều toán học toán học tổng quát được đề cập đến.
Dù sao tôi nghi ngờ thư viện này quá mức cần thiết cho những gì bạn cần. Nhưng đây là những phần liên quan đến việc giảm thiểu: Local Minimisation và Global Minimization.
Thư viện này cũng có vẻ thực sự tốt, nhưng phần "rất không tự do" khiến tôi hơi lo lắng khi sử dụng nó – Jim
Có vẻ như bạn đang khá mới đối với các phương pháp giảm thiểu. Bất cứ khi nào tôi cần tìm hiểu một bộ phương pháp số mới, tôi thường xem trong Numerical Recipes. Đó là một cuốn sách cung cấp một cái nhìn tổng quan tốt đẹp của các phương pháp phổ biến nhất trong lĩnh vực này, sự cân bằng của họ, và (quan trọng) nơi để tìm trong các tài liệu để biết thêm thông tin. Nó thường không phải là nơi tôi dừng lại, nhưng nó thường là một điểm khởi đầu hữu ích.
Ví dụ: nếu chức năng của bạn tốn kém, thì mục tiêu của bạn là giảm thiểu số lượng đánh giá cần phải hội tụ. Nếu bạn có các biểu thức phân tích cho gradient, thì một phương thức dựa trên gradient có thể sẽ làm việc với lợi thế của bạn, giả sử rằng hàm và gradient của nó là hành vi tốt (thiếu số ít) trong miền quan tâm.
Nếu bạn không có độ phân tích, thì bạn hầu như luôn sử dụng cách tiếp cận như downhill simplex chỉ đánh giá hàm (không phải là độ dốc). Các gradient số là đắt tiền.
Cũng lưu ý rằng tất cả các cách tiếp cận này sẽ hội tụ với minima địa phương, vì vậy chúng khá nhạy cảm với điểm mà lúc đầu bạn bắt đầu trình tối ưu hóa. Tối ưu hóa toàn cầu là một con thú hoàn toàn khác.
Là tư tưởng cuối cùng, hầu như tất cả mã bạn có thể tìm để giảm thiểu sẽ có hiệu quả hợp lý. Chi phí thực tế của việc giảm thiểu là trong hàm chi phí. Bạn nên dành thời gian lược tả và tối ưu hóa chức năng chi phí của bạn, và chọn một thuật toán sẽ giảm thiểu số lần bạn cần gọi nó (các phương thức như downhill simplex, gradient liên hợp, và BFGS tất cả tỏa sáng trên các loại vấn đề khác nhau).
Về mặt mã thực tế, bạn có thể tìm thấy nhiều thói quen tốt đẹp tại NETLIB, ngoài các thư viện khác đã được đề cập. Hầu hết các thói quen đều ở FORTRAN 77, nhưng không phải tất cả; để chuyển đổi chúng thành C, f2c là khá hữu ích.
Một lưu ý bổ sung về việc sử dụng các chức năng fortran là thường khá dễ dàng liên kết mã C và fortran với nhau. Đặc biệt là các thư viện fortran được cấu trúc tốt. –
- 1. Thư viện cho cây tăng cường độ dốc
- 2. mỗi triển khai trong thư viện underscore.js
- 3. Thực hiện nhanh MD5 trong C++
- 4. Thư viện để thực hiện RSA trong C
- 5. Thực hiện nhanh/xấp xỉ hàm pow() trong C/C++
- 6. Việc triển khai thay đổi mảng nhanh trong C#?
- 7. Tính toán nhanh độ dốc của hình ảnh trong MATLAB
- 8. CoffeeScript, triển khai 'thực hiện'
- 9. thực hiện nhanh, sạch, C, timsort?
- 10. Cách nhanh để thực hiện chuyển đổi 2D trong C
- 11. Thư viện hình ảnh Python (PIL) Vẽ - Hình chữ nhật tròn với độ dốc
- 12. Triển khai thực hiện tùy chỉnh
- 13. Lỗi triển khai thực hiện metaphone PHP
- 14. Việc triển khai biến đổi Fourier nhanh (FFT) trong C#
- 15. Thư viện C++ để xây dựng đường dẫn thực hiện
- 16. triển khai logumexp trong C?
- 17. Tìm thư viện java đã triển khai Cây nhị phân
- 18. Cách chức năng thư viện trong Haskell được thực hiện
- 19. MQTT messageId triển khai thực hiện
- 20. Thư viện bên ngoài để triển khai con la
- 21. Triển khai Math.round nhanh hơn?
- 22. Có một std null :: ostream thực hiện trong C + + hoặc thư viện?
- 23. Thư viện mã hóa JPEG nhanh
- 24. Thư viện nhận dạng giọng nói nhanh nhất C++
- 25. Có triển khai thực hiện máy chủ OAuth nút
- 26. Triển khai thư viện chuẩn C++ trong các trình biên dịch khác nhau
- 27. Có triển khai thực hiện radixsort tốt cho phao nổi trong C#
- 28. Triển khai Grails - Cách nhanh nhất để được triển khai?
- 29. Triển khai mã MATLAB trong C++?
- 30. Thư viện chia tách PDF nhanh
Điều gì sẽ là _fast_? Không chính xác? Câu trả lời được lưu trong bộ nhớ cache cho các truy vấn trước đó? Hoặc một số loại tiêu chí khác? – sarnold
@sarnold True. Không chính xác là ổn, tôi không cần phải đạt mức tối ưu toàn cầu.Tôi chỉ muốn một cái gì đó có thể nhanh chóng đạt được kết quả tốt hơn so với tìm kiếm ngẫu nhiên :) Tôi muốn chơi với thời gian tôi cho phép nó chạy để xem thời gian/cải tiến cân bằng. – Jim
Tại sao triển khai của bạn chậm? – Jacob