Skip to content
Back to skills

Optimizer Workflows

ASecurity

"Use BayesianOptimization for ordinary black-box optimization,

  • 247 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 8, 2026
businesspythongoapi

Works with

  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill optimizer-workflows --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Optimizer Workflows?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Optimizer Workflows
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-optimizer-workflows/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-optimizer-workflows)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: optimizer-workflows
description: "Use BayesianOptimization for ordinary black-box optimization,
  manual ask-tell loops, persistence, prediction, and small ML hyperparameter
  optimization."
disable-model-invocation: true
metadata:
  disco-role: operating
license: MIT
---

# Optimizer Workflows

Use this sub-skill when a user wants to run the core `bayes_opt.BayesianOptimization`
lifecycle for a black-box objective or a small machine-learning hyperparameter
optimization job. This route is self-contained: future agents should not need to
open the original repository docs, notebooks, tests, or examples.

## Load This When

- The user has a Python function or external evaluation service and wants to
  optimize scalar parameters with Bayesian optimization.
- The task mentions `BayesianOptimization`, `pbounds`, `maximize`, `max`, `res`,
  `probe`, `register`, `suggest`, `random_sample`, `set_bounds`,
  `set_gp_params`, `save_state`, `load_state`, or `predict`.
- The user asks how to turn a loss into an optimization target, persist an
  optimizer, resume a run, validate results, or handle duplicate/noisy
  observations.
- The user wants a tiny scikit-learn HPO pattern using `bayesian-optimization`.

## Core Rules To Apply First

1. The package maximizes target values. Convert losses to scores, commonly by
   returning `-loss` or using a scikit-learn scorer whose larger value is better.
2. `pbounds` keys must match the objective function keyword arguments exactly.
   Dict inputs are safest. Array/list inputs use the `pbounds` insertion order.
3. Keep objective functions deterministic enough for the GP when possible. For
   noisy objectives, set `allow_duplicate_points=True` only when repeated
   evaluations at the same coordinates are intentional.
4. Use `f=None` only for manual ask-tell loops: call `suggest()`, evaluate
   outside the optimizer, then `register(params, target)`. Do not call eager
   `probe(..., lazy=False)` or `maximize()` with `f=None`.
5. After `maximize()`, call `predict(..., fit_gp=True)` before relying on GP
   predictions; the final registered point may not be included in the fitted GP
   until prediction refits it.
6. Save/load state as JSON with a newly constructed compatible optimizer: same
   objective-compatible kwargs, `pbounds`, acquisition strategy, constraints,
   duplicate policy, and any bounds transformer.

## Bundled References

- [API reference](references/api-reference.md): constructor and method
  signatures, lifecycle semantics, `TargetSpace` result behavior, `predict`
  return shapes, and state persistence details.
- [Workflow recipes](references/workflows.md): basic optimization, manual
  ask-tell evaluations, tiny HPO patterns, loss sign handling, persistence,
  duplicate/noisy recipes, bounds updates, and result validation.
- [Troubleshooting](references/troubleshooting.md): symptoms, causes, and fixes
  for key mismatches, duplicate points, unfitted GP errors, stale state loads,
  target-sign mistakes, bounds/type changes, slow objectives, and `f=None`
  misuse.

## Bundled Smoke Scripts

- [`scripts/bo_core_smoke.py`](scripts/bo_core_smoke.py): deterministic core API
  smoke test. It runs a tiny optimizer, validates `max`/`res`, exercises
  `probe`, `register`, `suggest`, `random_sample`, `set_bounds`, `set_gp_params`,
  `predict`, duplicate handling, and optional JSON save/load.
- [`scripts/sklearn_hpo_smoke.py`](scripts/sklearn_hpo_smoke.py): deterministic
  tiny scikit-learn HPO diagnostic with synthetic data. It demonstrates both
  maximizing a score and negating a loss, with safe integer casting for model
  hyperparameters.

Run scripts only in an environment where `bayesian-optimization` and its normal
Python dependencies are installed. Both scripts support `--help`, use bounded
synthetic data, do not download from the network, and avoid destructive writes.

## Routing Boundaries

Stay in this sub-skill for the optimizer lifecycle, public result validation,
manual ask-tell loops, persistence/resume patterns, `predict` semantics, noisy
or duplicate objectives, bounds updates, GP parameter tuning through
`set_gp_params`, and ordinary small HPO recipes.

Route elsewhere for features that have distinct APIs or deeper contracts:

- Acquisition choices, custom acquisition functions, `ConstantLiar`, `GPHedge`,
  and exploration/exploitation controls: `../acquisition-control/SKILL.md`.
- Constraints, typed/categorical parameters beyond simple wrapper casting,
  custom `BayesParameter`, and sequential domain reduction:
  `../advanced-domain-features/SKILL.md`.
- Repository editing, tests, docs, release, packaging, linting, and maintainer
  workflows: `../repo-maintenance/SKILL.md`.

## Minimal Decision Flow

1. Identify objective type:
   - In-process Python function: create `BayesianOptimization(f=objective, ...)`.
   - External/manual evaluation: create `BayesianOptimization(f=None, ...)` and
     use ask-tell with `suggest()`/`register()`.
2. Define `pbounds` with exact parameter names and realistic finite bounds.
   Prefer log-transformed parameters for scale-sensitive HPO (`log10_C`,
   `log_learning_rate`) and transform inside the objective wrapper.
3. Choose a budget. For smoke tests use tiny values such as `init_points=2`,
   `n_iter=2`; for expensive tasks, increase only after validating objective
   sign, result shape, and runtime.
4. Run `maximize(init_points=..., n_iter=...)` or the ask-tell loop.
5. Validate `optimizer.max` is not `None`, has keys `target` and `params`, all
   returned params are within intended bounds, `len(optimizer.res)` matches the
   number of registered observations, and the best target uses the intended
   metric sign.
6. Persist long or expensive runs with `save_state(path)`. To resume, recreate a
   compatible optimizer and call `load_state(path)` before more suggestions or
   `maximize(init_points=0, n_iter=...)`.
7. If predictions or uncertainty are needed, call `predict()` with explicit
   `fit_gp=True` after at least one observation; use `return_std=True` or
   `return_cov=True`, never both.

## Handoff Checklist For Future Agents

- Objective wrapper returns a finite scalar target and uses the correct sign.
- `pbounds` keys and objective kwargs match exactly.
- Random seeds are set where reproducibility matters.
- `allow_duplicate_points` is justified for noise; otherwise duplicate errors
  are treated as a signal to change the loop.
- State files are JSON and loaded into an optimizer with compatible settings.
- Any advanced acquisition, constraint, typed-parameter, or domain-reduction
  need has been routed to the sibling sub-skill instead of duplicated here.

Files in this skill

  • SKILL.md6.5 KB
  • references/api-reference.md11.2 KB
  • references/troubleshooting.md9.1 KB
  • references/workflows.md11 KB
  • scripts/bo_core_smoke.py8.4 KB
  • scripts/sklearn_hpo_smoke.py6.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…