## 2 Methods
### Dual Annealing Algorithm  
The dual annealing algorithm is a constrained optimization method inspired by the physical annealing process. It utilizes a dual-annealing strategy to enhance global optimization capabilities while incorporating local search mechanisms to improve the efficiency of reaching the global optimum in complex search spaces [21; 22]. This approach is particularly effective for solving high-dimensional and multimodal optimization problems, where traditional methods may easily become trapped in local minima. A flowchart of the dual simulated annealing Algorithm 1 is shown in Figure 1:  
**Input:**  
- Objective function _f(x)_  
- Variable bounds [_lower_, _upper_]  
- Max iterations: _maxiter_  
- Initial temperature: \(T_{0}\) = 5230.0  
- Restart temperature ratio: _restart_temp_ratio_ = 2 \(\times\) 10\({}^{-5}\)  
- Visiting parameter: _visit_ = 2.62 (controls perturbation distribution)  
- Acceptance parameter: _accept_ = \(-5.0\) (controls acceptance probability)  
- The maximum number of function calls: _maxfun_ = 1 \(\times\) 10\({}^{7}\)  
Figure 1: Dual Annealing algorithm flowchart. **Output:**  
- Optimal solution _x_best_  
- Optimal value _f_best_  
**Algorithmic flow**  
**A. Initialization:**  
a. Parse bounds to generate _lower_ and _upper_ arrays. b. Compute restart temperature threshold: _temperature_restart_ = \(T_{0}\)\(\times\)_restart_temp_ratio_  
c. Generate initial solution:  
- If \(x_{0}\) is provided: _x_current_ = \(x_{0}\)  
- Else: Randomly generate _x_current_ \(\in\) [_lower_, _upper_]  
- Compute initial energy: _f_current_ = _f_(_x_current_)  
d. Initialize best solution: _x_best_ = _x_current_, _f_best_ = _f_current_  
e. Initialize temperature decay parameters:  
- \(t_{1}\) = 2 \({}^{\text{visit-1}}-1\)  
- Current iteration step: \(s\) = 2.0  
f. Initialize counters:  
- Not-improved counter: _not_improved_idx_ = 0  
- Function evaluations: _nfev_ = 1  
**B. Main Loop (until iteration \(\geq\)_maxiter_ or _T < temperature_restart_):**  
a. Compute current temperature:  
\(T\) = \(T_{0}\)\(\times\)\(t_{1}\)/(\({}^{\text{visit-1}}-1)\)  
\(s\) = \(s\) + 1.0  
b. Strategy Chain Loop (explore perturbations for each variable):  
for \(j\) = 0 to 2 \(\times\)_dim_ (_dim_ = number of variables):  
i. Generate candidate solution _x_candidate_:  
- If _j < dim_: Global perturbation (all variables change)  
\(\Delta x\) = _visit_f_(\(T\)) // Perturbation using distorted  
Cauchy-Lorentz distribution  
\(x\)_candidate_ = _x_current_ + \(\Delta x\)  
\(x\)_candidate_ = _lower_ + (_x_candidate_ - _lower_) mod bound_range  
// Boundary handling  
- Else: Single-variable perturbation (only the _(j
- dim)-th_ variable changes)  
Apply perturbation to one variable as above  
ii. Evaluate candidate energy: _f_candidate_ = _f_(_x_candidate_), _nfev_ += 1  
iii. Acceptance criterion:  
if _f_candidate_ < _f_current_:  
Accept solution: _x_current_ = _x_candidate_, _f_current_ = _f_candidate_  
if _f_current_ < _f_best_:  
Update best: _x_best_ = _x_current_, _f_best_ = _f_current_  
Reset counter: _not_improved_idx_ = 0  
else:  
\(delta\_energy\) = _f_candidate_ - _f_current_  
\(pqv\)_temp_ = \(1-(1-accept)\)\(\times\)\(delta\_energy/T\)  
\(pqv\) = \(\exp(\ln(pqv\_temp)/(1-accept))\) if _pqv_temp_ > 0 else 0 if rand() < _pqv_:  
Accept solution: _x_current = x_candidate, f_current =  
_f_candidate_  
iv. Termination check: If _nfev \(\geq\) maxfun_, terminate. v. Update counter: _not_improved_idx = 1_  
c. Trigger Local Search (enhance local optimization):  
- If _not_improved_idx \(\geq\) 1000 or exp(K\(\times\) (_f_best
- f_current_)/_T_) \(\geq\) rand():  
i. Call local optimizer (L-BFGS-B) from _x_best_ to get x_ local and f_local  
ii. If_local < f_best_: Update _x_best = x_local, f_best = f_local  
iii.