46 lines
1.3 KiB
Markdown
46 lines
1.3 KiB
Markdown
# API: differential_evolution
|
|
|
|
```python
|
|
from optimizr import differential_evolution
|
|
|
|
best_x, best_fx = differential_evolution(
|
|
objective_fn,
|
|
bounds,
|
|
popsize=15,
|
|
maxiter=1000,
|
|
f=None, # mutation factor (auto if None)
|
|
cr=None, # crossover rate (auto if None)
|
|
strategy="rand1", # rand1, best1, currenttobest1, rand2, best2
|
|
seed=None,
|
|
tol=1e-6,
|
|
atol=1e-8,
|
|
track_history=False, # keep per-iter best
|
|
parallel=False, # Python callbacks stay sequential; see Rust path below
|
|
adaptive=False, # jDE when True
|
|
constraint_penalty=1000.0,
|
|
)
|
|
```
|
|
|
|
- `objective_fn`: callable `f(x: np.ndarray) -> float`
|
|
- `bounds`: list of `(min, max)` tuples
|
|
- Returns `(best_x: np.ndarray, best_fx: float)`
|
|
|
|
## Parallel Rust entry point
|
|
|
|
For built-in benchmark objectives (no Python callbacks), use the Rust-native path with Rayon:
|
|
|
|
```python
|
|
from optimizr import parallel_differential_evolution_rust
|
|
|
|
result = parallel_differential_evolution_rust(
|
|
objective_name="rastrigin", # sphere, rosenbrock, ackley, griewank
|
|
bounds=[(-5, 5)] * 20,
|
|
maxiter=500,
|
|
parallel=True,
|
|
)
|
|
```
|
|
|
|
## Notes
|
|
- Adaptive control uses jDE in the current Python API; SHADE/L-SHADE live in Rust and will surface in a future release.
|
|
- Use `track_history=True` to export convergence curves for benchmarking.
|