人工知能と機械学習コースの課題 (4. 機能の最適化)


この記事は、人工知能と機械学習コースの課題 (4. 機能の最適化) の第 4 部です。

この記事は学習の参考のみを目的としています。


他の章にジャンプします:

1. 知識工学の基礎

2. 関数近似

3. ファジーロジック

4. 機能の最適化


4. 機能の最適化


Q: GAPSOを使用して、次の関数の最小値問題を調べます。

f(x_{1},x_{2})=2cos(x_{1}x_{2})+3x_{1}+x_{2}^{2},x_{1},x_{2}\in [-5,5]

必要とする:

1.アルゴリズムの設計とアルゴリズムの実装 (コーディング、選択、交叉、突然変異などの具体的な方法と手順を書き留めます)。

2.アルゴリズムの関連パラメーター (母集団サイズ、反復回数、交叉と突然変異の確率、慣性重み、学習係数など) を変更し、最適化パフォーマンスに対するそれらの影響を調査します。

3. 2 つのアルゴリズムの結果の分析と比較。

4.1機能の可視化

       まず、目的関数のイメージを描画します: 関数の値は Z 座標として使用され、ドメイン [-5, 5] のイメージがさまざまな精度を使用して視覚的に表示されます。精度はそれぞれ n=100、n=1000 です。機能イメージを図 4-1 に示します。図 4-2 に示すように、視覚的な表示コードは次のとおりです。

%% 函数可视化MATLAB源码
figure(1)
x_1 = linspace(-5,5,100); % 设置x轴的范围
x_2 = x_1; % 设置y轴范围
[X_1,X_2] = meshgrid(x_1,x_2); % 将其x,y轴网格化
f = 2.*cos(X_1.*X_2) + 3.*X_1 + X_2.^2;
Fig = mesh(X_1,X_2,f); % 绘制三维曲面图
title('函数f三维曲面图')
xlabel('x_1')
ylabel('x_2')
zlabel('f')
grid on

 図 4-1 精度 n=100 関数のイメージ

図 4-2 精度 n=1000 関数のイメージ

4.2遺伝的アルゴリズム関数の最適化

       遺伝的アルゴリズム (GA) は、生物学的システムに関するコンピューター シミュレーション研究に由来します [3]。これは、自然界の生物進化メカニズムを模倣するために開発された確率的大域探索および最適化手法であり、ダーウィンの進化論とメンデルの遺伝学理論に基づいています。これは本質的に、検索プロセス中に検索空間に関する知識を自動的に取得して蓄積し、最適なソリューションを得るために検索プロセスを適応的に制御できる、効率的で並列的なグローバル検索方法です [4、5]。

4.2.1遺伝的アルゴリズムの原理

       生物進化の理論によれば、遺伝的アルゴリズムは、生物進化のプロセスに解決すべき問題をシミュレートし、自然生物の生殖と進化のプロセス、遺伝子交叉、遺伝子突然変異などのプロセスをシミュレートすることによって、次の世代を生成し、徐々に生成します。適応度の低い個体や解を排除し、より適応度の高い個体や解を保持することを「自然選択と適者生存」といいます。限られた世代の進化の後、非常に高い適応度を持つ個体が進化する可能性が高い[6]。

       遺伝的アルゴリズムの関連用語を表 4-1 に示します。

表 4-1 遺伝的アルゴリズムに関連する用語の名称、記号および説明

名前

表現と記号

説明する

遺伝子

遺伝子型

個体の基本情報、形質染色体の内部発現を伝える

染色体

染色体

特定の数の遺伝子のベクトル

表現型

表現型

遺伝子型に従って形成された個体の外部発現、形質染色体の外部発現

個人

個人

生物のあらゆる特徴を備えた存在

人口

人口

複数の個人のセット

選ぶ

選択

適応力の低い個体を集団から排除し、適応力の強い個体を維持するプロセス

クロス

クロスオーバー

2つの染色体間で1つまたは複数の遺伝子を交換するプロセス

突然変異

突然変異

染色体上の 1 つまたは複数の遺伝子の突然変異のプロセス

適応力

フィットネス

個人の適応力を評価する指標

コーディング

コーディング

遺伝子を染色体に書き込むプロセス

デコード

デコード

染色体から遺伝子への逆コーディングプロセス

       遺伝的アルゴリズムの設計は次のとおりです。

       1. 染色体コーディング: 遺伝的アルゴリズムにおける一般的なコーディング方法には、バイナリコーディング、浮動小数点コーディング、位置コーディングなどが含まれます。バイナリ エンコードの具体的な操作を説明する例を次に示します: x->f マッピング関係の f(x) 関数の場合、独立変数 x の値の範囲は [a, b] です。バイナリ 10 進変換によると、関係から、次のような最小 ε 値を見つけることができます。

2^{\varepsilon}-1\geq \frac{ba}{\xi }

