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 の公式の紹介を参照してください