Main Content

シミュレーションのためのビッグ データの処理

多くのタイム ステップと信号によるモデルのシミュレーションには、大き過ぎてコンピューターの RAM に収まらないビッグ データが含まれる可能性があります。以下のような状況が該当します。

  • シミュレーション データのログ記録 (信号ログ、出力端子ログ、状態ログ)

  • モデルをシミュレーションするための入力信号データの読み込み

  • 複数または並列シミュレーションの実行

シミュレーションのためのビッグ データを処理するには、データを MAT ファイルの永続ストレージに保存します。シミュレーションに対してビッグ データ手法を使用する際に、データがワークスペース メモリに十分収まるくらい小さい場合は、必要以上の追加ステップが要求されます。モデルを開発するときは、メモリをオーバーロードするビッグ データ要件がモデルに含まれていることがわかっている場合を除き、永続ストレージを使用せずにシミュレーション データの記録および読み込みを行うことを検討してください。

ビッグ データのワークフロー

この例では、1 つのシミュレーションによって生成され、別のシミュレーションによって入力として使用されるビッグ データを処理するワークフローの概要について説明します。主なワークフロー タスクの詳細については、次を参照してください。

ヒント

この例では SimulationDatastore オブジェクトを使用してデータをモデルにストリーミングします。または、DatasetRef オブジェクトを直接モデルにストリーミングすることもできます。

  1. 2 つのモデルを構成して、複数の信号をログに記録します。

  2. モデルのシミュレーションを行い、各モデルのデータを永続ストレージにログ記録します。

    sim(mdl1,'LoggingToFile','on','LoggingFileName','data1.mat');
    sim(mdl2,'LoggingToFile','on','LoggingFileName','data2.mat');

    ビッグ データを含むログ記録では、データを永続ストレージに v7.3 MAT ファイルとして保存する必要があります。Dataset 形式で記録されたデータのみがファイルに保存されます。他の形式 (Structure with time など) で記録されたデータは、ベース ワークスペース内のメモリに保存されます。

    永続ストレージにログ記録するデータは、シミュレーション中に小さいチャンクでストリーミングされ、メモリ要件を最小限に抑えます。データは、各ログ データセット (たとえば、logsoutxout) の Dataset オブジェクトを含むファイル内に保存されます。

  3. 特定のログ信号セット用に DatasetRef オブジェクト (dsr1dsr2) を作成します。その後、DatasetRef オブジェクトの要素値の SimulationDatastore オブジェクト (dst1dst2) を作成します。このコード例では、最初のシミュレーションに関する logsout の 12 番目の要素に対して SimulationDatastore を作成します。2 番目のシミュレーションついては、このコード例は logsout の 7 番目の要素値として SimulationDatastore オブジェクトをもつ信号を作成します。インデックス付けに中かっこを使用できます。

    dsr1 = Simulink.SimulationData.DatasetRef('data1.mat','logsout');
    dsr2 = Simulink.SimulationData.DatasetRef('data2.mat','logsout');
    dst1 = dsr1{12};
    dst2 = dsr2{7};
  4. SimulationDatastore オブジェクトを別のシミュレーションの外部入力として使用します。SimulationDatastore データを読み込むには、そのデータを Dataset オブジェクトに含めます。データ ストア入力は MAT ファイルから段階的に読み込まれます。3 番目の入力は timeseries オブジェクトです。このオブジェクトは、段階的ではなく全体としてメモリに読み込まれます。

    input = Simulink.SimulationData.Dataset;
    input{1} = dst1; 
    input{2} = dst2;
    ts = timeseries(rand(5,1),1,'Name','RandomSignals');
    input{3} = ts;
    sim(mdl3,'ExternalInput','input');
  5. SimulationDatastore オブジェクトを利用するには、MATLAB® のビッグ データ解析を使用します。SimulationDatastore オブジェクトの値を読み取ることで、timetable オブジェクトを作成します。関数 read はデータの一部を読み取ります。関数 readall はすべてのデータを読み取ります。

    tt = dst1.Values.read;
  6. MATLAB セッションを、tall timetable を利用するためのグローバル実行環境 (mapreducer) として設定します。SimulationDatastore オブジェクトから tall timetable を作成し、メモリ内データをもつ timetable オブジェクトを読み取ります。

    mapreducer(0);
    ttt = tall(dst1.Values);
    

ヒント

ビッグ シミュレーション データの扱い方を示す別の例については、ビッグ データの取り扱いを参照してください。

参考

関数

関連するトピック