このうち、ε は符号化された 2 進数の長さ、ξ は精度であり、たとえば ξ=0.1 とすると、取り得る独立変数の最小桁数は小数点以下 1 桁であり、ξ は一般に 1 になります。 、0.1、0.01、0.001など たとえば、ここで a=63、b=0、ξ=1 の場合、符号化された 2 進数の最小長は ε=6 として取得できます。0 ~ 63 までの任意の整数は 6 ビットの 2 進数で表現でき、10 と 60 をエンコードすると、それぞれ [001010] と [111100] の染色体が得られます。バイナリコーディングは実際によく使用されており、単純な数字 0 と 1 を使用して染色体上の遺伝子表現型をシミュレートでき、その後の染色体選択、遺伝子交叉、遺伝子突然変異のためのより便利な操作も提供します。

       2. 母集団の初期化: 母集団のサイズの設定は、計算効率と最適解が見つかるかどうかに直接影響します。母集団サイズの設定は主に、母集団の多様性を考慮すると局所最適性に陥らないように母集団は大きい方が良いこと、計算効率を考慮すると母集団が大きいほど計算量が増加し、各世代の計算時間は増加します。したがって、人口規模は実態に基づいて設定する必要がある。

       3. 個別の適応度を計算する: まず、適応度関数を決定します。適応度関数の選択は、遺伝的アルゴリズムの収束速度に直接影響し、全体的な最適解を見つけることができるかどうかも決定します。適応度関数の機能は、集団内の個人の環境適応性を評価することであり、適応度が高い個人は生存の可能性が高くなります。適合度関数は、さまざまなモデルで関数の形式をとる場合もあれば、固定値である場合もあります。

       4. 選択:遺伝的アルゴリズムにおける選択は、一般にルーレット方式と競争方式に分けられます。ルーレット法では、母集団内のすべての個体の適応度を正規化し、そのデータを各個体の確率として取得し、乱数[0,1]を生成することで、選択された個体の最大確率を決定します。競争方法の考え方は非常にシンプルで、母集団の中からランダムに2人以上の個体を選んで適応度を比較し、最も適応度の高い個体が自分を次世代としてコピーし、残った個体は淘汰されるというものです。競争法では、選ばれた個体数が2匹より多くても、子が1匹しかいない場合は個体数は減少し続け、逆に子の数が親の数より多い場合は個体数は減少します。全体的な最適解を見つけることが重要ですが、すべてが何らかの困難を引き起こします。

       5. 交叉: 交叉突然変異には、単一点交叉と多点交叉が含まれます。一点交叉では、2 つの個体とその染色体上の同じ位置にある遺伝子をランダムに選択し、遺伝子の位置を交換して新しい染色体を持つ 2 つの個体を取得します。遺伝的アルゴリズムの交差突然変異は、染色体の交差組み換えに似ています。

       6. 突然変異:遺伝子突然変異には、単一点突然変異と多点突然変異が含まれます。つまり、染色体上の 1 つ以上の遺伝子が突然変異操作のためにランダムに選択されます。

       7. デコード: 最後の世代集団の最適な個体は、エンコードから解へのマッピングを実現するためにエンコードの逆操作を受け、この結果が問題の近似最適解として使用されます。遺伝的アルゴリズムのフローチャートを図 4-3 に示します。

 図 4-3 遺伝的アルゴリズムのフローチャート

       遺伝的アルゴリズムのプロセスは次のとおりです。

       (1) 初期集団サイズ、交叉突然変異確率、遺伝子突然変異確率、および集団進化反復数ハイパーパラメーターを初期化します。そしてすべての個人をコード化します。

       (2) 適切な適応度関数を与え、母集団内の各個体の適応度値を計算します。

       (3) ルーレット方式や競争方式で、この世代の適者勝ちを勝ち取ります。

       (4) 交叉突然変異の確率に応じて、単一点または多点交叉突然変異が子孫に採用されます。

       (5) 遺伝的変異の確率に応じて、子孫における単一点または多点の遺伝的変異を使用します。

       (6) 初期化で設定した集団進化の反復回数に達したかどうかを判定し、到達していない場合は、次の集団反復に入り、この子孫を親として使用し、再び 2 から開始します。満足している場合は、遺伝学を終了し、最後の世代のすべての個体とその適応を記録します。

       (7) 最後の世代で最適な適応度値を見つけ、それを復号して解空間での値を取得します。

       遺伝的アルゴリズムの設計と組み合わせて、一般的に使用されるパラメータの設計原則を表 4-2 に示します。

表 4-2 遺伝的アルゴリズムパラメータの共通設計原則

名前

シンボル

価値

人口規模(個体数)

S

[1,100]

交差突然変異の確率

パソコン

[0.4、0.99]

遺伝子変異の確率

午後

[0.0001,0.2]

集団進化の反復回数

G

[100,500]

4.2.2遺伝的アルゴリズムの実装手順

       1. まず適合度関数を決定します MATLAB ソース コードは次のとおりです。

%% 适应度函数fitness MATLAB源码
function fx = fitness(x)
fx = 2*cos(x(1)*x(2)) + 3*x(1) + x(2)^2;
end

       2. 次に、表 4-3 に示すように遺伝的アルゴリズム モデル パラメーターを決定します。遺伝的アルゴリズム モデル パラメーターを gaoptimset で設定し、解空間、集団サイズ、交叉確率、突然変異確率、最大反復回数などのパラメーターを設定します。構造体 optiGA.MATLAB ソース コードは次のとおりです。

