問題
私は粒子群最適化について少し調べていたので、テストしてみようと言いました。
私が解決しようとしている問題は、バランス パーティション問題です。または、単純にサブセット合計問題 (合計がすべての数値の半分になる) に縮小されます。
粒子の速度を更新するための一般的な式は
しかし、この質問についてはあまり詳しく説明しません。
サブセット合計問題に対するオンラインでの PSO の試みがないため、代わりに巡回セールスマン問題を調べました。
それらは、訪問した町のセットを取得し、ある町を別の町から減算し、それに対して何らかの操作を行うことを含む、速度を更新するためのアプローチです。
それと上記の式との間に関係は見られませんでした。
私のアプローチ
そこで私は公式を破棄し、部分和問題への独自のアプローチを試みました。
私は基本的にgbest
andを使用しpbest
て、特定の要素をサブセットから削除または追加する確率を決定しました。
つまり、問題空間が[1,2,3,4,5]
(ターゲットが7
または8
) で、現在の[1,None,3,None,None]
粒子(サブセット)gbest
が[None,2,3,None,None]
3
2
1
gbest
私はコードを投稿できますが、それが必要だとは思わないので、アイデアを得ることができます (私は python を使用しています - したがってNone
)。
基本的に、これはある程度機能し、まともな解決策を得ましたが、より大きなデータセットと値では非常に遅くなりました.
私の質問
問題をエンコードして、粒子の「速度」をスマートな方法で更新していますか?
これが正しく収束するかどうかを判断する方法はありますか?
特定の問題空間に対して収束する「更新」式を作成する方法を学ぶために使用できるリソースはありますか?
よろしくお願いします!