ユーザーサブルーチンの使用
最適化では、通常の解析で使用する場合と同様にユーザーサブルーチンを使用できます。
ただし、最適化で並列有限差分法を使用する場合(有限差分を選択した場合のデフォルト)には、いくつかの特別な制限に注意する必要があります。
MotionSolveの並列有限差分アプローチでは、複数プロセス間でデータを通信して受信するためにPickleモジュールが使用されます。
Pickleは、Pythonオブジェクトをシリアル化および非シリアル化するためのアルゴリズムを実装しています。“Pickle化”とは、Pythonオブジェクト階層をバイトストリームに変換するプロセスで、“非Pickle化”はその逆の操作、つまりバイトストリームをオブジェクト階層に戻すプロセスです。
MotionSolveの並列有限差分アプローチでは、複数プロセス間でデータを送受信するために、“Pickle化”と“非Pickle化”を使用します。
from msolve.optimize import *
def calci(id,par,npar):
……
from msolve.optimize import *
def function1(……):
……
def calci(id,par,npar):
……
同様に、ユーザーサブルーチンをクラスメソッドとして定義することもできません。クラスそのものを最上位レベルに記述しても、そのクラスメソッドはPythonで最上位レベルのオブジェクトとして認識されません。次の場合、calciはPickle化可能ではありません:
from msolve.optimize import *
class Fourbar(……):
……
def calci(self,id,par,npar):
……
Pickleの詳細については、pickleに関するPythonのドキュメントをご参照ください。