表 4-3 遺伝的アルゴリズムのパラメータ設定

名前

シンボル

価値

人口規模(個体数)

S

100

交差突然変異の確率

パソコン

0.8

遺伝子変異の確率

午後

0.1

集団進化の反復回数

G

100

%% 遗传算法主函数MATLAB源码
%% GA调参
optiGA = gaoptimset;
optiGA.PopInitRange = [[-5 -5];[5 5]];% 个体解空间
optiGA.PopulationSize = 100;% 种群规模
optiGA.EliteCount = 2;% 每次迭代保留下来的个体数量
optiGA.CrossoverFraction = 0.8;% 交叉概率
optiGA.MutationFraction = 0.1;% 变异概率
optiGA.Generations = 100;% 最大迭代次数
optiGA.MutationFcn = @mutationuniform;%变异函数句柄
optiGA.PlotFcns = @gaplotbestf;
optiGA.TolFun = 1.000e-006;

numOfVars = 2;%变量个数

%% 运行GA
[x,fval] = ga(@fitness,numOfVars,optiGA)
disp('min(fx) is:')
fx = 2*cos(x(1)*x(2)) + 3*x(1) + x(2)^2

この演算により、表 4-4 に示すように、 x 1、x 2、       最適な個体の最良の適応度、つまり f 値が得られ、性能関数 (適応度関数値) の低下曲線は次のようになります。図 4-4(a) に示すように、関数グラフ上で最適な個体の位置をマークします (図 4-4(b))。モデルの品質を評価するには複雑さも必要ですので、実行時間と実行メモリ率は図 4-5 に示すようにプロットされます。

表 4-4 最適な個人と最適な適応度

× 1

× 2

f

-4.911066980849371

-0.556144351064970

-16.257882472418547

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-4 遺伝的アルゴリズムの実行結果

図 4-5 複雑さと実行メモリの比率

4.2.3遺伝的アルゴリズム関連パラメータの変更

       アルゴリズムの関連パラメーターを変更し、表 4-5 に示すように母集団サイズ n、反復数 m、交叉確率 Pc および突然変異確率 Pm のモデル パラメーターを変更し、最適化パフォーマンスへの影響を調査します。

表 4-5 遺伝的アルゴリズム関連パラメータの変更

パラメータの変更

パラメータ値

その他のパラメータ

人口サイズn

30

m=100

Pc=0.8

Pm=0.1

60

100

150

反復回数 m

30

n=100

Pc=0.8

Pm=0.1

50

70

150

交叉確率 Pc

0.5

n=100

m=100

Pm=0.1

0.6

0.7

0.9

0.95

突然変異確率 Pm

0.01

n=100

m=100

Pc=0.8

0.05

0.2

       母集団サイズ: 30、60、100、150、反復数: 30、50、70、150、交叉確率: 0.5、0.6、0.7、0.8、0.9、0.95、突然変異確率: 0.01 、0.05、0.1、0.2、順列および組み合わせ手法を使用して、遺伝的アルゴリズムのハイパーパラメータのグリッド最適化を実行します。まず、母集団サイズに対してグリッド最適化を実行します。結果は図 4-6、図 4-7、図 4-8、および図 4-9 に示されています。

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-6 母集団サイズが 30 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-7 母集団サイズが 60 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-8 母集団サイズが 100 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-9 母集団サイズが 150 の場合の遺伝的アルゴリズムの実行結果

       次に、反復回数に対してグリッドの最適化を実行します。結果は図 4-10、図 4-11、図 4-12、および図 4-13 に示されています。

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-10 反復回数が 30 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-11 反復回数が 50 回の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-12 反復回数が 70 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-13 反復回数が 150 の場合の遺伝的アルゴリズムの実行結果

       交叉確率に対してグリッドの最適化を実行します。結果を図 4-14、図 4-15、図 4-16、図 4-17、および図 4-18 に示します。

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-14 交叉確率が 0.5 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-15 交叉確率が 0.6 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-16 交叉確率が 0.7 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-17 交叉確率が 0.9 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-18 交叉確率が 0.95 の場合の遺伝的アルゴリズムの実行結果

        交叉突然変異確率に対してグリッド最適化を実行します。結果を図 4-19、図 4-20、および図 4-21 に示します。

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-19 突然変異確率が 0.01 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-20 突然変異確率が 0.05 の場合の遺伝的アルゴリズムの実行結果

(a) 適応度関数値の減少曲線 (b) 最適な個体位置

図 4-21 突然変異確率が 0.2 の場合の遺伝的アルゴリズムの実行結果

4.2.4実験結果の分析とまとめ

       各染色体の初期位置、ランダムに生成される個々の交叉確率と毎回の突然変異確率、交叉突然変異に乗算される乱数などの遺伝的アルゴリズムの内部パラメーターはすべてランダムに生成されるため、それぞれの結果が得られます。 run はおそらく異なるため、必ずしも全体的に最適であるとは限りません。上記のハイパーパラメータ グリッド最適化の結果は、表 4-5 に示すように要約できます。

