カスタムプロファイラーの式で変数を渡す方法カスタム プロファイラーでカスタム式を定義できます。次の例に示すように、非常に簡単です。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
obj << Objective Formula(
:Pred Formula ABRASION + .5 * :Pred Formula MODULUS
);
obj << Optimize;
ここで、係数値を 0.5 から別の設定に変更したいとします。 そこで、次の式を定義します。
coef=4;
myFormula=Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS")));
ログの結果は問題ありません:
:Pred Formula アブレーション + 4 * :Pred Formula MODULUS
しかし、前のステートメントで同じ文を使用すると、期待した結果が得られません。
obj << Objective Formula(Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS"))));

おそらく基本的な間違いを犯しましたが、問題が発生しています。そして、この方法をより複雑な状況に適応させたいと思います(ネイティブ表現の望ましさ係数を変更します)
ご提案ありがとうございます
Re: カスタムプロファイラーの式で変数を渡す方法フィレンツェ、
一般に、評価されるテキスト文字列ではなく、expression を式として扱うことをお勧めします。 これはうまくいきます:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
cVal = 4;
Eval(Substitute(
Expr(
obj << Objective Formula(
:Pred Formula ABRASION + coefVal * :Pred Formula MODULUS
)
),
Expr(coefVal),cVal
));
obj << Optimize;
ドン
Re: カスタムプロファイラーの式で変数を渡す方法こんにちはドン、
ご回答ありがとうございます。
この基本的な例では、私の数式が単純であるため、うまく機能します。
実生活では、私はもっと複雑な状況にあります。 データテーブルから取得する望ましさの内容を設定できるようにしたいと考えています。
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability([100, y1_target, 200], [0.0183, 1, 0.0183], Pred Formula Abrasion)) + 0.25 * Log(Desirability([400, 475, 550], [0.0183, 1, 0.0183], Pred Formula Elongation))) / 0.5)
)
),
Expr(y1_target),y1_target_value
));
obj << Optimize;
この場合に代用を適用すると、エラーが発生します。

はい.... 変数6個(2つのYのターゲットとスペック)の中身を変えたい!!
ご提案ありがとうございます。
フィレンツェ
Re: カスタムプロファイラーの式で変数を渡す方法フィレンツェ、
この問題は、行列演算子 (左角括弧と右角括弧) の動作に関係しています。 私が考えることができる最も簡単なアプローチは、マトリックスを作成しようとするのではなく、事前にマトリックスを作成し、全体として扱うことです。代わりの. これはうまくいくはずです
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
y1Mat = Matrix({y1_min,y1_target_value,y1_max});
y2Mat = Matrix({y2_min,y2_target,y1_max});
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability(y1Mat, [0.0183, 1, 0.0183], Pred Formula Abrasion)) + 0.25 * Log(Desirability(y2Mat, [0.0183, 1, 0.0183], Pred Formula Elongation))) / 0.5)
)
),
Expr(y1Mat),y1Mat,
Expr(y2Mat),y2Mat,
));
obj << Optimize;
Re: カスタムプロファイラーの式で変数を渡す方法ここで何かが足りない気がします。 数式を入れるだけでなく、Expr/Eval などを使用するのはなぜですか?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
y1_target_value = 175;
y1_min = 150;
y1_max = 200;
y2_target = 500;
y2_min = 450;
y2_max = 550;
y1Mat = Matrix( {y1_min, y1_target_value, y1_max} );
y2Mat = Matrix( {y2_min, y2_target, y1_max} );
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
obj << Objective Formula(
Exp(
(0.25 * Log( Desirability( y1Mat, [0.0183, 1, 0.0183], :Pred Formula Abrasion ) ) + 0.25 * Log(
Desirability( y2Mat, [0.0183, 1, 0.0183], :Pred Formula Elongation )
)) / 0.5
)
);
obj << Optimize;
Re: カスタムプロファイラーの式で変数を渡す方法中の表現を見てみると方式アウトライン、値y1Matとy2Mat未評価、つまり変数として表示されます。
Exp((0.25 * Log(Desirability(<FONT color="#FF0000">y1Mat</FONT>, [0.0183, 1, 0.0183], :Pred Formula Abrasion)) + 0.25 * Log(Desirability(<FONT color="#FF0000">y2Mat</FONT>, [0.0183, 1, 0.0183], :Pred Formula Elongation))) / 0.5)
ところで、前のコードにいくつか間違いがあったようです。 修正版はこちら
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
y1Mat = Matrix({y1_min,y1_target_value,y1_max});
y2Mat = Matrix({y2_min,y2_target,y2_max});
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability(y1Mat, [0.0183, 1, 0.0183], :Pred Formula Abrasion)) + 0.25 * Log(Desirability(y2Mat, [0.0183, 1, 0.0183], :Pred Formula Elongation))) / 0.5)
)
),
Expr(y1Mat),y1Mat,
Expr(y2Mat),y2Mat,
));
obj << Optimize;
とはいえ、これが望ましさ関数のさまざまな境界を実装する方法であるかどうかはわかりません。 式は正しいように見えますが、目標値がありません。
Re: カスタムプロファイラーの式で変数を渡す方法ヒントをありがとう!できます
式に関しては、Fit Model プラットフォームで生成された予測式でカスタム プロファイラーを起動したときに JMP で定義されたものです。
デフォルトは次のとおりです。

このタイプの予測式では:

ネイティブのモデル フィッティング プラットフォームと同じ結果が得られるかどうかを確認します。
再度、感謝します!
Re: カスタムプロファイラーの式で変数を渡す方法フローレンスさん、ありがとう
問題が見つかりました。 使った摩耗と係数のカスタム プロファイラーしかし、使用された摩耗と伸長の中に目的の式.
(うまくいけば)エラーのないコードは次のとおりです。
obj = Custom Profiler( Y( :Pred Formula ABRASION, :Pred Formula MODULUS ) );
y1_target_value=175;
y1_min=150;
y1_max=200;
y2_target=500;
y2_min=450;
y2_max=550;
y1Mat = Matrix({y1_min,y1_target_value,y1_max});
y2Mat = Matrix({y2_min,y2_target,y2_max});
Eval(Substitute(
Expr(
obj << Objective Formula(
Exp((0.25 * Log(Desirability(y1Mat, [0.0183, 1, 0.0183], :Pred Formula Abrasion)) + 0.25 * Log(Desirability(y2Mat, [0.0183, 1, 0.0183], :Pred Formula Modulus))) / 0.5)
)
),
Expr(y1Mat),y1Mat,
Expr(y2Mat),y2Mat,
));
obj << Optimize;