Gradient-Free-Optimizers

GitHub
1.3k 95 非常简单 1 次阅读 3天前MITAgent插件开发框架
AI 解读 由 AI 自动生成,仅供参考

Gradient-Free-Optimizers 是一款轻量级的 Python 优化库,专为解决“黑盒函数”的寻优难题而生。在机器学习调参、仿真模拟等场景中,我们常常面临无法计算梯度或梯度获取成本极高的情况,传统优化方法往往束手无策。这款工具通过提供无需梯度的优化方案,让用户只需定义目标函数和搜索空间,即可轻松启动优化流程。

它内置了包括局部搜索、全局搜索、群体智能及贝叶斯优化在内的 21 种经典算法,并统一了调用接口。其独特之处在于能够高效处理由 NumPy 数组定义的混合数值搜索空间,既支持简单的爬山法,也涵盖复杂的序列优化技术。作为 Hyperactive 库的后端核心,它同样支持独立使用,兼顾了灵活性与易用性。

无论是需要快速验证想法的算法工程师、进行超参数调整的研究人员,还是致力于仿真优化的数据科学家,都能从中受益。如果你正在寻找一个简单可靠、无需深入数学推导即可上手的优化工具,Gradient-Free-Optimizers 将是一个理想的选择,帮助你将精力集中在业务逻辑而非优化细节上。

使用场景

某工业仿真工程师正在调整复杂的流体动力学模拟参数,以最小化能耗并最大化输出效率,但模拟过程耗时且无法提供梯度信息。

没有 Gradient-Free-Optimizers 时

  • 工程师只能依赖手动试错或简单的网格搜索,面对混合了整数(如管道数量)和浮点数(如流速系数)的参数空间,效率极低。
  • 由于缺乏统一的接口,尝试切换不同优化策略(如从随机搜索切换到贝叶斯优化)需要重写大量底层代码,开发成本高昂。
  • 在仿真模型作为“黑盒”且计算昂贵的情况下,传统基于梯度的方法完全失效,导致难以在有限时间内找到全局最优解。
  • 每次实验需耗费数小时,有限的计算资源被浪费在低效的探索上,项目进度严重滞后。

使用 Gradient-Free-Optimizers 后

  • 利用其支持的 21 种无梯度算法(如进化策略或贝叶斯优化),轻松处理离散与连续混合的搜索空间,自动快速锁定最优参数组合。
  • 通过统一的 Python 接口,工程师仅需定义目标函数和搜索范围,即可一键切换多种高级优化器,无需关心底层实现细节。
  • 针对高成本的仿真黑盒函数,采用基于代理模型的序贯优化技术,用极少的迭代次数即可逼近全局最优,大幅减少模拟运行次数。
  • 原本需要数周的参数调优工作缩短至几天完成,显著提升了研发迭代速度和最终产品的能效表现。

Gradient-Free-Optimizers 让工程师在面对昂贵且不可导的黑盒问题时,能以最低代码成本实现高效、智能的全局参数寻优。

运行环境要求

操作系统
  • 未说明 (通常支持所有主流操作系统)
GPU

不需要 GPU

内存

未说明

依赖
notes这是一个轻量级库,核心依赖极少(仅需 pandas)。可选依赖包括用于进度条的 tqdm 和用于代理模型(如贝叶斯优化)的 scikit-learn。该库专注于无梯度优化,适用于超参数调整和仿真优化场景。
python3.8+
numpy
pandas
Gradient-Free-Optimizers hero image

快速开始

Gradient-Free-Optimizers Logo


在混合搜索空间中,使用局部、全局、群体和序列化技术进行轻量级优化

Tests Coverage


文档 主页 · 优化算法 · API 参考 · 示例
本页内容 主要特性 · 示例 · 核心概念 · 引用


贝叶斯优化在 Ackley 函数上的应用

Gradient-Free-Optimizers 是一个用于黑箱函数无梯度优化的 Python 库。它提供了一个统一的接口,支持 21 种优化算法,从简单的爬山法到贝叶斯优化,所有算法均作用于通过 NumPy 数组定义的离散数值搜索空间。

该库专为超参数调优、仿真优化以及任何梯度不可用或不切实际的场景而设计。其核心理念是简单易用:只需定义目标函数、指定搜索空间并运行即可。它是 Hyperactive 的优化后端,但也可独立使用。

