パイプライン#
Pipelineはコンポーネントと構造化された制御領域を記述するDSLです。
OptimizationStateを直接実行するものではありません。Optimizerは実行計画の構築時に入力として使います。
from saealib import Branch, Loop, Pipeline, Repeat
pipeline = Pipeline(
name="generation",
steps=[
Repeat(
Pipeline(steps=[ask, acquire, tell], name="surrogate_generation"),
count=10,
name="surrogate_generations",
),
Loop(evaluation, until=budget_reached, name="evaluation_loop"),
Branch(route, then=fast_path, else_=safe_path, name="route"),
],
)
この例はPipelineの構築方法だけを示します。
通常はOptimizerがStrategyの生成したGraphとPipelineをコンパイルするため、ユーザーがCompilerを直接呼び出す必要はありません。
ネストしたPipelineと制御値は、名前付きの構造化された領域として保持されます。
Repeatは固定回数の反復を表し、LoopとBranchは宣言された状態契約を通じて条件を評価します。
領域は通常のグラフサイクルへ縮約されないため、Runtimeは状態への影響を保持し、フレームを再開できます。
構造化Pipelineに配置するコンポーネントは、グラフネイティブなcontract()とexecute(StateView)の境界を提供します。
従来のStage実行面は、互換Graph Builderへの接続点として残ります。
既存のStageを構造化Pipelineに配置する場合は、stage_component(stage)で明示的にラップします。
コンパイル時、必須入力ポートは制御順序に従って上流の互換出力と照合されます。
一意に一致した接続はDataEdgeになり、一致しない場合や候補が複数ある場合はCompiler診断が生成されます。
あいまいな接続を解決する必要がある場合は、明示的なGraphを使います。
stage_component(stage)は移行用アダプターです。
トランザクションプロキシ経由の状態書き込みはStatePatch値になりますが、アダプターはServicesまたはContext機能として公開された可変オブジェクトの所有権を保持します。
新しいグラフネイティブコンポーネントでは、永続的な可変状態を宣言済みのStateKey値とパッチの背後に保持します。
Abstract base class for a compatibility execution step. |
|
An ordered structural DSL sequence lowered to a semantic graph. |
|
Repeat a structural body a fixed number of times. |
|
Repeat a structural body while a condition remains active. |
|
Select one of two structural bodies using a condition. |