Skip to content

ParticleSwarm: clamp c2 to 3/2 when it falls below 3/2 - #1294

Merged
pkofod merged 1 commit into
JuliaNLSolvers:masterfrom
inayatku:pso-c2-clamp
Oct 24, 2026
Merged

pkofod merged 1 commit into
JuliaNLSolvers:masterfrom
inayatku:pso-c2-clamp

Conversation

@inayatku

Copy link
Copy Markdown
Contributor

Fixes #1203.

update_swarm_params! clamps the coefficients c1 and c2 to [3/2, 5/2]. For c1 a value below 3/2 is set to 3/2, but for c2 it was set to 5/2. So whenever c2 fell below 3/2 (it decreases in states 1, 2 and 4), it jumped to the upper end, and the rescaling for c1 + c2 > 4 then also lowered c1.

This sets c2 to 3/2, as for c1.

New test: starting from c1 = c2 = 3/2, states 1 and 4 must leave c2 at 3/2. On master the test gives c2 = 2.46 and c2 = 2.5. The particle swarm tests pass (10 of 10).

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vlts)

Time benchmarks
master 1976c6b... master / 1976c6b...
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.164 ± 0.0076 ms 0.164 ± 0.0068 ms 0.999 ± 0.062
multivariate/problems/rosenbrock/100/Newton 0.819 ± 0.037 ms 0.806 ± 0.025 ms 1.02 ± 0.055
multivariate/problems/rosenbrock/100/NewtonTrustRegion 4 ± 0.19 ms 3.92 ± 0.28 ms 1.02 ± 0.087
multivariate/problems/rosenbrock/2/KrylovTrustRegion 14.1 ± 0.64 μs 14.2 ± 0.66 μs 0.997 ± 0.065
multivariate/problems/rosenbrock/2/Newton 18.9 ± 0.63 μs 20.1 ± 0.67 μs 0.943 ± 0.045
multivariate/problems/rosenbrock/2/NewtonTrustRegion 25.6 ± 1.2 μs 26.2 ± 1.3 μs 0.979 ± 0.068
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.036 ± 0.00099 ms 0.036 ± 0.0016 ms 1 ± 0.053
multivariate/problems/rosenbrock/20/Newton 0.0727 ± 0.0023 ms 0.074 ± 0.0015 ms 0.982 ± 0.037
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.235 ± 0.0092 ms 0.24 ± 0.0084 ms 0.981 ± 0.051
multivariate/problems/saddle/100/KrylovTrustRegion 0.06 ± 0.0031 ms 0.0613 ± 0.0016 ms 0.979 ± 0.056
multivariate/problems/saddle/100/Newton 0.156 ± 0.0038 ms 0.168 ± 0.0063 ms 0.927 ± 0.042
multivariate/problems/saddle/100/NewtonTrustRegion 2.07 ± 0.067 ms 2.12 ± 0.051 ms 0.98 ± 0.039
multivariate/problems/saddle/2/KrylovTrustRegion 5.65 ± 0.38 μs 5.68 ± 0.47 μs 0.995 ± 0.11
multivariate/problems/saddle/2/Newton 4.26 ± 0.33 μs 4.32 ± 0.33 μs 0.986 ± 0.11
multivariate/problems/saddle/2/NewtonTrustRegion 9.2 ± 0.5 μs 9.19 ± 0.53 μs 1 ± 0.079
multivariate/problems/saddle/20/KrylovTrustRegion 12.1 ± 0.54 μs 12.3 ± 0.58 μs 0.978 ± 0.064
multivariate/problems/saddle/20/Newton 15.4 ± 0.67 μs 15.5 ± 0.65 μs 0.997 ± 0.06
multivariate/problems/saddle/20/NewtonTrustRegion 0.0837 ± 0.0031 ms 0.0855 ± 0.0026 ms 0.979 ± 0.047
multivariate/solvers/first_order/AdaMax 0.284 ± 0.0096 ms 0.285 ± 0.0097 ms 0.997 ± 0.048
multivariate/solvers/first_order/Adam 0.282 ± 0.01 ms 0.284 ± 0.0087 ms 0.994 ± 0.047
multivariate/solvers/first_order/BFGS 0.051 ± 0.0015 ms 0.0523 ± 0.0013 ms 0.975 ± 0.037
multivariate/solvers/first_order/ConjugateGradient 0.118 ± 0.005 ms 0.121 ± 0.0039 ms 0.979 ± 0.052
multivariate/solvers/first_order/GradientDescent 0.421 ± 0.012 ms 0.423 ± 0.016 ms 0.994 ± 0.046
multivariate/solvers/first_order/LBFGS 0.0615 ± 0.0011 ms 0.0622 ± 0.0017 ms 0.988 ± 0.031
multivariate/solvers/first_order/MomentumGradientDescent 0.807 ± 0.021 ms 0.792 ± 0.026 ms 1.02 ± 0.043
multivariate/solvers/first_order/NGMRES 0.254 ± 0.0085 ms 0.253 ± 0.0079 ms 1 ± 0.046
multivariate/solvers/second_order/KrylovTrustRegion 0.246 ± 0.01 ms 0.255 ± 0.0064 ms 0.967 ± 0.048
multivariate/solvers/second_order/Newton 0.0886 ± 0.0023 ms 0.0898 ± 0.0014 ms 0.987 ± 0.03
multivariate/solvers/second_order/NewtonTrustRegion 0.127 ± 0.0047 ms 0.13 ± 0.0037 ms 0.977 ± 0.045
time_to_load 0.227 ± 0.0061 s 0.213 ± 0.0042 s 1.07 ± 0.035
Memory benchmarks
master 1976c6b... master / 1976c6b...
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.328 k allocs: 0.352 MB 0.328 k allocs: 0.352 MB 1
multivariate/problems/rosenbrock/100/Newton 0.369 k allocs: 0.339 MB 0.369 k allocs: 0.339 MB 1
multivariate/problems/rosenbrock/100/NewtonTrustRegion 0.416 k allocs: 6.43 MB 0.416 k allocs: 6.43 MB 1
multivariate/problems/rosenbrock/2/KrylovTrustRegion 0.332 k allocs: 21.4 kB 0.332 k allocs: 21.4 kB 1
multivariate/problems/rosenbrock/2/Newton 0.365 k allocs: 18.7 kB 0.365 k allocs: 18.7 kB 1
multivariate/problems/rosenbrock/2/NewtonTrustRegion 0.343 k allocs: 0.0348 MB 0.343 k allocs: 0.0348 MB 1
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.343 k allocs: 0.0618 MB 0.343 k allocs: 0.0618 MB 1
multivariate/problems/rosenbrock/20/Newton 0.365 k allocs: 0.0334 MB 0.365 k allocs: 0.0334 MB 1
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.33 k allocs: 0.396 MB 0.33 k allocs: 0.396 MB 1
multivariate/problems/saddle/100/KrylovTrustRegion 0.107 k allocs: 0.209 MB 0.107 k allocs: 0.209 MB 1
multivariate/problems/saddle/100/Newton 0.096 k allocs: 0.351 MB 0.096 k allocs: 0.351 MB 1
multivariate/problems/saddle/100/NewtonTrustRegion 0.255 k allocs: 3.51 MB 0.255 k allocs: 3.51 MB 1
multivariate/problems/saddle/2/KrylovTrustRegion 0.114 k allocs: 7.16 kB 0.114 k allocs: 7.16 kB 1
multivariate/problems/saddle/2/Newton 0.088 k allocs: 5.52 kB 0.088 k allocs: 5.52 kB 1
multivariate/problems/saddle/2/NewtonTrustRegion 0.129 k allocs: 13 kB 0.129 k allocs: 13 kB 1
multivariate/problems/saddle/20/KrylovTrustRegion 0.102 k allocs: 22.1 kB 0.102 k allocs: 22.1 kB 1
multivariate/problems/saddle/20/Newton 0.088 k allocs: 20.7 kB 0.088 k allocs: 20.7 kB 1
multivariate/problems/saddle/20/NewtonTrustRegion 0.139 k allocs: 0.155 MB 0.139 k allocs: 0.155 MB 1
multivariate/solvers/first_order/AdaMax 0.341 k allocs: 7.36 kB 0.341 k allocs: 7.36 kB 1
multivariate/solvers/first_order/Adam 0.341 k allocs: 7.36 kB 0.341 k allocs: 7.36 kB 1
multivariate/solvers/first_order/BFGS 0.157 k allocs: 8.67 kB 0.157 k allocs: 8.67 kB 1
multivariate/solvers/first_order/ConjugateGradient 0.37 k allocs: 19.4 kB 0.37 k allocs: 19.4 kB 1
multivariate/solvers/first_order/GradientDescent 1.22 k allocs: 0.065 MB 1.22 k allocs: 0.065 MB 1
multivariate/solvers/first_order/LBFGS 0.226 k allocs: 14 kB 0.226 k allocs: 14 kB 1
multivariate/solvers/first_order/MomentumGradientDescent 1.62 k allocs: 0.0713 MB 1.62 k allocs: 0.0713 MB 1
multivariate/solvers/first_order/NGMRES 1.68 k allocs: 0.142 MB 1.68 k allocs: 0.142 MB 1
multivariate/solvers/second_order/KrylovTrustRegion 0.229 k allocs: 13.5 kB 0.229 k allocs: 13.5 kB 1
multivariate/solvers/second_order/Newton 0.174 k allocs: 10.3 kB 0.174 k allocs: 10.3 kB 1
multivariate/solvers/second_order/NewtonTrustRegion 0.253 k allocs: 23 kB 0.253 k allocs: 23 kB 1
time_to_load 0.153 k allocs: 14.5 kB 0.153 k allocs: 14.5 kB 1

