MATLAB Compiler SDK によるデプロイ用コードのパッケージ化
サポートされるプラットフォーム: Windows®、Linux®、Mac
この例では、MATLAB® Compiler SDK™ を使用して MATLAB 関数をデプロイ可能なアーカイブにパッケージ化し、関数を呼び出すサンプル アプリケーションを作成する方法を説明します。アプリケーションのデプロイの仕組みの詳細については、MATLAB Compiler でのデプロイの手順を参照してください。
この例では、Python® パッケージを作成し、そのパッケージを MATLAB Compiler SDK で生成された Python アプリケーションに統合します。
前提条件
MATLAB Compiler SDK の使用および Python アプリケーションの実行のためのシステム要件を満たしていることを確認します。詳細については、MATLAB Compiler SDK の Python のターゲットの要件を参照してください。
コンパイル済みのアーティファクトのエンド ユーザーは、MATLAB にアクセスできない場合、MATLAB Runtime をインストールする必要があります。MATLAB Compiler SDK でビルドされたアーティファクトには、一致するバージョン (アップデート レベルが同じかそれ以降) の MATLAB Runtime が必要です。MATLAB Runtime は、Python パッケージのインストーラーに含めるか、個別にインストールできます。詳細については、MATLAB Runtime のダウンロードとインストールを参照してください。
MATLAB での関数の作成
ターゲット言語アプリケーションで呼び出す MATLAB コードを記述します。デプロイされる MATLAB コードは、特定のガイドラインに従っている必要があります。詳細については、デプロイ可能な MATLAB コードの記述を参照してください。
この例では、会社の在庫管理に関連する総コストを表すコスト関数が次のように定義されていると仮定します。
D は年間需要
Q は発注数量
S は発注あたりの発注コスト
H は年間の単位あたりの在庫コスト
P は単位あたりの購入コスト
MATLAB 関数 fminsearch
を使用して、総コスト C(Q)
を最小にする受注数量 Q
を求めることができます。受注数量、年間需要、受注あたりのコスト、年間の単位あたりの在庫コスト、および単位あたりの購入コストの初期推定をとり、最適な受注数量とコストを出力する fms.m
という名前の関数を作成します。
function [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P) cost_function = @(Q) D/Q * S + Q/2 * H + D * P; [Q_optimal, cost_optimal] = fminsearch(cost_function, Q_initial_guess) end
サンプル MATLAB スクリプトの作成
MATLAB Compiler SDK により、エクスポートされた MATLAB 関数を呼び出す方法を示すサンプル コードをターゲット言語で生成できます。サンプルを使用して、独自のアプリケーションの実装、またはコンパイル済みのアーティファクトのテストができます。詳細については、Create Sample Code to Call Exported Functionを参照してください。
定義した入力値を使用して関数を呼び出す MATLAB サンプル スクリプトを作成します。以下のコードを fmsSample1.m
という名前のサンプル ファイルに保存します。
% Sample script to demonstrate execution of function [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P) Q_initial_guess = 100; % Initialize Q_initial_guess here D = 10000; % Initialize D here S = 50; % Initialize S here H = 0.5; % Initialize H here P = 10; % Initialize P here [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P)
パッケージ化後、生成された Python サンプル コードは対応する MATLAB サンプル ファイルにあるものと同じ入力値を使用して、エクスポートされた関数を呼び出します。
デプロイ可能なアーカイブへの MATLAB コードのパッケージ化
MATLAB コマンド ラインで、またはグラフィカル インターフェイスを使用して、デプロイ可能なアーカイブをビルドできます。使用するパッケージ化方法の選択の詳細については、デプロイ オプションの選択を参照してください。
この例では、compiler.build.pythonPackage
関数を使用して、Python パッケージをビルドします。
compiler.build.pythonPackage
関数とfms.m
関数を使用して、Python パッケージをビルドします。名前と値の引数を使用してパッケージ名を指定し、サンプル ファイルを追加します。compiler.build
コマンドで名前と値の引数を使用して、追加オプションを指定できます。詳細については、compiler.build.pythonPackage
を参照してください。buildResults = compiler.build.pythonPackage("fms.m", ... PackageName="Optimize", ... SampleGenerationFiles="fmsSample1.m", ... Verbose="on");
compiler.build.Results
オブジェクトbuildResults
には、ビルド タイプ、生成ファイル、含まれるサポート パッケージ、およびビルド オプションに関する情報が含まれています。この関数により、現在の作業ディレクトリにある
OptimizepythonPackage
という名前のフォルダーに以下のファイルが生成されます。samples\fmsSample1.py
— Python サンプル アプリケーション。Optimize\__init__.py
— パッケージのインポートを容易にする Python 初期化コード。Optimize\Optimize.ctf
— Python パッケージが含まれるデプロイ可能なアーカイブ。GettingStarted.html
— パッケージの統合に関する情報が含まれる HTML ファイル。includedSupportPackages.txt
— パッケージに含まれるすべてのサポート ファイルをリストしたテキスト ファイル。mccExcludedFiles.log
— アプリケーションに含まれていないすべてのツールボックス関数のリストが含まれるログ ファイル。サポートされていない関数の詳細については、MATLAB Compiler の制限を参照してください。pyproject.toml
— ビルド システム要件および情報が含まれた構成ファイル。pip
でパッケージをビルドする際に使用されます。詳細については、pip.pypa.io/en/stable/reference/build-system/pyproject-toml
を参照してください。readme.txt
— パッケージ化およびインターフェイスの情報が含まれるテキスト ファイル。requiredMCRProducts.txt
— MATLAB Runtime がアプリケーションを実行するために必要な製品の製品 ID が含まれるテキスト ファイル。setup.py
—Optimize
パッケージをインストールする Python スクリプト。unresolvedSymbols.txt
— 未解決のシンボルに関する情報が含まれるテキスト ファイル。
メモ
生成されたパッケージに MATLAB Runtime やインストーラーは含まれていません。
buildResults
オブジェクトを使用してインストーラーを作成するには、compiler.package.installer
を参照してください。
生成されたサンプル アプリケーションのインストールと実行
Python パッケージの作成後、Python アプリケーションから fms
関数を呼び出すことができます。パッケージ化した MATLAB 関数を呼び出すアプリケーションの作成の詳細については、Integrate Artifact with Target Language Applicationを参照してください。
この例では、パッケージ化の際に生成されたサンプル Python コード OptimizepythonPackage\samples\fmsSample1.py
を使用します。このサンプル アプリケーション コードは、独自の Python アプリケーションを記述するためのガイドとして使用できます。
#!/usr/bin/env python
"""
Sample script that uses the Optimize package created using
MATLAB Compiler SDK.
Refer to the MATLAB Compiler SDK documentation for more information.
"""
import Optimize
# Import the matlab module only after you have imported
# MATLAB Compiler SDK generated Python modules.
import matlab
try:
my_Optimize = Optimize.initialize()
except Exception as e:
print('Error initializing Optimize package\\n:{}'.format(e))
exit(1)
try:
Q_initial_guessIn = matlab.double([100], size=(1, 1))
DIn = matlab.double([10000], size=(1, 1))
SIn = matlab.double([50], size=(1, 1))
HIn = matlab.double([0.5], size=(1, 1))
PIn = matlab.double([10], size=(1, 1))
Q_optimalOut, cost_optimalOut = my_Optimize.fms(Q_initial_guessIn, DIn, SIn, HIn, PIn, nargout=2)
print(Q_optimalOut, cost_optimalOut, sep='\n')
except Exception as e:
print('Error occurred during program execution\\n:{}'.format(e))
my_Optimize.terminate()
Python サンプル アプリケーションは以下を実行します。
Optimize
パッケージをインポートするtry
-catch
ブロックを使用して例外を処理するmy_Optimize
という名前のOptimize
オブジェクトを初期化する各入力引数について
matlab.double
オブジェクトを作成するfms
メソッドを呼び出し、出力をQ_optimalOut
およびcost_optimalOut
に保存するQ_optimalOut
およびcost_optimalOut
の内容を出力するmy_Optimize
インスタンスを終了する
システム コマンド プロンプトで、MagicSquarePkgpythonPackage
フォルダーに移動します。python
コマンドを使用して Optimize
パッケージをインストールします。
python -m pip install .
Python パッケージのインストールの詳細については、MATLAB Compiler SDK Python パッケージのインストールとインポートを参照してください。
MATLAB Runtime がインストールされている場合は、システム コマンド プロンプトでアプリケーションを実行できます。テスト目的で、MATLAB コマンド ウィンドウで、コマンドの前に !
演算子を追加してコマンドを実行することもできます。
python fmsSample1.py
Python サンプル アプリケーションは、サンプル MATLAB スクリプトと同じ出力を返します。
1414.2135620117188 100707.10678118655
メモ
macOS では、python
の代わりに mwpython
スクリプトを使用する必要があります。たとえば、mwpython fmsSample1.py
です。
mwpython
スクリプトは
フォルダーにあります。ここで、matlabroot
/binmatlabroot
は MATLAB または MATLAB Runtime がインストールされている場所です。
参考
compiler.build.pythonPackage
| mwpython