LinkedIn


安装

pip install gradient-free-optimizers

PyPI Python

可选依赖
pip install gradient-free-optimizers[progress]  # 带有 tqdm 的进度条
pip install gradient-free-optimizers[sklearn]   # 用于代理模型的 scikit-learn
pip install gradient-free-optimizers[full]      # 所有可选依赖

主要特性

21 种优化算法
包括局部、全局、群体和基于模型的序列化优化方法。只需一行代码即可切换算法。
零配置
所有参数均有合理默认值,无需调整优化器本身即可立即开始优化。
内存系统
内置缓存机制可避免重复评估,对于像机器学习模型这样昂贵的目标函数尤为重要。
离散搜索空间
使用熟悉的 NumPy 语法,通过数组和范围定义参数空间。
约束支持
可通过定义约束函数来限制搜索空间,无效区域将被自动避开。
极简依赖
仅需 pandas;还可选择集成 tqdm 进度条和 scikit-learn 代理模型等可选组件。

快速入门

import numpy as np
from gradient_free_optimizers import HillClimbingOptimizer

# 定义目标函数(最大化)
def objective(params):
    x, y = params["x"], params["y"]
    return -(x**2 + y**2)  # 负抛物面,最优解在 (0, 0)

# 定义搜索空间
search_space = {
    "x": np.arange(-5, 5, 0.1),
    "y": np.arange(-5, 5, 0.1),
}

# 运行优化
opt = HillClimbingOptimizer(search_space)
opt.search(objective, n_iter=1000)

# 结果
print(f"最佳得分: {opt.best_score}")
print(f"最佳参数: {opt.best_para}")

输出:

最佳得分: -0.02
最佳参数: {'x': 0.1, 'y': 0.1}

核心概念