A plot of the benchmark results has been uploaded as an artifact at .

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master 1976c6b... master / 1976c6b...
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.164 ± 0.0098 ms 0.169 ± 0.0075 ms 0.971 ± 0.072
multivariate/problems/rosenbrock/100/Newton 1.39 ± 0.039 ms 1.32 ± 0.021 ms 1.05 ± 0.034
multivariate/problems/rosenbrock/100/NewtonTrustRegion 5.89 ± 0.44 ms 5.99 ± 0.46 ms 0.985 ± 0.11
multivariate/problems/rosenbrock/2/KrylovTrustRegion 21.4 ± 5.4 μs 22 ± 5.6 μs 0.972 ± 0.35
multivariate/problems/rosenbrock/2/Newton 26.6 ± 5.5 μs 27 ± 5.4 μs 0.987 ± 0.28
multivariate/problems/rosenbrock/2/NewtonTrustRegion 0.036 ± 0.0082 ms 0.0353 ± 0.0084 ms 1.02 ± 0.34
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.0384 ± 0.003 ms 0.0386 ± 0.0024 ms 0.997 ± 0.1
multivariate/problems/rosenbrock/20/Newton 0.0775 ± 0.0012 ms 0.0762 ± 0.0011 ms 1.02 ± 0.022
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.315 ± 0.015 ms 0.311 ± 0.014 ms 1.01 ± 0.066
multivariate/problems/saddle/100/KrylovTrustRegion 0.0553 ± 0.0061 ms 0.0585 ± 0.0046 ms 0.947 ± 0.13
multivariate/problems/saddle/100/Newton 0.25 ± 0.014 ms 0.245 ± 0.016 ms 1.02 ± 0.09
multivariate/problems/saddle/100/NewtonTrustRegion 3.1 ± 0.096 ms 3.16 ± 0.086 ms 0.981 ± 0.04
multivariate/problems/saddle/2/KrylovTrustRegion 8.33 ± 0.24 μs 8.61 ± 0.24 μs 0.967 ± 0.039
multivariate/problems/saddle/2/Newton 5.79 ± 0.32 μs 5.75 ± 0.31 μs 1.01 ± 0.078
multivariate/problems/saddle/2/NewtonTrustRegion 12.7 ± 1.1 μs 12.4 ± 1.1 μs 1.03 ± 0.13
multivariate/problems/saddle/20/KrylovTrustRegion 12.7 ± 5.2 μs 12.8 ± 5 μs 0.995 ± 0.56
multivariate/problems/saddle/20/Newton 16.4 ± 0.53 μs 16.1 ± 0.49 μs 1.02 ± 0.045
multivariate/problems/saddle/20/NewtonTrustRegion 0.107 ± 0.0073 ms 0.109 ± 0.005 ms 0.976 ± 0.08
multivariate/solvers/first_order/AdaMax 0.639 ± 0.012 ms 0.639 ± 0.0093 ms 1 ± 0.024
multivariate/solvers/first_order/Adam 0.637 ± 0.0095 ms 0.638 ± 0.0098 ms 0.998 ± 0.021
multivariate/solvers/first_order/BFGS 0.132 ± 0.002 ms 0.133 ± 0.002 ms 0.999 ± 0.022
multivariate/solvers/first_order/ConjugateGradient 0.22 ± 0.0066 ms 0.22 ± 0.0081 ms 1 ± 0.047
multivariate/solvers/first_order/GradientDescent 0.952 ± 0.006 ms 0.953 ± 0.0084 ms 0.999 ± 0.011
multivariate/solvers/first_order/LBFGS 0.149 ± 0.0028 ms 0.15 ± 0.0027 ms 0.997 ± 0.026
multivariate/solvers/first_order/MomentumGradientDescent 1.92 ± 0.017 ms 1.93 ± 0.016 ms 0.996 ± 0.012
multivariate/solvers/first_order/NGMRES 0.943 ± 0.0059 ms 0.946 ± 0.0076 ms 0.997 ± 0.01
multivariate/solvers/second_order/KrylovTrustRegion 0.331 ± 0.0097 ms 0.332 ± 0.0098 ms 0.996 ± 0.041
multivariate/solvers/second_order/Newton 0.222 ± 0.0065 ms 0.223 ± 0.0085 ms 0.998 ± 0.048
multivariate/solvers/second_order/NewtonTrustRegion 0.241 ± 0.0093 ms 0.243 ± 0.012 ms 0.994 ± 0.061
time_to_load 0.363 ± 0.0037 s 0.363 ± 0.0022 s 0.999 ± 0.012
Memory benchmarks
master 1976c6b... master / 1976c6b...
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.561 k allocs: 0.36 MB 0.561 k allocs: 0.36 MB 1
multivariate/problems/rosenbrock/100/Newton 0.496 k allocs: 0.34 MB 0.496 k allocs: 0.34 MB 1
multivariate/problems/rosenbrock/100/NewtonTrustRegion 0.554 k allocs: 4.65 MB 0.554 k allocs: 4.65 MB 1
multivariate/problems/rosenbrock/2/KrylovTrustRegion 0.574 k allocs: 21.3 kB 0.574 k allocs: 21.3 kB 1
multivariate/problems/rosenbrock/2/Newton 0.492 k allocs: 18.4 kB 0.492 k allocs: 18.4 kB 1
multivariate/problems/rosenbrock/2/NewtonTrustRegion 0.458 k allocs: 0.0326 MB 0.458 k allocs: 0.0326 MB 1
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.595 k allocs: 0.0616 MB 0.595 k allocs: 0.0616 MB 1
multivariate/problems/rosenbrock/20/Newton 0.496 k allocs: 0.033 MB 0.496 k allocs: 0.033 MB 1
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.511 k allocs: 0.319 MB 0.511 k allocs: 0.319 MB 1
multivariate/problems/saddle/100/KrylovTrustRegion 0.173 k allocs: 0.211 MB 0.173 k allocs: 0.211 MB 1
multivariate/problems/saddle/100/Newton 0.141 k allocs: 0.352 MB 0.141 k allocs: 0.352 MB 1
multivariate/problems/saddle/100/NewtonTrustRegion 0.338 k allocs: 2.58 MB 0.338 k allocs: 2.58 MB 1
multivariate/problems/saddle/2/KrylovTrustRegion 0.183 k allocs: 7.09 kB 0.183 k allocs: 7.09 kB 1
multivariate/problems/saddle/2/Newton 0.129 k allocs: 5.75 kB 0.129 k allocs: 5.75 kB 1
multivariate/problems/saddle/2/NewtonTrustRegion 0.18 k allocs: 12.3 kB 0.18 k allocs: 12.3 kB 1
multivariate/problems/saddle/20/KrylovTrustRegion 0.17 k allocs: 21.9 kB 0.17 k allocs: 21.9 kB 1
multivariate/problems/saddle/20/Newton 0.133 k allocs: 20.8 kB 0.133 k allocs: 20.8 kB 1
multivariate/problems/saddle/20/NewtonTrustRegion 0.222 k allocs: 0.127 MB 0.222 k allocs: 0.127 MB 1
multivariate/solvers/first_order/AdaMax 0.356 k allocs: 7.27 kB 0.356 k allocs: 7.27 kB 1
multivariate/solvers/first_order/Adam 0.356 k allocs: 7.27 kB 0.356 k allocs: 7.27 kB 1
multivariate/solvers/first_order/BFGS 0.23 k allocs: 8.8 kB 0.23 k allocs: 8.8 kB 1
multivariate/solvers/first_order/ConjugateGradient 0.392 k allocs: 16 kB 0.392 k allocs: 16 kB 1
multivariate/solvers/first_order/GradientDescent 1.52 k allocs: 0.0611 MB 1.52 k allocs: 0.0611 MB 1
multivariate/solvers/first_order/LBFGS 0.325 k allocs: 14 kB 0.325 k allocs: 14 kB 1
multivariate/solvers/first_order/MomentumGradientDescent 1.91 k allocs: 0.0666 MB 1.91 k allocs: 0.0666 MB 1
multivariate/solvers/first_order/NGMRES 3.14 k allocs: 0.156 MB 3.14 k allocs: 0.156 MB 1
multivariate/solvers/second_order/KrylovTrustRegion 0.284 k allocs: 11.3 kB 0.284 k allocs: 11.3 kB 1
multivariate/solvers/second_order/Newton 0.251 k allocs: 10.2 kB 0.251 k allocs: 10.2 kB 1
multivariate/solvers/second_order/NewtonTrustRegion 0.302 k allocs: 19.1 kB 0.302 k allocs: 19.1 kB 1
time_to_load 0.2 k allocs: 11.7 kB 0.2 k allocs: 11.7 kB 1

