JSL 制約付き最小化 - 行ごとのソルバーのヘルプやあ、
私の目的は、[column(y1)- column(y2) = 0 ;column(z1)-] の基準を満たすまで、他の列の数式で使用される 2 つの列 (x1、x2) の値を JSL に反復処理させることです。列(z2)=0]。 私が解こうとしている方程式は入れ子になった非線形方程式であることに注意してください。
y1 = f1(x1、x2、x3、x4...)
y2 = f2(x1, x2, x3, x4...)
z1 = y1+y2
z2 = 独立した値
Excel では、方程式を複数の列に分割するだけで、間に計算エラーがあるかどうかを簡単に追跡できました。 次に、各行を反復処理し、目的の基準が満たされるまで x1 と x2 を反復するソルバーを実行します。
JMP では、これを複製するために Constrained Minimize 関数を使用するのが困難です。 スクリプトを実行するたびに、ターゲットの目的が満たされず、値が常に変化しているため、スクリプトは収束しているようには見えません。 また、ターゲット目標は 2 つではなく 1 つしか設定できません。 以下は私の JSL コードの例です。 column_y1 と column_y2 は、内部に x1 変数と x2 変数を含む数式列であることに注意してください。
dt = Current Datatable();
expr1 = abs(:column_y1[i] - :column_y2[i]);
x1 = 0.5;
x2 = 0.2;
For Each Row(
i=Row();
minfun = Constrained Minimize (expr1, {x1(0.1,0.8), x2(0.01,0.5)},
<<MAXITER></MAXITER>これを機能させるには、式内にネストされた方程式全体が必要だと思いますか? それとも、私がここで何か間違ったことをしているのでしょうか。
ご協力をよろしくお願いいたします。 ありがとう!
実験計画法Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプどういたしまして。 解決策を考えてくれてよかったです。Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプこんにちは、ペン・リューさん。
この問題の解決にご協力いただき、誠にありがとうございます。 これを同等の制約のない問題に変換し、ターゲット方程式と制約の両方の二乗誤差の合計を最小化する方法を参照しました。 ペナルティ条件を使用する必要はありませんでしたが、解決策は Excel で確認したものとほぼ一致しています。
開始値が前のデータ行から解かれた値から始まるように設定した後、1100 行のケースを解くのに約 2 ~ 3 分かかります (方程式が複雑であることを考えると、これは絶対に妥当だと思います)。
改めて、どうもありがとうございました。
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプこの場合、テーブル内のすべての行に 2 つの変数 (parameter1 とparameter2) が含まれるため、複数の方程式を同時に解くことは進むべき方向ではないと思います。 また、これらは行ごとに異なる変数ですが、式ごとに同じ名前があり、同じ列に配置されます。
私が提示した提案を使用して複数の方程式を同時に解く場合、方程式は方程式ごとに同じ変数のセットを使用します。 すべての変数は値を 1 つだけ持つ必要があります。
必要なのは、Excel マクロで行ったことを JSL に変換することです。たとえば、すべての行を反復的に処理するために、より大きな JSL ループを作成する必要があります。
非線形制約の下で方程式を解くための私の提案の 1 つは、制約付きの問題を同等の制約のない問題に変換することでした。 制約が等式であると仮定すると、次の例では、制約 y==exp(-x) の下で y-exp(x)=0 の解を見つけようとします。 解は、(x,y)=(0,1) にある 2 つの曲線の交点です。 最小化の目的は、ターゲット方程式 y-exp(x) の二乗誤差の合計、および制約 y-exp(-x)=0 の違反です。 k は違反に対するペナルティであり、k はかなり大きいことに注意してください。
また、解に近くない初期値を識別できない場合に備えて、意図的に初期値を解から遠く離れた位置に配置し、MaxIter を増やしていることにも注目してください。
x = 100;
y = 100;
k = 10000;
minFun = Minimize( (y - exp(x))^2 + k*(y - exp(-x))^2, {x, y} , MaxIter(1000));
Eval List( {x, y, minFun} );
show(x, y, y-exp(x),y - exp(-x))
実際の目的で使用できる場合には、これは実現可能なアプローチです。
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプこんにちは、ペン・リューさん。
データを匿名化する必要があるため、これが役立つかどうかはわかりませんが、基本的にはこれが Excel から複製または改善しようとしていたものです。
この場合、マクロと Excel のソルバーを使用してパラメーター 1 とパラメーター 2 を繰り返し、目的 1 と目的 2 に到達します。

ありがとう
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプあなたが簡単に解決できると言っていた Excel の例を投稿して、そこから始めてはどうでしょうか? あなたが抱えている問題が必ずしも正確であるとは限りませんが、何かがあなたの目標によく似ています。 または、使い方を示す Excel の例だけを見て、JMP を使用してそれを解決できるかどうかを確認します。
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプこんにちは、ペン・リューさん。
これらのオプションを共有してくれてありがとう。しかし、基本的に以前と同じことをしようとしている場合、データテーブルの各行の x1 と x2 を解くということですが、この場合は 2 つの方程式を解くという場合に、どの方法を使用できるかは明確ではありません。同時に、いくつかの非線形制約も伴います。
以前に行われた例があるかどうか知っていますか? これを Excel で行うのがこんなに難しいとは信じられません
ありがとう
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプ次の 2 つの JSL 関数は、「方程式を解く」という目的に関連する可能性があります。 これらは一次方程式用です。


非線形方程式を解く場合、目的を同等の最適化問題に変換することが必要な場合があります。 次に、JSL 関数 Maximize または非線形プラットフォームを使用してそれを解決します。
非線形制約を使用した最適化の場合、制約なしで同等の最適化目標を構築できるため、JSL 関数 Maximize、非線形プラットフォーム、プロファイラーの Desirability Function などの一部の JMP ツールを使用できます。 他の JMP ツールは、JMP の DOE プラットフォームなど、最適なものを「検索」するのに役立つ場合があります。
どのアプローチを選択するかは、実際の目的と制約によって異なります。
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプこんにちは、ペン・リューさん。
ありがとう、min-constrained の設定方法に従ってみましたが、現在はうまく機能しているようです。 基本的に、すべての計算を数式列ではなく JSL で実行する必要がありました。
質問 - 2 つの方程式を同時に解くことは可能ですか? 非線形制約を設けることは可能ですか?
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプ実用的なアプローチのように感じます。 したがって、式は 1 つだけです。数式列を設定しているため、式はすべての行で同じである必要があります。 テーブルが必要なのは、x3、x4 などの値が行ごとに必要な場合のみです。 制約付き最適化と z=0 のターゲット目標がここでどのように関連しているかはわかりませんが、次のスクリプトはフローの全体像を示しています。 それに応じてセットアップと最適化を置き換えます。
dt = New Table( "Untitled",
Add Rows( 3 ),
New Column( "x1",
Set Values( [.,.,.] )
),
New Column( "x2",
Set Values( [.,.,.] )
),
New Column( "x3",
Set Values( [2,2,2] )
),
);
expr0 = expr( (x3 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2 );
for (irow = 1, irow<=nrow(dt), irow++,
expr1 = substitute(name expr(expr0), expr(x3), dt:x3[irow]);
//show(name expr(expr1));
A = [1 1, 1 5];
b = [2, 5];
minFun = Constrained Minimize(
expr1,
{x1( 0, 5 ), x2( 0, 5 )},
<<LESSTHANEQ></LESSTHANEQ>Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプこんにちは、ペン・リューさん。
ご返信ありがとうございます。 ここでの問題は理解できたと思います:
私が持っているシナリオの場合:
- 100行のデータテーブル
- Z列 = Y1列 - Y2列
- 列 Y1 = 式(列 X1、X2、X3...)
- 列 Y2 = 式(列 X1、X2、X3...)
ここでの目標は、各行の列 X1 および X2 に値を設定して、列 Z = 0 にすることです。
Constrained Minimize を使用して、一部の JSL 変数 x1 および x2 の値を反復して列 Z = 0 の式を作成することは機能しません。これは、列 Y1 および Y2 が列 X1 および X2 の値に基づいて評価される数式列であり、列 X1 および X2 で接続されていないためです。すべてを JSL 変数 x1 および x2 に設定します。
スクリプトの設定方法を見ると、私のケースでそれを機能させるには、すべてのネストされた計算をデータテーブルの数式列ではなく JSL 内で実行することが考えられます。 制約付き Min 関数を実行し、結果をデータ テーブル列に保存します。
どう思いますか ?
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプ次の例は、問題の説明に基づいた仮説的な状況です。
列 fcol は、他の 2 つの列 x1 および x2 の式です。
fcol の評価は 2 つの列 x1 と x2 に依存し、スクリプト内の変数などの外部の JSL 変数の影響を受けません。
最後に、この例では expr1 が式ではなく値であることを示しています。
dt = New Table( "Untitled",
Add Rows( 1 ),
New Column( "fcol",
Numeric,
"Continuous",
Format( "Best", 12 )
),
New Column( "x1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values({.5})
),
New Column( "x2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values({.5})
),
);
dt:fcol << set formula(
(2 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2
);
dt:fcol << eval formula;
i=1;
expr1 = abs(dt:fcol[i]);
show(expr1);
必要なのは、次の例のような Expression 列だと思います。
dt = New Table( "Untitled",
Add Rows( 1 ),
New Column( "exprcol",
Expression,
"None",
Set Selected,
Set Values( {(2 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2} )
)
);
i=1;
expr1 = dt:exprcol[i];
A = [1 1, 1 5];
b = [2, 5];
minFun = Constrained Minimize(
expr1,
{x1( 0, 5 ), x2( 0, 5 )},
<<LESSTHANEQ></LESSTHANEQ>
また、expr1 は Expression 列から値を抽出することしかできません。 式操作以外のその他の操作があると、評価がトリガーされます。 たとえば、次の場合は期待どおりに機能しません。
dt = New Table( "Untitled",
Add Rows( 1 ),
New Column( "exprcol",
Expression,
"None",
Set Selected,
Set Values( {(2 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2} )
)
);
i=1;
x1 = .5;<BR />x2 = .5;<BR />expr1 = dt:exprcol[i]+2*dt:exprcol[i];//trigger evaluation and fail.Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプこんにちは、ペン・リューさん
はい、コードはそれ自体では機能しません。残念ながら共有できない独自のデータを含むデータテーブルが必要だからです。
expr1 に最適化する項が含まれていないという点で、私が抱いた質問は、expr1 で使用されている項が最適化変数が含まれる FORMULA 列である場合、制約付き最小化は引き続き機能するのか、それとも拡張する必要があるのかということでした。 expr1 の方程式全体 (入れ子にする代わりに)。 方程式が非常に長いため、これを選択しなかったことに注意してください。
さらに詳しい説明が必要な場合はお知らせください。
ありがとう。
Re: JSL 制約付き最小化 - 行ごとのソルバーのヘルプコードは実行されません。 詳しく教えていただけますか? また、Constrained Minimize は式を期待しますが、expr1 は値を保持する変数のようであるため、最適化するものは何もありません。