flowchart LR
    O["优化器
    ━━━━━━━━━━
    21种算法"]

    S["搜索空间
    ━━━━━━━━━━━━
    NumPy数组"]

    F["目标函数
    ━━━━━━━━━━
    f(params) → score"]

    D[("搜索数据
    ━━━━━━━━━━━
    历史记录")]

    O -->|提出| S
    S -->|参数| F
    F -->|得分| O

    O -.-> D
    D -.->|热启动| O

优化器: 实现搜索策略。从四类共21种算法中选择:局部搜索、全局搜索、基于种群的优化以及基于序列模型的优化。

搜索空间: 将有效的参数组合定义为 NumPy 数组。每个键是参数名,每个值是允许取值的数组。

目标函数: 您希望最大化的函数。接受一个包含参数的字典,返回一个得分。若需最小化,可对结果取负值。

搜索数据: 所有评估的完整历史记录可通过 opt.search_data 访问,用于分析和未来搜索的热启动。


示例

超参数优化
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_wine
import numpy as np

from gradient_free_optimizers import BayesianOptimizer

X, y = load_wine(return_X_y=True)

def objective(params):
    model = GradientBoostingClassifier(
        n_estimators=params["n_estimators"],
        max_depth=params["max_depth"],
        learning_rate=params["learning_rate"],
    )
    return cross_val_score(model, X, y, cv=5).mean()

search_space = {
    "n_estimators": np.arange(50, 300, 10),
    "max_depth": np.arange(2, 10),
    "learning_rate": np.logspace(-3, 0, 20),
}

opt = BayesianOptimizer(search_space)
opt.search(objective, n_iter=50)
贝叶斯优化
import numpy as np
from gradient_free_optimizers import BayesianOptimizer

def ackley(params):
    x, y = params["x"], params["y"]
    return -(
        -20 * np.exp(-0.2 * np.sqrt(0.5 * (x**2 + y**2)))
        - np.exp(0.5 * (np.cos(2 * np.pi * x) + np.cos(2 * np.pi * y)))
        + np.e + 20
    )

search_space = {
    "x": np.arange(-5, 5, 0.01),
    "y": np.arange(-5, 5, 0.01),
}

opt = BayesianOptimizer(search_space)
opt.search(ackley, n_iter=100)
粒子群优化
import numpy as np
from gradient_free_optimizers import ParticleSwarmOptimizer

def rastrigin(params):
    A = 10
    values = [params[f"x{i}"] for i in range(5)]
    return -sum(v**2 - A * np.cos(2 * np.pi * v) + A for v in values)

search_space = {f"x{i}": np.arange(-5.12, 5.12, 0.1) for i in range(5)}

opt = ParticleSwarmOptimizer(search_space, population=20)
opt.search(rastrigin, n_iter=500)
模拟退火
import numpy as np
from gradient_free_optimizers import SimulatedAnnealingOptimizer

def sphere(params):
    return -(params["x"]**2 + params["y"]**2)

search_space = {
    "x": np.arange(-10, 10, 0.1),
    "y": np.arange(-10, 10, 0.1),
}

opt = SimulatedAnnealingOptimizer(
    search_space,
    start_temp=1.2,
    annealing_rate=0.99,
)
opt.search(sphere, n_iter=1000)
约束优化
import numpy as np
from gradient_free_optimizers import RandomSearchOptimizer

def objective(params):
    return params["x"] + params["y"]

def constraint(params):
    # 只有 x + y < 5 的位置才是有效的
    return params["x"] + params["y"] < 5

search_space = {
    "x": np.arange(0, 10, 0.1),
    "y": np.arange(0, 10, 0.1),
}

opt = RandomSearchOptimizer(search_space, constraints=[constraint])
opt.search(objective, n_iter=1000)

内存与热启动
import numpy as np
from gradient_free_optimizers import HillClimbingOptimizer

def expensive_function(params):
    # 模拟昂贵的计算
    return -(params["x"]**2 + params["y"]**2)

search_space = {
    "x": np.arange(-10, 10, 0.1),
    "y": np.arange(-10, 10, 0.1),
}

# 第一次搜索
opt1 = HillClimbingOptimizer(search_space)
opt1.search(expensive_function, n_iter=100, memory=True)

# 使用之前的搜索数据进行热启动继续搜索
opt2 = HillClimbingOptimizer(search_space)
opt2.search(expensive_function, n_iter=100, memory_warm_start=opt1.search_data)
提前停止
import numpy as np
from gradient_free_optimizers import BayesianOptimizer

def objective(params):
    return -(params["x"]**2 + params["y"]**2)

search_space = {
    "x": np.arange(-10, 10, 0.1),
    "y": np.arange(-10, 10, 0.1),
}

opt = BayesianOptimizer(search_space)
opt.search(
    objective,
    n_iter=1000,
    max_time=60,           # 60秒后停止
    max_score=-0.01,       # 得分达到 -0.01 时停止
    early_stopping={       # 如果连续50次迭代没有改进则停止
        "n_iter_no_change": 50,
    },
)

生态系统

本库是优化工具套件的一部分。如需了解这些包的最新动态,请在 GitHub 上关注。

软件包 描述
Hyperactive 超参数优化框架,提供实验抽象和机器学习集成
Gradient-Free-Optimizers 黑箱函数优化的核心算法
Surfaces 用于优化算法评估的测试函数和基准曲面

文档

资源 描述
用户指南 全面的教程和说明
API 参考 完整的 API 文档
优化器 对所有 21 种算法的详细描述
示例 各种用例的代码示例

贡献

欢迎贡献!请参阅 CONTRIBUTING.md 获取指南。


引用

如果您在研究中使用本软件,请引用:

@software{gradient_free_optimizers,
  author = {Simon Blanke},
  title = {无梯度优化器:在数值搜索空间中使用局部、全局、群体和序列方法进行简单可靠的优化},
  year = {2020},
  url = {https://github.com/SimonBlanke/Gradient-Free-Optimizers},
}

许可证

MIT 许可证 - 允许用于商业和学术用途。

版本历史

v1.11.12026/03/15
v1.11.02026/03/14
v1.10.12026/02/19
v1.10.02026/02/16
v1.9.02026/01/15
v1.8.12025/12/29
v1.8.02025/12/29
v1.7.22025/09/25
v1.7.12024/12/07
v1.6.02024/08/14
v1.5.02024/07/29
v1.4.02024/05/11
v1.3.02023/04/11
v1.2.02023/02/28
v1.0.12021/12/01

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.3k|★★☆☆☆|今天
开发框架Agent语言模型

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|昨天
Agent插件

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像