定义搜索空间和决策变量

为 AlphaEvolve 用例定义搜索空间和决策变量需要将问题正确地公式化为代码,并提供一个可行的基准解决方案,以便进化启发法可以迭代和改进。

此过程包括:

  • 提供目标上下文:为优化用例建立背景、领域规则和性能边界。

  • 提供干净的基准:提供清晰且结构良好的代码,以正确实现目标问题的基准解决方案。

  • 标记自由度:使用明确的 EVOLVE-BLOCK 注释对代码库进行注释,以标记智能体可以变异和探索的特定决策变量、逻辑结构或例程,从而识别性能更高的解决方案。

初始程序的结构

初始程序由两种主要块类型组成,这些块类型决定了进化搜索的边界:

  1. 不可变代码块:样板代码、辅助函数和依赖项,用于限制搜索空间或执行不影响解决方案性能的任务(例如标准预处理步骤或数据处理例程)。

  2. 可变代码块 (EVOLVE-BLOCK):包含智能体可以探索和变异的特定决策变量、逻辑结构或分析表达式的目标区域。

    import numpy as np
    # Code to constrain the search space (Immutable)
    def def_preprocessing():
        """Feature engineering and preprocessing."""
        pass
    
    # EVOLVE-BLOCK-START
    # Mutable block: Provides degrees of freedom for AlphaEvolve to optimize
    def model_tuning():
        """Model tuning function: parametrized to take features."""
        pass
    # EVOLVE-BLOCK-END
    
    # Boilerplate code that does not impact solution performance (Immutable)
    def batch_predictions():
        """Inference function: batch predictions to test performance."""
        pass
    

限制搜索空间的最佳实践

您如何安排不可变导入和放置进化块,明确展示了 AlphaEvolve 的操作边界。

管理库导入和依赖项

AlphaEvolve 本身无法确定哪些外部库对您的生产环境有效。

如需允许开放探索:如果任何机器学习或数学软件包都可以最大限度地提高您的指标,请将导入放在可变 EVOLVE-BLOCK 内。这样,AlphaEvolve 就可以自由地替换替代框架(例如将 sklearn 替换为 TensorFlow 或 xgboost)。

如需强制执行严格的工具链:如果所有模型都必须来自特定软件包,请将该软件包声明为进化块之外的不可变导入。如果 AlphaEvolve 在搜索期间需要该软件包中的其他内部模块,它仍然可以在其可变空间内本地导入这些模块,而不会违反全局限制。

避免过度限制搜索空间

在初始程序中或在用户提供的其他文本上下文中,尽可能将硬性限制公式化为不可变代码块。这样可以最大限度地减少智能体探索结构上不可行的解决方案的可能性。

但是,请勿将搜索空间缩小到进化方法变得多余的地步。例如,强制 AlphaEvolve 仅使用单参数线性回归会将问题简化为狭窄的配置空间,该空间可以通过标准网格搜索实用程序进行解析。 相反,请在评估条件中使用软性限制作为负面惩罚,以引导探索,而不会扼杀探索。

针对目标目标的战略性块放置

更改 EVOLVE-BLOCK 的范围会改变流水线的整个优化目标:

优化样本外 (OOS) 校准:如果您的目标是广泛的算法发现,请将块封装在整个模型调整和初始化例程中。

优化结构拟合:如果您想保留线性框架,但发现复杂的分析表达式或自定义数学转换,请将可变块严格隔离在特征转换逻辑周围,保持下游模型架构固定且不可变。

保留模块化层次结构(HDL/Verilog 示例):在优化结构代码块配置时,请将 EVOLVE-BLOCK-STARTEVOLVE-BLOCK-END 标记严格保留在模块定义边界内。这样可以防止搜索启发法做出结构上无效的移动,例如尝试将单个干净包含的模块替换为多个未映射的浮动子模块。