公開日: 09/19/2023

最大化関数と最小化関数

JSLのMaximize()関数およびMinimize()関数は、式を最適化(最大化または最小化)する因子の値を求めます。式は、因子の値に対して連続関数でなければいけません。

この関数を呼び出す方法は、次のとおりです。

result = Maximize(objectiveExpression,{list of factor names}, <<option(value))
result = Minimize(objectiveExpression,{list of factor names}, <<option(value))

objectiveExpressionは、最適化する対象の式です。式そのもの、または式が保存されているグローバル変数名のどちらかを指定します。

{list of factor names}には、objectiveExpressionに含まれる因子名のリストを指定します。

因子名の後に、name(lowerBound,upperBound)のように、許容値の範囲を指定することもできます。

許容値の上限または下限だけを指定する場合は、以下の例のように片側を欠測値にします。

{beta} // 制限なし
{beta (0,1)} // 0以上1以下
{beta (.,1)} //1以下
{beta (0,.)} or {beta (0)} // 0以上

因子の値は、数値または行列のいずれかです。

また、以下のオプションも使用できます。デフォルト値は、以下のとおりです。

<< Tolerance(.00000001) // 収束基準
<< Max Iter( 250) // 最大反復数
<< Limits() //

関数を呼び出す前に、因子には初期値が割り当てられているものとします。

これらの関数は、複数の局所解を持つ関数において、大域的な最適解を見つけるとは限りません。指定された初期値から、ある局所的な最適解(問題によっては、大域的な最適解かもしれませんが)を求めることしかできません。

現在のところ、戻り値は目的関数の値です。

最小2乗法の例

Minimizeを使用して、指数モデルにおいて最小2乗法の推定値を求める例を示します。サンプルデータのフォルダ内にある「Nonlinear Examples」「US Population.jmp」データテーブルのデータを使用します。

xx = [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870, 1880, 1890, 1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990];
yy = [3.929, 5.308, 7.239, 9.638, 12.866, 17.069, 23.191, 31.443, 39.818, 50.155, 62.947, 75.994, 91.972, 105.71, 122.775, 131.669, 151.325, 179.323, 203.211, 226.5, 248.7];
b0 = 3.9;
b1 = .022;
sseExpr = Expr(
	Sum( (yy - (b0 * Exp( b1 * (xx - 1790) ))) ^ 2 )
);
sse = Minimize( sseExpr, {b0, b1}, <<Tolerance( .00001 ) );
Show( b0, b1, sse );

b0 = 13.9991388055261;

b1 = 0.0147104409355048;

sse = 1862.14141218875;

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).