表 4-6 遺伝的アルゴリズム関連のパラメーターと結果の変更

パラメータの変更

パラメータ値

その他のパラメータ

 ( × 1、× 2)

最小値

GA実行時間

人口サイズn

30

m=100

Pc=0.8

Pm=0.1

-4.6218、0.5749

-15.3046

1.837

60

-4.9887、-0.8666

-14.9743

1.880

100

-4.8501、-0.6944

-16.0172

1.336

150

-4.7370、0.6640

-15.7700

2.089

反復回数 m

30

n=100

Pc=0.8

Pm=0.1

-4.4339、-0.7402

-14.7341

1.788

50

-4.8595、-0.6448

-16.1628

2.062

70

-4.9638、0.6300

-16.4943

2.051

150

-4.9819、0.6320

-16.5463

1.790

交叉確率 Pc

0.5

n=100

m=100

Pm=0.1

-4.9964、-0.6090

-16.6086

1.915

0.6

-4.7343、-0.6914

-15.7076

2.033

0.7

-4.9796、0.5859

-16.5455

1.873

0.9

-4.7679、0.6242

-15.8869

1.391

0.95

-4.9780、-0.6230

-16.5443

2.232

突然変異確率 Pm

0.01

n=100

m=100

Pc=0.8

-4.9983、-0.5948

-16.6127

1.949

0.05

-4.9987、-0.6134

-16.6141

2.358

0.2

-4.9237、-0.6343

-16.3684

2.004

       すべてのハイパーパラメータ モデルで( x 1, x 2) 、目的関数の最小値と遺伝的アルゴリズムの実行時間を観察します。これにより、最小関数値の染色体 ( x 1, x 2)=(-4.9987, -0.6134)、モデルの母集団数は 100、反復回数は 100、交叉確率は 0.8、突然変異確率は 0.05 です。遺伝的アルゴリズムの実行時間は 2.358 秒です。遺伝的アルゴリズムの実行時間が 1.949、突然変異確率が 0.01 のモデルと比較すると、その時間計算量と空間計算量は最適モデルと同じです。これは、ここでの実行時間はそれほど重要ではなく、無視できるためです。上の表から次のことがわかります。

       1. 遺伝的アルゴリズムの最適化パフォーマンスに対する集団サイズの影響

       种群规模不宜太大,也不宜太小。群体规模太小,会出现近亲交配,产生病态基因,而且造成有效等位基因先天缺失,即使采用较大概率的变异算子,生成具有竞争力高阶模式的可能性仍然核销,况且大概率变异算子对已有模式的破坏作用极大[7]。同时,遗传算子存在随机误差(模式采样误差),妨碍小群体中有效模式的正确传播,使得种群进化不能按照模式定理产生所预期的期望数量;种群规模太大,如果迭代次数不够,难以收敛,使系统鲁棒性下降,还会增加时间复杂度和空间复杂度,与遍历效果差不多,没有意义。在该问题中,选择种群规模100为佳。

       2、迭代次数对遗传算法优化性能的影响

       进化代数太小,算法不容易收敛,种群还没有成熟就已经结束,并输出最优个体,很明显这样的结果往往不是最优的,除非恰好在极值处取到;进化代数太大,算法已经熟练或者种群过于早熟不可能再收敛,继续进化没有意义,只会增加时间开支和资源浪费。在该问题中,选择迭代次数100为佳。

       3、交叉概率对遗传算法优化性能的影响

       交叉概率太大容易破坏已有的有利模式,随机性增大,容易错失最优个体;交叉概率太小不能有效更新种群。在该问题中,选择交叉概率0.8为佳。

       4、变异概率对遗传算法优化性能的影响

       变异概率太小种群的多样性下降太快,容易导致有效基因的迅速丢失且不容易修补;变异概率太大,尽管种群的多样性可以得到保证,但是高阶模式被破坏的概率也随之增大在该问题中,选择变异概率0.05为佳。

     最终得到函数最小值的染色体(x1,x2)=(-4.9987, -0.6134),函数在该定义域下的最小值为-16.6141,算法用时2.358s。

4.3 粒子群算法函数优化

       粒子群算法(PSO)属于群智能算法的一种,是通过模拟鸟群捕食行为设计的。假设区域里就只有一块食物(即通常优化问题中所讲的最优解),鸟群的任务是找到这个食物源[8]。鸟群在整个搜寻的过程中,通过相互传递各自的信息,让其他的鸟知道自己的位置,通过这样的协作,来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终,整个鸟群都能聚集在食物源周围,即我们所说的找到了最优解,即问题收敛。

