JSL制約付き最小化-行ごとのソルバーヘルプこんにちは、
私の目的は、[column(y1)-column(y2)= 0; column(z1)-の基準を満たすまで、他の列の数式で使用される2つの列(x1、x2)の値をJSLで反復処理することです。 column(z2)= 0]。 私が解こうとしている方程式は、ネストされた非線形方程式であることに注意してください。
y1 = f1(x1、x2、x3、x4 ...)
y2 = f2(x1、x2、x3、x4 ...)
z1 = y1 + y2
z2 =独立した値
Excelでは、方程式を複数の列に分割するだけで、間に計算エラーがあったかどうかをより簡単に追跡できます。 次に、各行を反復し、ソルバーを実行して、目的の基準が満たされるまでx1とx2を反復します。
JMPでは、制約付き最小化関数を使用してこれを複製するのに問題があります。 スクリプトを実行するたびに、ターゲットの目的が達成されず、値が絶えず変化しているため、スクリプトは収束しているようには見えません。 また、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 ConstrainedMinimize-行ごとのソルバーヘルプコードは実行されません。 詳しく教えていただけますか? また、Constrained Minimizeは式を期待しますが、expr1は値を保持する変数のようであるため、最適化するものはありません。Re:JSL ConstrainedMinimize-行ごとのソルバーヘルプこんにちは鵬劉、
残念ながら、共有できない独自のデータを含むデータテーブルが必要なため、コード自体は機能しません。
expr1に最適化する用語が含まれていないという点で、私が持っていた質問は、expr1で使用される用語が、最適化変数が含まれているFORMULA列である場合、制約付き最小化は引き続き機能するのか、それとも拡張する必要があるのかということでした。 expr1の式全体(ネストする代わりに)。 方程式が非常に長いため、私はそれを選択しなかったことに注意してください。
さらに詳しい説明が必要な場合はお知らせください。
ありがとう。
Re:JSL ConstrainedMinimize-行ごとのソルバーヘルプ次の例は、問題の説明に基づく架空の状況です。
列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);
必要なのは、次の例のような式列だと思います。
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 ConstrainedMinimize-行ごとのソルバーヘルプこんにちは鵬劉、
返信ありがとうございます。 私はここで問題を理解していると思います:
私が持っているシナリオの場合:
- 100行のデータテーブル
- 列Z =列Y1-列Y2
- 列Y1 =数式(列X1、X2、X3 ..)
- 列Y2 =数式(列X1、X2、X3 ..)
ここでの目標は、各行の列X1とX2に値を設定して、列Z = 0にすることです。
列Y1とY2は列X1とX2の値に基づいて評価される数式列であり、すべてJSL変数x1およびx2に。
スクリプトをどのように設定したかを見ると、私の場合にスクリプトを機能させる方法は、データテーブルの数式列ではなく、JSL内ですべてのネストされた計算を実行することだと思います。 制約付き最小関数を実行してから、結果をデータテーブルの列に保存します。
どう思いますか ?
Re:JSL ConstrainedMinimize-行ごとのソルバーヘルプ実用的なアプローチのように感じます。 つまり、数式列を設定していたため、式は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 ConstrainedMinimize-行ごとのソルバーヘルプこんにちは鵬劉、
ありがとうございます。min-constrainedの設定方法に従ってみましたが、現在は機能しているようです。 基本的に、数式列ではなく、JSLですべての計算を実行する必要がありました。
質問-2つの方程式を同時に解くことは可能ですか? 非線形制約を持つことは可能ですか?
Re:JSL ConstrainedMinimize-行ごとのソルバーヘルプ次の2つのJSL関数は、「方程式を解く」目的に関連している可能性があります。 それらは線形方程式用です。


非線形方程式を解くために、目的を同等の最適化問題に変換したい場合があります。 次に、JSL関数MaximizeまたはNonlinearプラットフォームを使用して解決します。
非線形制約を使用した最適化では、制約なしで同等の最適化目標を構築できるため、JSL関数Maximize、非線形プラットフォーム、プロファイラーの望ましさ関数など、一部のJMPツールを使用できます。 他のJMPツールは、JMPのDOEプラットフォームなど、最適なものを「検索」するのに役立つ場合があります。
アプローチの選択は、実際の目的と制約によって異なります。
Re:JSL ConstrainedMinimize-行ごとのソルバーヘルプこんにちは鵬劉、
これらのオプションを共有していただきありがとうございますが、基本的に以前と同じことをしようとしている場合、どの方法を使用できるかは明確ではありません。データテーブルの各行のx1とx2を解きますが、この場合は2つの方程式を解きます。同時に、いくつかの非線形制約があります。
以前に行った例があるかどうか知っていますか? これを行うのがExcelに対して非常に難しいとは信じがたいです
ありがとう
Re:JSL ConstrainedMinimize-行ごとのソルバーヘルプ簡単に解決できるとおっしゃったExcelの例を投稿してみてはいかがでしょうか。 必ずしもあなたの手にある正確な問題ではありませんが、何かがあなたの目的に非常に似ています。 または、使用方法を示すExcelの例だけで、JMPを使用して解決できるかどうかを確認します。