Có vẻ như bạn muốn thay đổi cả bốn đối số. Bạn vượt qua các giá trị ban đầu của chúng là x0
, một mảng 4 phần tử. Đó là những gì minimize
sẽ chuyển sang distance
. Đây là một thay đổi đối với distance
sẽ làm việc với điều đó:
def distance[x]:
"""distance between points in 2 quadric surfaces in 3D space"""
alpha,beta,zt,zs = x # unpack x into these 4 variables
rt = [A/B] * np.sqrt[B**2 + [zt-C]**2]
xt = rt * np.cos[alpha]
yt = rt * np.sin[alpha]
rs = D * np.sqrt[zs-Z]
xs = rs * np.cos[beta]
ys = rs * np.sin[beta]
return [xt-xs]**2 + [yt-ys]**2 + [zt-zs]**2
Đề xuất args
sẽ thay đổi
1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
0 và giữ 3 hằng số khác. Điều đó không giống như những gì bạn muốn. Bạn đã sử dụng 1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
1, 1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
2, 1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
3 làm hằng số toàn cầu.1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
4 trông giống như kết quả, mà bạn có thể truy cập với 1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
5.Hầu hết các mục trong từ điển
1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
6 này được giải thích tại://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.OptimizeResult.html#scipy.optimize.OptimizeResult
1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
7 là một đầu ra đặc biệt cho phương pháp giảm thiểu nà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',
8 định nghĩa khoảng thời gian khung và có thể có ba mục 1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
9 để 1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
>>> def f[x]:
... return [x - 2] * x * [x + 2]**2
0 và >>> def f[x]:
... return [x - 2] * x * [x + 2]**2
1 hoặc hai mục >>> def f[x]:
... return [x - 2] * x * [x + 2]**2
2 và >>> def f[x]:
... return [x - 2] * x * [x + 2]**2
3 được coi là khoảng thời gian bắt đầu cho một tìm kiếm theo dõi xuống cấp [xem >>> def f[x]:
... return [x - 2] * x * [x + 2]**2
8] ; Nó không phải lúc nào cũng có nghĩa là giải pháp thu được sẽ thỏa mãn >>> def f[x]:
... return [x - 2] * x * [x + 2]**2
5.
Đố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.
Argstuple, tùy chọntuple, optionalCá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ố:
Brent
Giới hạn
Vàng
Tùy chỉnh - một đối tượng có thể gọi [được thêm vào phiên bản 0.14.0], xem bên dưới
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.
Maxiterintint
Số lần lặp tối đa để thực hiện.
DisterboolboolĐặt thành đúng để in các tin nhắn hội tụ.
Xem
>>> def f[x]: ... return [x - 2] * x * [x + 2]**26 để 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]**27. Các thuộc tính quan trọng là:
>>> def f[x]: ... return [x - 2] * x * [x + 2]**28 Mảng giải pháp,
>>> def f[x]: ... return [x - 2] * x * [x + 2]**29 Cờ Boolean cho biết nếu trình tối ưu hóa thoát ra thành công và
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar[f] >>> res.x 1.280776404030 mô tả nguyên nhân của việc chấm dứt. Xem
>>> def f[x]: ... return [x - 2] * x * [x + 2]**27 để biết mô tả các thuộc tính khác.
Xem thêm
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar[f] >>> res.x 1.280776404032
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]**26
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 > from scipy.optimize import minimize_scalar >>> res = minimize_scalar[f] >>> res.x 1.28077640403 4.
Cái gọi có thể gọi được gọi là
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar[f] >>> res.x 1.280776404035 trong đó
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar[f] >>> res.x 1.280776404036 tương ứng với bất kỳ tham số nào khác được chuyển đến
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar[f] >>> res.x 1.280776404032 [chẳng hạn như
1115:~/mypy$ python3 stack55751317.py
final_simplex: [array[[[-1.21456543, -1.21455458, 0.99997997, 0.99997757],
[-1.21457508, -1.21458998, 0.9999941 , 1.00000714],
[-1.21461728, -1.21460427, 1.00002695, 1.00001266],
[-1.21456081, -1.2145312 , 0.99996329, 0.99996864],
[-1.2146315 , -1.21462741, 1.00002628, 1.00004968]]], array[[2.49380001e-10, 4.04824635e-10, 4.13486388e-10, 1.15131206e-09,
1.18130671e-09]]]
fun: 2.4938000073954824e-10
message: 'Optimization terminated successfully.'
nfev: 295
nit: 172
status: 0
success: True
x: array[[-1.21456543, -1.21455458, 0.99997997, 0.99997757]]
8, 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]**27.
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
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar[f] >>> res.x 1.280776404032 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