4.3.1 粒子群算法原理

       粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度V和位置X,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值Pbest,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解Gbest,粒子群中的所有粒子根据自己找到的当前个体极值Pbest和整个粒子群共享的当前全局最优解Gbest来调整自己的速度和位置。粒子群算法的思想相对比较简单,主要分为:1、初始化粒子群;2、评价粒子,即计算适应值;3、寻找个体极值Pbest;4、寻找全局最优解Gbest;5、修改粒子的速度和位置[9, 10]。

       主要步骤如下:

       1、初始化

       首先,我们需要设置最大的速度区间,防止超出最大的区间。位置信息即为整个搜索空间,我们在速度区间和搜索空间上随机初始化速度和位置。设置群体规模m

       2、个体极值与全局最优解

       个体极值为每个粒子找到的历史上最优的位置信息,并从这些个体历史最优解中找到一个全局最优解,并与历史最优解比较,选出最佳的作为当前的历史最优解。

       3、更新速度和位置

       按式(4-1)更新粒子速度与位置:

 V_{id}=\omega V_{id}+c_{1}\times rand\times (P_{id}-X_{id})+c_{2}\times rand\times (P_{gd}-X_{ ID})

X_{id}=X_{id}+V_{id}

 式中,ω为惯性因子;c1、c2为加速常数;rand为[0, 1]的随机数;Pid表示第i个变量的个体极值的第d维;Pgd表示全局最优解的第d维。

       4、终止条件

       有两种终止条件可以选择,一是最大代数:t;二是相邻两代之间的偏差在一个指定的范围内即停止。

4.3.2 粒子群算法实验步骤

       1、设置模型超参数:种群规模、惯性权重、学习因子,最大迭代次数等,设置模型超参数MATLAB源码如下:

%% 设置模型超参数MATLAB源码
%% PSO
% 初始化超参数,模型等
Size = 100;
Dimension = 2;
time = 200;
c1 = 1.5;
c2 = 1.5;
Wmax = 0.5;
Wmin = 0.1;
Pmax = 5;
Pmin = -5;
Vmax = 1;
Vmin = -1;

       2、初始化种群个体的位置与速度MATLAB源码如下:

%% 初始化粒子位置与速度MATLAB源码
% 初始化种群个体的位置与速度
x = rand(Size, Dimension)*(Pmax-Pmin)+Pmin;
v = rand(Size, Dimension)*(Vmax-Vmin)+Vmin;

       3、初始化个体最优位置和最优值MATLAB源码如下:

%% 初始化粒子最优位置和最优值MATLAB源码
% 初始化个体最优位置和最优值
p = x;
pbest = ones(Size, 1);
for i = 1:Size
    pbest(i) = fitness(x(i,:));
end

       4、初始化全局最优位置和最优值MATLAB源码如下:

%% 初始化全局最优位置和最优值MATLAB源码
% 初始化全局最优位置和最优值
g = ones(1, Dimension);
gbest = inf;
for i = 1:Size
    if pbest(i) < gbest
        g = p(i,:);
        gbest = pbest(i);
    end
end
gb = ones(1, time);

       5、迭代开始直至终止,注意:适应度函数与遗传算法的适应度函数相同,因此直接调用fitness子函数即可。迭代与终止MATLAB源码如下

%% 迭代与终止MATLAB源码
for i = 1:time
    for j = 1:Size
        if fitness(x(j,:)) < pbest(j)% 更新个体最优位置和最优值
            p(j,:) = x(j,:);
            pbest(j) = fitness(x(j,:));
        end
        if pbest(j) < gbest% 更新全局最优位置和最优质
            g = p(j,:);
            gbest = pbest(j);
        end
        w = Wmax-(Wmax-Wmin)*i/time;% 动态计算惯性权重值
        v(j,:) = w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));% 更新速度
        x(j,:) = x(j,:)+v(j,:);% 更新位置
        for k = 1:Dimension% 边界条件处理
            if (v(j,k) > Vmax) || (v(j,k) < Vmin)
                v(j,k) = rand*(Vmax-Vmin)+Vmin;
            end
            if (x(j,k) > Pmax) || (x(j,k) < Pmin)
                x(j,k) = rand*(Pmax - Pmin) + Pmin;
            end
        end
    end
    gb(i) = gbest;% 记录历代全局最优值
end

       6、输出最优个体、最优值,并绘制适应度曲线,MATLAB源码如下:

%% 输出最优结果与适应度曲线绘制MATLAB源码
g % 最优个体
gb(end) % 最优值
figure(2)
plot(gb,'LineWidth',2)
xlabel('Time')
ylabel('1/Fitness')
title('Fitness Curve') 

       运行得到最优粒子的x1、x2以及最佳适应度即f值分别别如表4-7所示,性能函数(适应度函数值)的下降曲线如图4-22(b),并在函数图中标注最优个体的位置如图4-22(a),与遗传算法同理,还需要用复杂度来评价模型优劣,因此绘制运行时长及运行内存占比情况如图4-23所示。

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-22 粒子群算法运行结果

表4-7 最优粒子和最佳适应度

x1

x2

f

f-4.999982360428467

0.601048524601063

-16.620122324415950

图4-23 复杂度与运行内存占比

