はじめに#
JijZept Tools は、最適化計算における開発ワークフローを支援する SDK (Software Development Kit) です。 数理最適化ワークフローを素早く検証し、実験の管理・可視化・チューニングなどの開発プロセスを効率化することを目的としています。
主な特徴#
ブラックボックス最適化
BOCS (Bayesian Optimization for Combinatorial Structures)
Factorization Machine を用いた最適化手法
ワークフロー管理
直観的なノード単位の処理フロー (DAG) を定義し、ステート管理とともに一貫した実行を行う
WorkflowGraph
機能
モデルユーティリティ
JijModeling や ommx などの外部ライブラリと連携し、バイナリ変数や整数変数を連続化する関数など、最適化モデルを扱う上で役立つツールを提供
実験ダッシュボード (experimental)
minto
で管理された実験結果を可視化・インタラクティブに分析
今後の拡張予定
列生成法などの数理最適化アルゴリズムの追加
実験管理ツール (Experiment Tracking, パラメータ管理、可視化など) のさらなる拡充
他の最適化ソルバやフレームワークとの連携強化
簡単な使い方#
ブラックボックス最適化#
import numpy as np
from jijzepttools.blackbox_optimization import BOCSWorkflow
# 最適化対象の (X, y) データを用意
X = np.random.binomial(1, 0.5, size=(100, 10))
y = np.sum(X, axis=1)
# BOCSWorkflow のインスタンス化
bocs = BOCSWorkflow(random_seed=42)
# ブラックボックス関数とソルバを定義
def blackbox_func(x):
return np.sum(x)
def solver(instance):
# instanceには QUBO やパラメータが渡される想定
# ここでは簡単のため乱数でスピンを返す
return np.random.binomial(1, 0.5, size=10)
# 反復回数を指定して最適化を実行
X_new, y_new = bocs.run(X, y, blackbox_func, solver, n_iter=5)
print("最終的な X:", X_new)
print("最終的な y:", y_new)
ワークフロー管理#
from jijzepttools.workflow.workflow import WorkflowGraph
import dataclasses
@dataclasses.dataclass
class MyState:
counter: int = 0
def increment(x, state: MyState):
state.counter += 1
return x + 1
workflow = WorkflowGraph(MyState)
# Node 1 → Node 2 → END の流れを定義
workflow.add("process1", increment).add("process2", lambda x: x * 2)
# 入力値 5 と初期ステートを渡して実行
result = workflow.run(5, MyState())
print(result) # => 12 (例)
実験ダッシュボード (experimental)#
from jijzepttools.experimental.dashboard import dashboard
import minto
# minto.Experiment で管理している実験データを可視化
exp = minto.Experiment("my_experiment", auto_saving=False)
# いくつかの実験を実行して結果を記録した後...
# pygwalker を使ってデータフレームをインタラクティブに分析
dashboard(exp)