すぐに事前割り当てのヒントをいくつか紹介しますが、最初に指摘しておきたいのは、MATLAB を終了するまで SimBiology モデルがメモリ内に残っているため、メモリ使用量が増加する可能性が高いということです。SimBiology モデルは、次のいくつかの重要な点で、セルまたはダブルスとはかなり異なる動作をします。
- SimBiology モデルは、「値オブジェクト」ではなく「ハンドル オブジェクト」です。ハンドル オブジェクトと値オブジェクトの詳細については、MATLAB ドキュメンテーションを参照してください。ただし、ここで重要な点は、複数の変数が同じインメモリ SimBiology モデルを同時に参照できることです。
- SimBiology モデルは、明示的に削除されるまでメモリに残ります。関数sbiorootを使用して、メモリ内のすべての SimBiology モデルにいつでもアクセスできます。SimBiology モデルをメモリから削除するには、
delete
メソッドを呼び出す必要がありますdelete(modelObj)
。すべてのSimBiology モデルを一度に削除したい場合は、関数を呼び出すだけですsbioreset
(ただし、この関数は注意して使用してください!)。
では、事前割り当てに進みます。「反転 for ループ」は、任意のデータ型を事前に割り当てる方法の 1 つです(データ型ごとに特定の関数を学習する必要はありません)。アイデアは、MATLAB の自動配列割り当てを利用して、最初に配列を最大サイズで割り当てることです。以下は、2 の最初の 5 乗のベクトルを作成するばかげた例です。
for ind = 5:-1:1
squares(ind) = ind^2;
end
これはばかげた例だと思います。MATLAB で(1:5)^2
. とはいえ、reverse for ループで割り当てるという考え方が伝わってくれることを願っています。
SimBiology を使用する特定のケースでは、SimBiology モデルの明示的な削除と逆の for ループを組み合わせる必要があります。コードは次のようになります。
% Note the reverse for loop below
for modelIndex = 100:-1:1
% First, load the model
% Option 1: Load your models from a list of SBML files stored in sbmlFileNames
allModels(modelIndex) = sbmlimport(sbmlFileNames{modelIndex})
% Option 2: Load your models from a list of sbproj files stored in projFileNames
loadedProject = sbioloadproject(projFileNames{modelIndex});
allModels(modelIndex) = loadedProject.m1;
% Option 3: Explicitly create your model
allModels(modelIndex) = sbiomodel(['Model ' num2str(modelIndex)]);
% Of course, you'll need to customize each model somehow
% Store a "baseline" simulation of each in resultsData
resultsData(modelIndex) = sbiosimulate(allModels(modelIndex));
% Now create the matrix of SimData
% Note the reverse for loop below
for variantIndex = 20:-1:1
% Setup for the modified simulation.
% One option: Use some previously defined variant objects stored in variantList
allResults(modelIndex, variantIndex) = ...
sbiosimulate(allModels(modelIndex), variantList(variantIndex));
end
end
% Once you are done, delete SimBiology models to free memory
delete(allModels)
さらに質問がある場合は、MathWorks テクニカル サポートまでお気軽にお問い合わせください。(私は SimBiology の開発者の 1 人です。ユーザーが何をしているかを聞いて、彼らの生活を楽にする方法を見つける機会をいつも感謝しています。)
-アーサー