4.3.3 改变粒子群算法相关参数

       改变粒子群算法的相关参数:种群规模s、迭代次数t、学习因子c1、c2、惯性权重上限wmax、惯性权重下限wmin如表4-8所示,研究它们对粒子群函数优化性能的影响。

表4-8 改变粒子群算法相关参数

改变参数

参数值

其他参数

种群规模s

50

t=200

c1,c2=1.5

wmax=0.5,wmin=0.1

100

150

迭代次数t

50

s=100

c1,c2=1.5

wmax=0.5,wmin=0.1

100

150

学习因子c1

1.3

s=100

t=200

c2=1.5

wmax=0.5,wmin=0.1

1.7

1.9

学习因子c2

1.3

s=100

t=200

c1=1.5

wmax=0.5,wmin=0.1

1.7

1.9

惯性权重上限wmax

0.6

s=100

t=200

c1,c2=1.5

wmin=0.1

0.7

0.8

惯性权重下限wmin

0.2

s=100

t=200

c1,c2=1.5

wmax=0.5

0.3

0.4

       种群规模为:50、100、150,迭代次数为:50、100、150,学习因子c1为:1.3、1.7、1.9,学习因子c2为:1.3、1.7、1.9,惯性权重上限wmax为:0.6、0.7、0.8,惯性权重下限wmin为:0.2、0.3、0.4,使用排列组合的方式,对粒子群算法超参数进行网格寻优。首先对种群规模进行网格寻优,结果如图4-24、图4-25、图4-26。

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-24 种群规模50时粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-25 种群规模100时粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-26 种群规模150时粒子群算法运行结果

       然后对迭代次数进行网格寻优,结果如图4-27、图4-28、图4-29。

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-27 迭代次数50时粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-28 迭代次数100时粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-29 迭代次数150时粒子群算法运行结果

       对学习因子c1进行网格寻优,结果如图4-30、图4-31、图4-32。

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-30 学习因子c1=1.3粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-31 学习因子c1=1.7粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-32 学习因子c1=1.9粒子群算法运行结果

        对学习因子c2进行网格寻优,结果如图4-33、图4-34、图4-35。

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-33 学习因子c2=1.3粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-34 学习因子c2=1.7粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-35 学习因子c2=1.9粒子群算法运行结果

        惯性权重上限wmax进行网格寻优,结果如图4-36、图4-37、图4-38。

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-36 惯性权重上限0.6粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-37 惯性权重上限0.7粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-38 惯性权重上限0.8粒子群算法运行结果

        惯性权重下限wmin进行网格寻优,结果如图4-39、图4-40、图4-41。

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-39 惯性权重下限0.2粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-40 惯性权重下限0.3粒子群算法运行结果

(a) 最优粒子位置                      (b) 适应度函数下降曲线

图4-41 惯性权重下限0.4粒子群算法运行结果

4.3.4 实验结果分析与总结

       在以上的超参数网格寻优中的结果可以整理如表4-9所示。

表4-9 改变粒子群算法相关参数与运行结果

改变参数

参数值

其他参数

(x1,x2)

最小值

PSO运行时间

种群规模s

50

t=200

c1,c2=1.5

wmax=0.5,wmin=0.1

-4.9995, -0.5984

-16.6179

0.487

100

-4.9999, 0.6039

-16.6200

0.536

150

-4.9999, -0.6038

-16.6201

0.659

迭代次数t

50

s=100

c1,c2=1.5

wmax=0.5,wmin=0.1

-4.9996, 0.6136

-16.6170

0.540

100

-4.9998, 0.6105

-16.6187

0.481

150

-4.9995, -0.6010

-16.6186

0.521

学习因子c1

1.3

s=100

t=200

c2=1.5

wmax=0.5,wmin=0.1

-5.0000, 0.6079

-16.6200

0.571

1.7

-4.9999, 0.6090

-16.6195

0.615

1.9

-4.9999, 0.6031

-16.6200

0.552

学习因子c2

1.3

s=100

t=200

c1=1.5

wmax=0.5,wmin=0.1

-4.9999, 0.6044

-16.6202

0.606

1.7

-4.9998, -0.6077

-16.6195

0.556

1.9

-4.9995, -0.6068

-16.6185

0.530

惯性权重上限wmax

0.6

s=100

t=200

c1,c2=1.5

wmin=0.1

-4.9997, -0.6084

-16.6190

0.533

0.7

-4.9998, -0.6000

-16.6195

0.549

0.8

-5.0000, -0.6072

-16.6202

0.598

惯性权重下限wmin

0.2

s=100

t=200

c1,c2=1.5

wmax=0.5

-4.9998, -0.6071

-16.6195

0.611

0.3

-4.9999, -0.6011

-16.6199

0.640

0.4

-5.0000, -0.6096

-16.6196

