希皮。jl
|
该页面正在翻译中。 |
[医锡皮]是一个成熟的Python库,提供了丰富的优化,寻根和线性规划算法系列。 优化。jl 通过统一的访问这些例程 优化。jl 界面就像任何本地Julia优化器一样。
|
注 |
方法
以下是由 优化。jl 与他们的方便构造函数一起。 所有这些都接受通常的关键字参数 最大的,最大的, 最大时间, 阿布斯托尔, [医]雷托尔, 回调;回调, 进展情况 除了任何特定于SciPy的选项(通过关键字参数逐字传递到 解决方案).
本地优化器
无衍生品
* ScipyNelderMead() --Simplex Nelder—Mead算法
* ScipyPowell() --鲍威尔搜索沿着共轭方向
* ScipyCOBYLA() --约束的线性近似(支持非线性约束)
全局优化器
* ScipyDifferentialEvolution() --差分进化(需要边界)
* ScipyBasinhopping() --带本地搜索的盆地跳跃
* ScipyDualAnnealing() --双重退火模拟退火
* ScipyShgo() --简单同源全局优化(支持约束)
* ScipyDirect() --确定性 直接 算法(需要边界)
* ScipyBrute() --蛮力网格搜索(需要边界)
例子:
无约束最小化
using Optimization, OptimizationSciPy
rosenbrock(x, p) = (p[1] - x[1])^2 + p[2] * (x[2] - x[1]^2)^2
x0 = zeros(2)
p = [1.0, 100.0]
f = OptimizationFunction(rosenbrock, Optimization.AutoZygote())
prob = OptimizationProblem(f, x0, p)
sol = solve(prob, ScipyBFGS())
@show sol.objective # ≈ 0 at optimum
7.717288356613562e-13
COBYLA约束优化
using Optimization, OptimizationSciPy
# Objective
obj(x, p) = (x[1] + x[2] - 1)^2
# Single non-linear constraint: x₁² + x₂² ≈ 1 (with small tolerance)
cons(res, x, p) = (res .= [x[1]^2 + x[2]^2 - 1.0])
x0 = [0.5, 0.5]
prob = OptimizationProblem(
OptimizationFunction(obj; cons = cons),
x0, nothing, lcons = [-1e-6], ucons = [1e-6]) # Small tolerance instead of exact equality
sol = solve(prob, ScipyCOBYLA())
@show sol.u, sol.objective
([0.9999995099640485, 1.1653740143742524e-5], 1.2462829129061485e-10)
具有自定义选项的差分进化(全局)
using Optimization, OptimizationSciPy, Random, Statistics
Random.seed!(123)
ackley(x, p) = -20exp(-0.2*sqrt(mean(x .^ 2))) - exp(mean(cos.(2π .* x))) + 20 + ℯ
x0 = zeros(2) # initial guess is ignored by DE
prob = OptimizationProblem(ackley, x0; lb = [-5.0, -5.0], ub = [5.0, 5.0])
sol = solve(prob, ScipyDifferentialEvolution(); popsize = 20, mutation = (0.5, 1))
@show sol.objective
4.440892098500626e-16
传递求解器特定选项
任何关键字 优化。jl 不解释直接转发给SciPy。 请参阅https://docs.scipy.org/doc/scipy/reference/optimize.html[SciPy优化API]为详尽的选项列表。
sol = solve(prob, ScipyTrustConstr(); verbose = 3, maxiter = 10_000)