非遺伝的ケースのMatlab遺伝的アルゴリズム

PingP

私は最適化ツールを使ったことがありませんが、今は使わなければならないと思うので、少し迷っています。@Aによって与えられた答えを使用した後。Donda、関数を実行するたびに異なる行列「ペア」が返され、ほとんどの場合、さらに評価が必要であると言われるため、これが最善の解決策ではないことに気づきました。ですから、私の問題の答えは遺伝的アルゴリズムの最適化かもしれないと思っていましたが、もう一度、それらをどのように扱うかがわかりません。

私の最初の問題は以下に説明されており、その答えは@Aです。ドンダは答えの唯一の投稿にあります。私は本当にこの最適化を行う必要があり、GAツールを使用してこのケースを進める方法がわかりません。

よろしくお願いします。@ Aありがとうございます。あなたの答えのためのドンダ。

尋ねられたように、私は説明しようとしていたコードをここに入れようとしました、それが結果になることを願っています:

    function opt_pares
clear all; clc; close all;

h = randi(24,8760,1);
nd = randi(365,8760,1);
veic = randi(333,8760,1);
max_veic = max(veic);
veicN = veic./max_veic;
Gh = randi(500,8760,1);
Dh = randi(500,8760,1);
Ih = Gh-Dh;
A = randi([300 800], 27,1);
max_Gh = max(Gh);
max_Dh = max(Dh);
max_Ih = max(Ih);

lat = 70;
HRA =15.*(h-12);
decl = 23.27*sind(360*(284+nd)/365);

Ii = zeros(8760,27);
Di = zeros(8760,27);
Gi = zeros(8760,27);

pares = randi([0,90],27,2);
inclin = pares(:,1);
azim = pares(:,2);
% for MATRIZC
    for n=1:27
    Ii(:,n) = Ih.*(sind(decl).*sind(lat).*cosd(inclin(n))-sind(decl).*cosd(lat).*sind(inclin(n)).*cosd(azim(n))+cosd(decl).*cosd(lat).*cosd(inclin(n)).*cosd(HRA)+cosd(decl).*sind(lat).*sind(inclin(n)).*cosd(azim(n)).*cosd(HRA)+cosd(decl).*sind(inclin(n)).*sind(azim(n)).*sind(HRA));
    Di(:,n) = 0.5*Dh.*(1+cosd(inclin(n)));
    Gi(:,n) = (Ii(:,n)+Di(:,n))*A(n,1);
    end
Gparque = sum(Gi,2);
max_Gparque = max(Gparque);
GparqueN = Gparque./max_Gparque;
RMSE = sqrt(mean((GparqueN-veicN).^2));
% end

end

それが可能かどうかはわかりませんが、今回はもっと断定的になるかもしれません。

私の主な目標は、可能な限り最高の「RMSE」を達成することです。そのためには、各行に値のペア(各列から1つの値)が含まれるマトリックス(「ペア」)を作成する必要があります。

これらの値は、特定の範囲(0〜90)内にある必要があります。この27ペアのそれぞれで、「Ii」/「Gi」/「Di」を計算する必要があり、8760 * 27のようなサイズの行列が得られます。

次に、「Gi」の合計を作成して「Gparque」(ベクトル8760 * 1)にし、最後にIIで「RMSE」を計算します。RMSEを計算したら、マトリックスの「ペア」を他の値に変更する必要があります。これにより、RMSEが向上します。0〜90の範囲内にある27の値の組み合わせが多数あると、最小RMSEのこの検索を最適化できるソリューションを取得する必要があります。

コード内のコメントにある部分(「pares」を含むforループ)は、「pares」の値を変更する必要があるため、方法がわからないものですが、 RMSEの最小値。

今回は、この疑問をよりよく説明できたと思います。

どうもありがとうございました!

A.ドンダ

さて、これが質問の試みです。根本的な問題を理解しておらず、それをテストするための実際のデータがないため、結果が最終的にどれほど役立つかはわかりません。

最適化アルゴリズムが必要なのは正しかったです。問題は単純な線形代数よりも複雑に見えます。最適化にはfminsearch、OptmizationToolboxの関数を使用します

まず、値を最適化する関数(目的関数)を定義する必要があります。あなたのコードに基づいて、これは