0.606

       观察不同超参数粒子群算法模型下的(x1,x2),目标函数最小值以及粒子群算法运行时间,使得函数最小值的粒子(x1,x2)=(-4.9999, 0.6044)、(x1,x2)=(-5.0000, -0.6072),两个模型参数如下:种群数目为100,迭代次数为200,学习因子c1均为1.5、,学习因子c2分别为1.3、1.5,惯性权重上限wmax分别为0.5、0.8,惯性权重下限wmin均为0.1。算法的运行时间分别为0.606s、0.598s。分析其时间复杂度和空间复杂度相同,因此我认为虽然运行时间不同,但相差不大,运行时间并不是非常重要,可以忽略不计。通过上表可知:粒子群算法的精度,不一定是哪个参数越大或越小越好,关键在于多个参数之间的配合,就譬如以上实验中,虽然模型参数不同(不同学习因子c2、惯性权重上限wmax),且(x1,x2)也不相同,但最优值非常相近,更加证明了以上总结。

       最终得到函数最小值的粒子(x1,x2)=(-4.9999, 0.6044)、(x1,x2)=(-5.0000, -0.6072),函数在该定义域下的最小值为-16.6202,算法用时0.606s、0.598s。

4.4 GAPSO结果比较与性能分析

4.4.1 结果比较

       GA与PSO在该问题(函数优化)上的相关参数与结果如表4-10、表4-11所示。

表4-10 遗传算法相关参数及结果

改变参数

参数值

其他参数

 (x1,x2)

f最小值

GA运行时间

种群规模n

30

m=100

Pc=0.8

Pm=0.1

-4.6218, 0.5749

-15.3046

1.837

60

-4.9887, -0.8666

-14.9743

1.880

100

-4.8501, -0.6944

-16.0172

1.336

150

-4.7370, 0.6640

-15.7700

2.089

迭代次数m

30

n=100

Pc=0.8

Pm=0.1

-4.4339, -0.7402

-14.7341

1.788

50

-4.8595, -0.6448

-16.1628

2.062

70

-4.9638, 0.6300

-16.4943

2.051

150

-4.9819, 0.6320

-16.5463

1.790

交叉概率Pc

0.5

n=100

m=100

Pm=0.1

-4.9964, -0.6090

-16.6086

1.915

0.6

-4.7343, -0.6914

-15.7076

2.033

0.7

-4.9796, 0.5859

-16.5455

1.873

0.9

-4.7679, 0.6242

-15.8869

1.391

0.95

-4.9780, -0.6230

-16.5443

2.232

变异概率Pm

0.01

n=100

m=100

Pc=0.8

-4.9983, -0.5948

-16.6127

1.949

0.05

-4.9987, -0.6134

-16.6141

2.358

0.2

-4.9237, -0.6343

-16.3684

2.004

       在遗传算法中,最终得到函数最小值的染色体(x1,x2)=(-4.9987, -0.6134),函数在该定义域下的最小值为-16.6141,算法用时2.358s,最优模型的种群数目为100,迭代次数为100,交叉概率为0.8,变异概率为0.05。

      在粒子群算法中,最终得到函数最小值的粒子(x1,x2)=(-4.9999, 0.6044)、(x1,x2)=(-5.0000, -0.6072),函数在该定义域下的最小值为-16.6202,算法用时0.606s、0.598s。两个模型参数:种群数目为100,迭代次数为200,学习因子c1均为1.5、,学习因子c2分别为1.3、1.5,惯性权重上限wmax分别为0.5、0.8,惯性权重下限wmin均为0.1。相对而言,该问题中,如果利用MATLAB,遗传算法更容易实现,但需要费时调整模型超参数,而对于粒子群算法,编程需要花时间,但相同时间下,相对于遗传算法能获得更好的结果。

表4-11 改变粒子群算法相关参数与运行结果

改变参数

参数值

其他参数

(x1,x2)

最小值

PSO运行时间

种群规模s

50

t=200

c1,c2=1.5

wmax=0.5,wmin=0.1

-4.9995, -0.5984

-16.6179

0.487

100

-4.9999, 0.6039

-16.6200

0.536

150

-4.9999, -0.6038

-16.6201

0.659

迭代次数t

50

s=100

c1,c2=1.5

wmax=0.5,wmin=0.1

-4.9996, 0.6136

-16.6170

0.540

100

-4.9998, 0.6105

-16.6187

0.481

150

-4.9995, -0.6010

-16.6186

0.521

学习因子c1

1.3

s=100

t=200

c2=1.5

wmax=0.5,wmin=0.1

-5.0000, 0.6079

-16.6200

0.571

1.7

-4.9999, 0.6090

-16.6195

0.615

1.9

-4.9999, 0.6031

-16.6200

0.552

学习因子c2

1.3

s=100

t=200

c1=1.5

wmax=0.5,wmin=0.1

-4.9999, 0.6044

-16.6202

0.606

1.7

-4.9998, -0.6077

-16.6195

0.556

1.9

-4.9995, -0.6068

-16.6185

0.530

惯性权重上限wmax

0.6

s=100

t=200

c1,c2=1.5

wmin=0.1

-4.9997, -0.6084

-16.6190

0.533

0.7

-4.9998, -0.6000

-16.6195

0.549

0.8

-5.0000, -0.6072

-16.6202

0.598

惯性权重下限wmin

0.2

s=100

t=200

c1,c2=1.5

wmax=0.5