A plot of the benchmark results has been uploaded as an artifact at .

@pkofod

pkofod commented Oct 19, 2026

Copy link
Copy Markdown
Member

Thanks

@codecov

codecov Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.53%. Comparing base (79cecbc) to head (1976c6b).
⚠️ Report is 8 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1294      +/-   ##
==========================================
+ Coverage   87.51%   87.53%   +0.01%     
==========================================
  Files          52       52              
  Lines        5032     5032              
==========================================
+ Hits         4404     4405       +1     
+ Misses        628      627       -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@inayatku

Copy link
Copy Markdown
Contributor Author

Thank you. The Julia 1 jobs stop before the tests run: on Julia 1.13.2 the test environment cannot install JET, because [compat] allows JET 0.9 to 0.11 and Julia 1.13 needs JET 0.12 (CompatHelper #1269 raises it). The lts and min jobs pass.

@pkofod

pkofod commented Oct 19, 2026

Copy link
Copy Markdown
Member

shoudl work if you rebase

@inayatku

Copy link
Copy Markdown
Contributor Author

Rebased onto master. Thank you.

@pkofod

pkofod commented Oct 24, 2026

Copy link
Copy Markdown
Member

thanks!

@pkofod
pkofod merged commit 8e77e1e into JuliaNLSolvers:master Oct 24, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Particle Swarm Optimization: possible typo in clamping of c2 in update_swarm_params!()

2 participants