function RMSE = fun(pares)
    inclin = pares(:,1);
    azim = pares(:,2);
    Ii = zeros(8760,27);
    Di = zeros(8760,27);
    Gi = zeros(8760,27);
    for n=1:27
        Ii(:,n) = Ih.*(sind(decl).*sind(lat).*cosd(inclin(n))-sind(decl).*cosd(lat).*sind(inclin(n)).*cosd(azim(n))+cosd(decl).*cosd(lat).*cosd(inclin(n)).*cosd(HRA)+cosd(decl).*sind(lat).*sind(inclin(n)).*cosd(azim(n)).*cosd(HRA)+cosd(decl).*sind(inclin(n)).*sind(azim(n)).*sind(HRA));
        Di(:,n) = 0.5*Dh.*(1+cosd(inclin(n)));
        Gi(:,n) = (Ii(:,n)+Di(:,n))*A(n,1);
    end
    Gparque = sum(Gi,2);
    max_Gparque = max(Gparque);
    GparqueN = Gparque./max_Gparque;
    RMSE = sqrt(mean((GparqueN-veicN).^2));
end

今、私たちは呼び出すことができます

pares_opt = fminsearch(@fun, randi([0,90],27,2))

ランダムな初期化を使用します。目的関数があまり効率的に実装されていないため、最適化にはかなりの時間がかかります。これは同じことをするベクトル化されたバージョンです:

% precompute
cHRA = cosd(HRA);
sHRA = sind(HRA);
sdecl = sind(decl);
cdecl = cosd(decl);
slat = sind(lat);
clat = cosd(lat);

function RMSE = fun(pares)
    % precompute
    cinclin = cosd(pares(:,1))';
    sinclin = sind(pares(:,1))';
    cazim = cosd(pares(:,2))';
    sazim = sind(pares(:,2))';

    Ii = bsxfun(@times, Ih, ...
        sdecl * (slat * cinclin - clat * sinclin .* cazim) ...
        + (cdecl .* cHRA) * (clat * cinclin + slat * sinclin .* cazim) ...
        + (cdecl .* sHRA) * (sinclin .* sazim));
    Di = 0.5 * Dh * (1 + cinclin);
    Gi = (Ii + Di) * diag(A);

    Gparque = sum(Gi,2);
    max_Gparque = max(Gparque);
    GparqueN = Gparque./max_Gparque;
    RMSE = sqrt(mean((GparqueN-veicN).^2));
end

pares[0、90]内にあるための制約はまだ実装されていませんこれを行う大まかな方法​​は、次の行を挿入することです。

    if any(pares(:) < 0) || any(pares(:) > 90)
        RMSE = inf;
        return
    end

目的関数の開始時。

すべてを一緒に入れて:

function Raquel

h = randi(24,8760,1);
nd = randi(365,8760,1);
veic = randi(333,8760,1);
max_veic = max(veic);
veicN = veic./max_veic;
Gh = randi(500,8760,1);
Dh = randi(500,8760,1);
Ih = Gh-Dh;
A = randi([300 800], 27,1);

lat = 70;
HRA =15.*(h-12);
decl = 23.27*sind(360*(284+nd)/365);

% precompute
cHRA = cosd(HRA);
sHRA = sind(HRA);
sdecl = sind(decl);
cdecl = cosd(decl);
slat = sind(lat);
clat = cosd(lat);

pares_opt = fminsearch(@fun, randi([0,90],27,2))


    function RMSE = fun(pares)

        if any(pares(:) < 0) || any(pares(:) > 90)
            RMSE = inf;
            return
        end

        % precompute
        cinclin = cosd(pares(:,1))';
        sinclin = sind(pares(:,1))';
        cazim = cosd(pares(:,2))';
        sazim = sind(pares(:,2))';

        Ii = bsxfun(@times, Ih, ...
            sdecl * (slat * cinclin - clat * sinclin .* cazim) ...
            + (cdecl .* cHRA) * (clat * cinclin + slat * sinclin .* cazim) ...
            + (cdecl .* sHRA) * (sinclin .* sazim));
        Di = 0.5 * Dh * (1 + cinclin);
        Gi = (Ii + Di) * diag(A);

        Gparque = sum(Gi,2);
        max_Gparque = max(Gparque);
        GparqueN = Gparque./max_Gparque;
        RMSE = sqrt(mean((GparqueN-veicN).^2));

    end
end

シミュレートされたデータを使用して、同じランダム化データで初期値が異なる場合に最適化を2回実行すると、異なる解が得られます。これは、目的関数の極小値が複数あることを示しています。うまくいけば、これは実際のデータには当てはまりません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rの遺伝的アルゴリズム

分類Dev

Matlabの遺伝的アルゴリズムの突然変異段階

分類Dev

遺伝的アルゴリズム-収束

分類Dev

DEAP遺伝的アルゴリズム

分類Dev

