如何在自定义分析器的公式中传递变量我们可以在自定义分析器中定义一个自定义公式,这很容易,如下例所示
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 ABRASION + 4 * :Pred Formula MODULUS
但是,如果我在前面的语句中使用相同的句子,我不会成功获得预期的结果:
obj << Objective Formula(Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS"))));

我可能犯了一个基本错误,但我遇到了麻烦。我想使这种方法适应更复杂的情况(改变本机表达式中的合意性系数)
谢谢你的建议
回复:如何在自定义分析器的公式中传递变量佛罗伦萨,
通常,最好将表达式视为表达式而不是要计算的文本字符串。 这将起作用:
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;
大学教师
回复:如何在自定义分析器的公式中传递变量嗨,唐,
非常感谢您的回答。
在这个基本示例中,它工作得很好,因为我的公式很简单。
在现实生活中,我的情况更为复杂。 我希望能够设置我将从数据表中捕获的期望值的内容。
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 个变量的内容(两个 Y 的 target 和 spec)!!
谢谢你的建议,
佛罗伦萨
回复:如何在自定义分析器的公式中传递变量佛罗伦萨,
这个问题与矩阵运算符(左方括号和右方括号)的工作方式有关。 我能想到的最简单的方法是预先创建矩阵并将它们作为一个整体来对待,而不是试图在代替. 这应该工作
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;
回复:如何在自定义分析器的公式中传递变量我觉得我在这里错过了什么。 为什么要用 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;
回复:如何在自定义分析器的公式中传递变量如果你看一下表达式中的公式大纲,值y1垫和y2垫出现未评估,即作为变量:
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;
综上所述,我不确定这是为意愿函数实现不同边界的方法。 公式看似正确,但缺少目标值。
回复:如何在自定义分析器的公式中传递变量感谢您的小费!有用
关于公式,它是我在使用 Fit Model 平台生成的预测公式启动自定义刻画器时由 JMP 定义的。
默认值如下:

使用这种类型的预测公式:

我将检查我的结果是否与原生模型拟合平台上的结果相同。
再次感谢!
回复:如何在自定义分析器的公式中传递变量谢谢佛罗伦萨,
我发现了问题。 我用了磨损和模数在自定义分析器但用过磨损和伸长在里面目标公式.
这是(希望如此)无错误代码:
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;