シミュレーションのためのビッグ データの処理
多くのタイム ステップと信号によるモデルのシミュレーションには、大き過ぎてコンピューターの RAM に収まらないビッグ データが含まれる可能性があります。以下のような状況が該当します。
シミュレーション データのログ記録 (信号ログ、出力端子ログ、状態ログ)
モデルをシミュレーションするための入力信号データの読み込み
複数または並列シミュレーションの実行
シミュレーションのためのビッグ データを処理するには、データを MAT ファイルの永続ストレージに保存します。シミュレーションに対してビッグ データ手法を使用する際に、データがワークスペース メモリに十分収まるくらい小さい場合は、必要以上の追加ステップが要求されます。モデルを開発するときは、メモリをオーバーロードするビッグ データ要件がモデルに含まれていることがわかっている場合を除き、永続ストレージを使用せずにシミュレーション データの記録および読み込みを行うことを検討してください。
ビッグ データのワークフロー
この例では、1 つのシミュレーションによって生成され、別のシミュレーションによって入力として使用されるビッグ データを処理するワークフローの概要について説明します。主なワークフロー タスクの詳細については、次を参照してください。
ヒント
この例では SimulationDatastore オブジェクトを使用してデータをモデルにストリーミングします。または、DatasetRef オブジェクトを直接モデルにストリーミングすることもできます。
2 つのモデルを構成して、複数の信号をログに記録します。
モデルのシミュレーションを行い、各モデルのデータを永続ストレージにログ記録します。
sim(mdl1,'LoggingToFile','on','LoggingFileName','data1.mat'); sim(mdl2,'LoggingToFile','on','LoggingFileName','data2.mat');
ビッグ データを含むログ記録では、データを永続ストレージに v7.3 MAT ファイルとして保存する必要があります。
Dataset形式で記録されたデータのみがファイルに保存されます。他の形式 (Structure with timeなど) で記録されたデータは、ベース ワークスペース内のメモリに保存されます。永続ストレージにログ記録するデータは、シミュレーション中に小さいチャンクでストリーミングされ、メモリ要件を最小限に抑えます。データは、各ログ データセット (たとえば、
logsoutとxout) のDatasetオブジェクトを含むファイル内に保存されます。特定のログ信号セット用に
DatasetRefオブジェクト (dsr1とdsr2) を作成します。その後、DatasetRefオブジェクトの要素値のSimulationDatastoreオブジェクト (dst1とdst2) を作成します。このコード例では、最初のシミュレーションに関する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};
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');SimulationDatastoreオブジェクトを利用するには、MATLAB® のビッグ データ解析を使用します。SimulationDatastoreオブジェクトの値を読み取ることで、timetableオブジェクトを作成します。関数readはデータの一部を読み取ります。関数readallはすべてのデータを読み取ります。tt = dst1.Values.read;
MATLAB セッションを、tall
timetableを利用するためのグローバル実行環境 (mapreducer) として設定します。SimulationDatastoreオブジェクトから talltimetableを作成し、メモリ内データをもつtimetableオブジェクトを読み取ります。mapreducer(0); ttt = tall(dst1.Values);
ヒント
ビッグ シミュレーション データの扱い方を示す別の例については、ビッグ データの取り扱いを参照してください。
参考
関数
Simulink.SimulationData.Dataset|timeseries|Simulink.SimulationData.DatasetRef|matlab.io.datastore.SimulationDatastore