-4.9998, -0.6071

-16.6195

0.611

0.3

-4.9999, -0.6011

-16.6199

0.640

0.4

-5.0000, -0.6096

-16.6196

0.606

4.4.2 GAPSO性能分析与相同点

       GA和PSO都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解[11]GAPSO相同点如下:

       1、都属于仿生算法。PSO主要模拟鸟类觅食、人类认知等社会行为而提出;GA主要借用生物进化中适者生存的规律。

       2、都属于全局优化方法。两种算法都是在解空间随机产生初始种群,因而算法在全局的解空间进行搜索,且将搜索重点集中在性能高的部分。

       3、都属于随机搜索算法。都是通过随机优化方法更新种群和搜索最优点。PSO中认知项和社会项前都加有随机数;而GA的遗传操作均属随机操作。

       4、都隐含并行性。搜索过程是从问题解的一个集合开始的,而不是从单个个体开始,具有隐含并行搜索特性,从而减小了陷入局部极小的可能性。并且由于这种并行性,易在并行计算机上实现,以提高算法性能和效率。

       5、根据个体的适配信息进行搜索,因此不受函数约束条件的限制,如连续性、可导性等。

       6、对高维复杂问题,往往会遇到早熟收敛和收敛性能差的缺点,都无法保证收敛到最优点。

4.4.3 GAPSO不同点

       GA与PSO不同点如下:

       1、PSO有记忆,好的解的所有知识都保存,而GA没有记忆,以前的知识随着种群的改变被破坏。

       2、在GA算法中,染色体之间相互共享信息,所以整个种群的移动是比较均匀地向最优区域移动。PSO中的粒子仅仅通过当前搜索到最优点进行共享信息,所以很大程度上这是一种单项信息共享机制,整个搜索更新过程是跟随当前最优解的过程。在大多数情况下,所有粒子可能比遗传算法中的进化个体以更快速度收敛于最优解。

       3. GAのコーディング技術と遺伝的操作は比較的単純ですが、GAと比較すると、 PSO はコーディングを必要とせず、交叉や突然変異操作もありません。粒子は内部速度によってのみ更新されるため、原理はより単純です。パラメータが少なくなり、実装が簡単になります。

       4. 収束に関しては、GA はすでに比較的成熟した収束解析手法を備えており、収束速度を推定できますが、この分野におけるPSO の研究はまだ比較的弱いです。単純化された決定論的バージョンの収束分析はありますが、決定論を確率論に変換するにはさらなる研究が必要です。

       5. 応用面では、PSOアルゴリズムは主にニューラル ネットワークのトレーニングや関数の最適化などの連続問題に使用されますが、GA は連続問題に加えてTSP問題、店主問題などの離散問題にも適用できます。、ワークショップのスケジュールなど。

4.5実験の概要と洞察

参考文献

[1] Shui Jijun、ディープラーニング ニューラル ネットワーク (3) 初心者でもわかる逆伝播アルゴリズム、https://blog.csdn.net/HISJJ/article/details/126953224?spm=1001.2014.3001.5501、202.12.31。

[2] Wang Xudong Shao Huihe 、RBFニューラル ネットワーク理論と制御におけるその応用[J]、情報と制御、1997(04):32-44。

[3] Jin Xidong. 遺伝的アルゴリズムとその応用[D]. 成都: 西南交通大学、1996 年。

[4] Ji Genlin. 遺伝的アルゴリズム研究のレビュー [J]. コンピュータ アプリケーションとソフトウェア、2004 年、21(2):5。

[5] Wang Q、Spronck P、Tracht R. 制御工学の問題に適用される遺伝的アルゴリズムの概要[C]// 機械学習とサイバネティクス、2003 年国際会議。IEEE、2003 年。

[6] Shui Jijun、改良型遺伝アルゴリズム (IGA) 能動的外乱除去コントローラー (ADRC) 研究ノート、https://blog.csdn.net/HISJJ/article/details/127386770?spm=1001.2014.3001.5501、2022.12.30。

[7] helloHKTK、遺伝的アルゴリズムのパラメーター調整、https://www.cnblogs.com/helloHKTK/p/9772778.html、2023.1.4。

[8] Wang Yutao、Qian Yanzhu、Python ビッグデータ分析と機械学習 [M]、北京、機械工業新聞、2020.5、P92-P94。

[9] Li Aiguo Qin Zheng Bao Fumin He Shengping 粒子群最適化アルゴリズム[J]、Computer Engineering and Applications 、2002(21):1-3+17。

[10] Zhou Zhihua、機械学習[M]、北京、清華大学出版局、2016.1、P23-43。

[11] Li Honya , Peng Yuzhong , Deng Chuyan , Gong Daoqing . GAPSOに関するハイブリッド研究のレビュー[J]. Computer Engineering and Applications , 2018, 54(02): 20-28+39.


人工知能と機械学習コースの課題の他の章: 1. 知識エンジニアリングの基礎; 2. 関数近似; 3. ファジー論理

おすすめ

転載: blog.csdn.net/HISJJ/article/details/130500329