Hướng dẫn multivariable optimization in python - tối ưu hóa đa biến trong python
Tôi có một chức năng với hai biến đầu vào mà chúng tôi đang tìm cách tối ưu hóa. Hàm trả về đầu ra và chúng tôi muốn giảm thiểu đầu ra này. Cách tốt nhất để làm điều này trong Python là gì? Hiện tại các biến đầu vào các hàm đã được mã hóa cứng, mục tiêu sẽ là lặp lại trong một phạm vi và tìm tối ưu cho cả hai tham số. Tôi đã nhìn vào Scipy nhưng không chắc chắn làm thế nào để sử dụng nó trong tình huống của tôi. Đầu ra của mã của tôi có thể được nhìn thấy dưới đây. Giảm thiểu chức năng vô hướng của một biến. Hàm mục tiêu. Hàm vô hướng, phải trả về vô hướng. Đối với các phương pháp 'Brent' và 'Golden', Đối với phương pháp ‘giới hạn, giới hạn là bắt buộc và phải có hai mục tương ứng với giới hạn tối ưu hóa. Các đối số bổ sung được chuyển đến hàm mục tiêu. Phương thức hoặc có thể gọi, tùy chọnstr or callable, optionalLoại giải quyết. Nên là một trong số:
Xem phần ‘Ghi chú để biết chi tiết của mỗi người giải. Tolfloat, tùy chọnfloat, optionalDung nạp để chấm dứt. Để kiểm soát chi tiết, sử dụng các tùy chọn dành riêng cho người giải quyết. Tùy chọndict, tùy chọndict, optionalMột từ điển của các tùy chọn giải quyết.
Xem >>> def f(x): ... return (x - 2) * x * (x + 2)**22 để biết các tùy chọn dành riêng cho người giải quyết.ReturnSresOptimizeresultresOptimizeResult Kết quả tối ưu hóa được biểu thị dưới dạng đối tượng >>> def f(x): ... return (x - 2) * x * (x + 2)**23. Các thuộc tính quan trọng là: >>> def f(x): ... return (x - 2) * x * (x + 2)**24 Mảng giải pháp, >>> def f(x): ... return (x - 2) * x * (x + 2)**25 Cờ Boolean cho biết nếu trình tối ưu hóa thoát ra thành công và >>> def f(x): ... return (x - 2) * x * (x + 2)**26 mô tả nguyên nhân của việc chấm dứt. Xem >>> def f(x): ... return (x - 2) * x * (x + 2)**23 để biết mô tả các thuộc tính khác. Xem thêm >>> def f(x): ... return (x - 2) * x * (x + 2)**28 Giao diện với các thuật toán tối thiểu hóa cho các chức năng đa biến vô hướng >>> def f(x): ... return (x - 2) * x * (x + 2)**22 Các tùy chọn bổ sung được chấp nhận bởi các người giải quyết Ghi chú Phần này mô tả các bộ giải có sẵn có thể được chọn bởi tham số ‘Phương thức. Phương pháp mặc định là Brent. Phương pháp Brent sử dụng thuật toán Brent, để tìm mức tối thiểu cục bộ. Thuật toán sử dụng phép nội suy parabol nghịch đảo khi có thể tăng tốc độ hội tụ của phương pháp phần vàng.Brent uses Brent’s algorithm to find a local minimum. The algorithm uses inverse parabolic interpolation when possible to speed up convergence of the golden section method. Phương pháp Golden sử dụng kỹ thuật tìm kiếm phần vàng. Nó sử dụng tương tự của phương pháp chia đôi để giảm khoảng thời gian được đặt. Nó thường tốt hơn để sử dụng phương pháp Brent.Golden uses the golden section search technique. It uses analog of the bisection method to decrease the bracketed interval. It is usually preferable to use the Brent method. Phương pháp giới hạn có thể thực hiện giảm thiểu giới hạn. Nó sử dụng phương pháp Brent để tìm mức tối thiểu cục bộ trong khoảng X1 Tùy chỉnh tùy chỉnh Nó có thể hữu ích khi chuyển một phương thức tối thiểu hóa tùy chỉnh, ví dụ khi sử dụng một số frontend thư viện để giảm thiểu_scalar. Bạn chỉ có thể chuyển một cuộc gọi có thể gọi là tham số >>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.x 1.280776404030. Các cuộc gọi có thể gọi được gọi là >>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.x 1.280776404031 trong đó >>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.x 1.280776404032 tương ứng với bất kỳ tham số nào khác được truyền đến >>> def f(x): ... return (x - 2) * x * (x + 2)**28 (chẳng hạn như bracket , TOL, v.v.), ngoại trừ các tùy chọn Dict, có nội dung của nó cũng được chuyển làm tham số phương thức theo cặp. Phương pháp sẽ trả về một đối tượng >>> def f(x): ... return (x - 2) * x * (x + 2)**23. Phương thức được cung cấp có thể gọi phải có khả năng chấp nhận (và có thể bỏ qua) các tham số tùy ý; Tập hợp các tham số được chấp nhận bởi >>> def f(x): ... return (x - 2) * x * (x + 2)**28 có thể mở rộng trong các phiên bản trong tương lai và sau đó các tham số này sẽ được chuyển sang phương thức. Bạn có thể tìm thấy một ví dụ trong hướng dẫn scipy.optimize. Mới trong phiên bản 0.11.0. Ví dụ Xem xét vấn đề giảm thiểu chức năng sau. >>> def f(x): ... return (x - 2) * x * (x + 2)**2 Sử dụng phương pháp Brent, chúng tôi tìm thấy mức tối thiểu cục bộ như: >>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.x 1.28077640403 Sử dụng phương thức giới hạn, chúng tôi tìm thấy tối thiểu cục bộ với giới hạn được chỉ định như: >>> res = minimize_scalar(f, bounds=(-3, -1), method='bounded') >>> res.x -2.0000002026 |