matlabのGAを使用している場合、染色体の遺伝子をたとえば10000の整数倍に制限する方法はありますか?
私はこのような染色体を持っています、私はどこ{Pdg1 Pdg2 ... Pdg33}
に必要ですそして。matlabのGA(多目的最適化)はそれを可能にしますか?はいの場合、どのように?0<=Pdgn<=400000
n=1,2..,33
mod(Pdgn ,10000)=0
matlabのGAを使用している場合、染色体の遺伝子をたとえば10000の整数倍に制限する方法はありますか?
私はこのような染色体を持っています、私はどこ{Pdg1 Pdg2 ... Pdg33}
に必要ですそして。matlabのGA(多目的最適化)はそれを可能にしますか?はいの場合、どのように?0<=Pdgn<=400000
n=1,2..,33
mod(Pdgn ,10000)=0
gamultiobj
整数制約をサポートしていません。私は通常、スカラー化を実行し、plain を使用しますga
。
function res = scalarizedFitness(x)
[obj1, obj2, obj3] = yourFitnessFunction(x);
%choose w1, w2, w3
res = w1 * obj1 + w2 * obj2 + w3 * obj3;
end
スカラー化を回避する方法は、独自のミューテーション関数を 用に作成することですgamultiobj
。私は決してそうしませんでした。これに関するいくつかの注意事項を次に示します。
整数制約はga
、いくつかのバージョン以降でサポートされています。私の2011bはそれをサポートしています。help ga
行が含まれているかどうかを入力して検索しますX = ga(FITNESSFCN,NVARS,A,b,[],[],lb,ub,NONLCON,INTCON)
。INTCON
どのパラメーターが整数であるかを示すために使用されるパラメーターに注意してください。
0<=Pdgn<=400000
lb
: パラメータとパラメータを使用して下限と上限を設定できub
ます。
mod(Pdgn ,10000)=0
複雑な制約を設定するには、さまざまな方法があります。あなたにとって最も最適なのは、フィットネス機能を変更することだと思います。
からf(Pdgn) where 0<=Pdgn<40000
までf(X) where 0<X<40 and Pdgn = X * 10000
結果のコードは次のようになります
function result = fitnessfun(X)
Pgds = X * 10000;
result = scalarizedFitness(Pgds);
end
NVARS = 33;
%lower bounds
lb = 0 * ones(1, NVARS);
%upper bounds
ub = 40 * ones(1, NVARS);
%which variables are integers (all of them)
intcon = 1:NVARS;
result = ga(@fintessfun, NVARS, [], [], [], [], lb, ub, [], intcon);