当たり前ですが, 最小値は$(x, y)=(0, 0)$のときに$z=0$となります. これを粒子群最適化法を用いて求めます. 粒子群最適化法の解説 以下の記事を参照してください.(§2の添字が一部間違っている?) 粒子群最適化と非線形システム この記事の§2を実装してみます. ソースコード # -*- coding: utf-8 -*- import numpy as np import random #評価関数: z = x^2 + y^2 def criterion(x, y): z = x * x + y * y return z #粒子の位置の更新を行う関数 def update_position(x, y, vx, vy): new_x = x + vx new_y = y + vy return new_x, new_y #粒子の速度の更新を行う関数 def update_v