メインコンテンツ

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 コードの記述を参照してください。

この例では、会社の在庫管理に関連する総コストを表すコスト関数が次のように定義されていると仮定します。

C ( Q ) = D / Q * S + Q / 2 * H + D * P

  • 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 パッケージをビルドします。

  1. 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 には、ビルド タイプ、生成ファイル、含まれるサポート パッケージ、およびビルド オプションに関する情報が含まれています。

  2. この関数により、現在の作業ディレクトリにある 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.txtMATLAB Runtime がアプリケーションを実行するために必要な製品の製品 ID が含まれるテキスト ファイル。

    • setup.pyOptimize パッケージをインストールする 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/bin フォルダーにあります。ここで、matlabroot は MATLAB または MATLAB Runtime がインストールされている場所です。

参考

|

トピック