定義搜尋空間和決策變數

如要定義 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
    

EVOLVE-BLOCK 格式規則包括:

  • 獨立行:EVOLVE-BLOCK-START 和 EVOLVE-BLOCK-END 註解標記必須單獨出現在各自的行中。請勿在標記所在的同一行放置程式碼或其他內容,但空白字元和註解前置字元 (例如 # 或 //) 除外。
  • 必須有可編輯的程式碼:開始和結束標記之間的區域必須至少包含一行可編輯的程式碼。如果區塊只包含空白字元、註解或文件字串,系統會拒絕並顯示驗證錯誤,因為 AlphaEvolve 沒有可變更的邏輯。
  • 不支援巢狀結構:不支援巢狀 evolve 區塊。

限制搜尋空間的最佳做法

如何安排不可變動的匯入項目,以及明確放置 evolve 區塊,會顯示 AlphaEvolve 的作業邊界。

管理程式庫匯入作業和依附元件

AlphaEvolve 無法判斷哪些外部程式庫適用於您的正式環境。

如要允許開放式探索:如果任何機器學習或數學套件都能最大化指標,請將匯入項目放在可變動的 EVOLVE-BLOCK 內。這讓 AlphaEvolve 能自由替換其他架構 (例如將 sklearn 替換為 TensorFlow 或 xgboost)。

如要強制執行嚴格的工具鍊:如果所有模型都必須來自特定套件,請在 evolve 區塊外將該套件宣告為不可變更的匯入項目。如果 AlphaEvolve 在搜尋期間需要該套件的其他內部模組,仍可在其可變空間內本機匯入這些模組,而不會違反全域限制。

避免搜尋空間過於受限

在初始程式或使用者提供的額外文字內容中,盡可能將硬性限制制定為不可變更的程式碼區塊。這可盡量減少代理探索結構上不可行解決方案的機會。

不過,請勿將搜尋空間縮小到演化方法變得多餘的程度。舉例來說,如果強制 AlphaEvolve 僅使用單一參數線性迴歸,問題就會縮減為狹窄的設定空間,可由標準網格搜尋公用程式剖析。請改用軟限制做為評估條件中的負面懲罰,引導探索,而非扼殺探索。

策略性放置區塊,達成特定目標

變更 EVOLVE-BLOCK 的範圍會改變管道的整體最佳化目標:

最佳化樣本外 (OOS) 校正:如果目標是廣泛的演算法探索,請將區塊包覆在整個模型調整和初始化常式周圍。

最佳化結構擬合:如果您想保留線性架構,但發現複雜的分析運算式或自訂數學轉換,請嚴格隔離可變區塊,僅限於特徵轉換邏輯,並保持下游模型架構固定不變。

保留模組階層 (HDL/Verilog 範例):最佳化結構程式碼區塊設定時,請務必將 EVOLVE-BLOCK-START 和 EVOLVE-BLOCK-END 標記保留在模組定義邊界內。這可防止搜尋啟發式演算法做出結構無效的移動,例如嘗試將單一完整包含的模組,替換為多個未對應的浮動子模組。