matlab の遺伝的アルゴリズム ツールを使用して計画の問題を解決する

matlab の最適化ツールには遺伝的アルゴリズム ツールボックスがあり、計画の問題を解決するために使用できます。

   インターフェース定義:

@fun 目的関数 (最終最小化問題)
   A*x<=b 不等式制約
   Aeq * x = beq 等式制約
   lb<=x<=ub 未知の範囲、各変数の範囲を制約
   @nonlcon 非線形制約
   [c ,ceq] = con_fun(x) ここで、c は c<=0 を表します。 ceq は ceq=0 を表します。

入力 [1 2] が最初の変数と 2 番目の変数が整数であることを示している場合、 intcon 変数の入力が整数である (入力が行列である) かどうか

 目的関数の形式:

function f = fun(x)
    f=-5*sin(x(1)) * sin(x(2)) *sin(x(3)) *sin(x(4)) *sin(x(5))-...
    sin(5*x(1)) *sin(5*x(2))*sin(5*x(3))*sin(5*x(4))* sin(5*x(5))+8;
end

 目的関数と制約を設定したら、「開始」をクリックして反復演算を開始します。右側のオプションで描画を確認することもできます。

実行後、ツールの左下に反復結果が表示されます。 

 

 matlab の上位バージョンでは最適化ツールが廃止され、遺伝的アルゴリズムを ga 関数で直接実装できるようになりました。例は次のとおりです。

%%
A=[];
b=[];
Aeq=[];
beq=[];
lb=0*ones(1,5);
ub=0.9*pi*ones(1,5);
intcon=[1 2 3 4 5];
options =  optimoptions('ga');
options.PlotFcn ={@gaplotbestf,@gaplotmaxconstr}; %绘制迭代图

 [x,fval,exitflag,output,population,scores]=ga(@fun,5,A,b,Aeq,beq,lb,ub,[],intcon,options);

%% 目标函数
function f = fun(x)
    f=-5*sin(x(1)) * sin(x(2)) *sin(x(3)) *sin(x(4)) *sin(x(5))-...
    sin(5*x(1)) *sin(5*x(2))*sin(5*x(3))*sin(5*x(4))* sin(5*x(5))+8;
end

 パラメータの定義はツールボックスの定義と同じです。

関数を使うとさらに便利です, 計画問題と解決プロセスを保存するのが便利です. アルゴリズムの収束度については, オプションで設定できます. matlab の公式の紹介を参照してください

Matlab が遺伝的アルゴリズム機能を実現icon-default.png?t=N176https://ww2.mathworks.cn/help/gads/ga.html?searchHighlight=ga&s_tid=srchtitle_ga_1

おすすめ

転載: blog.csdn.net/QUACK_G/article/details/129613540