1

matlabのGAを使用している場合、染色体の遺伝子をたとえば10000の整数倍に制限する方法はありますか?

私はこのような染色体を持っています、私はどこ{Pdg1 Pdg2 ... Pdg33}に必要ですそして。matlabのGA(多目的最適化)はそれを可能にしますか?はいの場合、どのように?0<=Pdgn<=400000n=1,2..,33mod(Pdgn ,10000)=0

4

1 に答える 1

1

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<=400000lb: パラメータとパラメータを使用して下限と上限を設定でき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);
于 2013-03-13T23:38:00.827 に答える