MlroseTSPOpt遺伝的アルゴリズム独自のコスト関数

分類Dev

matlab遺伝的アルゴリズム停止基準関数評価の最大数

分類Dev

遺伝的アルゴリズムの配列ヘルプ

分類Dev

Javaと遺伝的アルゴリズムの効率の向上

分類Dev

Pythonの遺伝的アルゴリズムの問題

分類Dev

多項式の遺伝的アルゴリズムの最適化

分類Dev

mlr遺伝的アルゴリズムの初期集団の選択

分類Dev

遺伝的アルゴリズム-多次元配列の交差

分類Dev

遺伝的アルゴリズムの並列実行

分類Dev

構造体/遺伝的アルゴリズムの使用

分類Dev

univeristyタイムテーブルの遺伝的アルゴリズム

分類Dev

オーダークロスオーバー(OX)-遺伝的アルゴリズム

分類Dev

Java、遺伝的アルゴリズム巡回セールスマン問題

分類Dev

Matlabの遺伝的アルゴリズムを使用した画像再構成アルゴリズムの最適化

分類Dev

遺伝的アルゴリズム-どのデータ構造が必要ですか?

分類Dev

遺伝的アルゴリズムトーナメントの選択

分類Dev

遺伝的アルゴリズム-親の選択とクロスオーバーの確率

分類Dev

遺伝的アルゴリズムの「ユニークな」クロスオーバー-TSP

分類Dev

クロスエントロピーと遺伝的アルゴリズムの違いは何ですか?

分類Dev

非優勢ランクベースのソート遺伝的アルゴリズムエリート主義の問題

分類Dev

遺伝的アルゴリズムでタイムテーブル問題のスケジュールを表す方法は?

分類Dev

遺伝的アルゴリズム:サイズNの初期母集団の例

分類Dev

NEATアルゴリズム:互いに素な遺伝子と過剰な遺伝子をクロスオーバーする方法は?

分類Dev

遺伝的アルゴリズム/遺伝的プログラミングソリューションの良い例は何ですか?

分類Dev

遺伝的アルゴリズム関数JS 2D配列

Related 関連記事

  1. 1

    Rの遺伝的アルゴリズム

  2. 2

    Matlabの遺伝的アルゴリズムの突然変異段階

  3. 3

    遺伝的アルゴリズム-収束

  4. 4

    DEAP遺伝的アルゴリズム

  5. 5

    MlroseTSPOpt遺伝的アルゴリズム独自のコスト関数

  6. 6

    matlab遺伝的アルゴリズム停止基準関数評価の最大数

  7. 7

    遺伝的アルゴリズムの配列ヘルプ

  8. 8

    Javaと遺伝的アルゴリズムの効率の向上

  9. 9

    Pythonの遺伝的アルゴリズムの問題

  10. 10

    多項式の遺伝的アルゴリズムの最適化

  11. 11

    mlr遺伝的アルゴリズムの初期集団の選択

  12. 12

    遺伝的アルゴリズム-多次元配列の交差

  13. 13

    遺伝的アルゴリズムの並列実行

  14. 14

    構造体/遺伝的アルゴリズムの使用

  15. 15

    univeristyタイムテーブルの遺伝的アルゴリズム

  16. 16

    オーダークロスオーバー(OX)-遺伝的アルゴリズム

  17. 17

    Java、遺伝的アルゴリズム巡回セールスマン問題

  18. 18

    Matlabの遺伝的アルゴリズムを使用した画像再構成アルゴリズムの最適化

  19. 19

    遺伝的アルゴリズム-どのデータ構造が必要ですか?

  20. 20

    遺伝的アルゴリズムトーナメントの選択

  21. 21

    遺伝的アルゴリズム-親の選択とクロスオーバーの確率

  22. 22

    遺伝的アルゴリズムの「ユニークな」クロスオーバー-TSP

  23. 23

    クロスエントロピーと遺伝的アルゴリズムの違いは何ですか?

  24. 24

    非優勢ランクベースのソート遺伝的アルゴリズムエリート主義の問題

  25. 25

    遺伝的アルゴリズムでタイムテーブル問題のスケジュールを表す方法は?

  26. 26

    遺伝的アルゴリズム:サイズNの初期母集団の例

  27. 27

    NEATアルゴリズム:互いに素な遺伝子と過剰な遺伝子をクロスオーバーする方法は?

  28. 28

    遺伝的アルゴリズム/遺伝的プログラミングソリューションの良い例は何ですか?

  29. 29

    遺伝的アルゴリズム関数JS 2D配列

ホットタグ

アーカイブ