So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersWir können eine benutzerdefinierte Formel im benutzerdefinierten Profiler definieren, und es ist ganz einfach, wie das folgende Beispiel zeigt
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;
Nehmen wir nun an, dass ich den Koeffizientenwert von 0,5 auf eine andere Einstellung ändern möchte. Also definiere ich folgende Formel:
coef=4;
myFormula=Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS")));
das Ergebnis im Log ist ok:
:Pred Formula ABRASION + 4 * :Pred Formula MODUL
aber wenn ich denselben Satz in der vorherigen Aussage verwende, gelingt es mir nicht, das erwartete Ergebnis zu erzielen:
obj << Objective Formula(Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS"))));

Ich habe wahrscheinlich einen grundlegenden Fehler gemacht, aber ich habe Probleme damit. und ich möchte diese Methode an eine komplexere Situation anpassen (Änderung der Erwünschtheitskoeffizienten im nativen Ausdruck)
Vielen Dank für Ihre Vorschläge
Betreff: So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersFlorenz,
Im Allgemeinen ist es vorzuziehen, Ausdrücke als auszuwertende Ausdrücke und nicht als Textzeichenfolge zu behandeln. Das wird funktionieren:
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;
Anziehen
Betreff: So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersHallo Don,
Vielen Dank für Ihre Antwort.
In diesem einfachen Beispiel funktioniert es ziemlich gut, da meine Formel einfach ist.
Im wirklichen Leben habe ich eine komplexere Situation. Ich möchte in der Lage sein, den Inhalt von Erwünschtheiten festzulegen, die ich aus einer Datentabelle abfangen werde.
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;
Wenn ich in diesem Fall den Ersatz anwende, habe ich einen Fehler.

und ja.... Ich möchte den Inhalt der 6 Variablen (Ziel und Spezifikation für die beiden Y) ändern!!
danke für eure vorschläge,
Florenz
Betreff: So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersFlorenz,
Das Problem hat mit der Funktionsweise des Matrixoperators (die öffnenden und schließenden eckigen Klammern) zu tun. Der einfachste Ansatz, den ich mir vorstellen kann, besteht darin, die Matrizen im Voraus zu erstellen und sie als Ganzes zu behandeln, anstatt zu versuchen, sie zu konstruieren Ersatz . Das sollte funktionieren
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;
Betreff: So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersIch habe das Gefühl, dass mir hier etwas fehlt. Warum Expr/Eval usw. verwenden, anstatt nur die Formel einzugeben?
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;
Betreff: So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersBetrachtet man den Ausdruck in der Formel Gliederung, die Werte für y1Mat Und y2Mat erscheinen unbewertet, also als Variablen:
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)
Übrigens, es sieht so aus, als hätte ich ein paar Fehler im vorherigen Code. Hier die korrigierte Version
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;
All dies gesagt, bin ich mir nicht sicher, ob dies der Weg ist, unterschiedliche Grenzen für die Erwünschtheitsfunktionen zu implementieren. Die Formel erscheint richtig, aber der objektive Wert fehlt.
Betreff: So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersVielen Dank für die Tipps! Es klappt
In Bezug auf die Formel ist es diejenige, die von JMP definiert wird, wenn ich den benutzerdefinierten Profiler mit der von der Fit Model-Plattform generierten Vorhersageformel starte.
Die Voreinstellung ist die folgende:

mit dieser Art von Vorhersageformel:

Ich werde prüfen, ob ich die gleichen Ergebnisse wie auf der nativen Model Fitting-Plattform habe.
Danke noch einmal!
Betreff: So übergeben Sie eine Variable in der Formel des benutzerdefinierten ProfilersDanke Florenz,
Ich habe das Problem gefunden. ich benutzte ABRIEB Und MODUL In Benutzerdefinierter Profiler aber gebraucht ABRIEB Und VERLÄNGERUNG im Objektive Formel .
Hier ist der (hoffentlich) fehlerfreie Code:
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;