Fordern Sie Hilfe beim Festlegen und Maximieren der Attraktivität innerhalb einer Funktion an.Hallo zusammen, ich versuche, eine Funktion zu schreiben, die einen benutzerdefinierten Zielwert in einem Gerät erreichen soll. Die angegebenen Argumente sind der Name der Zielmetrik, der abzugleichende Wert, der Name des Geräts und das Gewicht des Zielgeräts.
Ich hoffe, dies durch die Festlegung von Wunschkurven mithilfe von Antwortgrenzen und Match-Zielen zu erreichen. Ich habe getestet, dass der Code funktioniert, wenn ich die Spalte und außerhalb der Funktion als eigenständigen Codeausschnitt spezifiziere. Jetzt, da ich versuche, dies in eine Funktion einzubinden, funktioniert der Codeteil, der die Antwortgrenzen festlegt, nicht. Kann mir jemand helfen, herauszufinden, was ich falsch mache? Danke!
Die grafische Ausgabe, die ich erhalte, sieht wie folgt aus. Die erforderliche Antwortmetrik, die Faktorwerte und die Sperren funktionieren einwandfrei, aber die Wunschkurve ändert sich nicht.

dt = currentdatatable();
// FindMatchingAgiSpeed is a function that finds the agitation speed in Brx_B that will
// match the hydrodynamic quantity requested as the input
FindMatchingAgiSpeed = Function( {dt, HydyMetricMixing, valueOfHydyMetric, Brx_Name_B, Brx_Volume_B},
// HydyMetricMixing is a string and can be either "P/V (W/m^3)" or "Top 10% EDR (W/kg)" or "Tip Speed (m/s)" and so on
// valueOfHydyMetric is a float that is the value of the chosen HydyMetricMixing that we want to achieve in Brx_B
// Brx_Name_B is a string which is our target production bioreactor we want to find the agitation setpoint for
// Brx_Volume_B is the amount of liquid in the bioreactor
HydyMetricMixing_col = Column (dt, HydyMetricMixing);
// this part of the code works perfectly
profiler = dt << Profiler(
Y( HydyMetricMixing_col ),
Confidence Intervals( 1 ),
Desirability Functions( 1 ),
Term Value(
:"Bioreactor"n( Brx_Name_B, Lock( 1 ), Show( 1 ) ),
:"Volume (L)"n( Brx_Volume_B, Lock( 1 ), Show( 1 ) ),
:"Agitation (RPM)"n(50, Min(12), Max(263), Lock(0), Show(1))
),
);
// This part of the code does not work at all
profiler << Response Limits(
Eval( Parse( ":" || Char(HydyMetricMixing) ) ), // Convert string to symbol
{
Lower( valueOfHydyMetric*0.8, 0.0183 ),
Middle( valueOfHydyMetric, 1 ),
Upper( valueOfHydyMetric*1.2, 0.0183 ),
Goal( "Target" ), Importance( 1 )
}
);
// Maximize desirability
profiler << Maximize and Remember;<BR /><BR /> // "Agitation (RPM)" obtained after maximization is the result we want to return from this function
);
// call the function to find the optimized value
FindMatchingAgiSpeed(dt, "P/V (W/m^3)", 93.0, "SSB_10kL_ABEC", 9000);
Automatisierung und SkriptingWindowsBetreff: Bitte um Hilfe beim Festlegen und Maximieren der Attraktivität innerhalb einer Funktion.Ich bin mir nicht sicher, wie Sie Antwortgrenzen auf diese Weise, getrennt vom Profiler, verwenden würden, da die Dokumentation fehlt und die gewählte Syntax meiner Meinung nach ziemlich schlecht ist. Ich weiß, dass Sie den gesamten Profiler-Ausdruck erstellen und die Antwortgrenzen darin einbeziehen können. Eine andere Möglichkeit wäre die Verwendung der Spalteneigenschaft „Antwortgrenze“, aber ich denke, diese muss vor dem Ausführen des Profilers festgelegt werden. Wenn Sie sich Ihre Funktion ansehen, sollte die Integration in den Profiler problemlos möglich sein. Dieser Beitrag vermittelt die grundlegende JSL-Idee zur Modellanpassung, Maximierung der Attraktivität und Extraktion von Ergebnissen mit benutzerwählbaren Spalten.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Tiretread.jmp");
lval = 150;
mval = 200;
uval = 300;
col = "Pred Formula ABRASION";
pf = Eval(Substitute(
Expr(dt << Profiler(
Y(_col_),
_colw_ << Response Limits(
{Lower(_lval_, 0.9819), Middle(_mval_, 0.5), Upper(_uval_, 0.066),
Goal(Maximize), Importance(1)}
)
)),
Expr(_col_), Name Expr(As Column(dt, col)),
Expr(_colw_), Parse(col),
Expr(_lval_), lval,
Expr(_mval_), mval,
Expr(_uval_), uval
));
Sie können den verwendeten Ausdruck überprüfen, indem Sie einfach den Substitute-Teil ohne Eval ausführen

Betreff: Bitte um Hilfe beim Festlegen und Maximieren der Attraktivität innerhalb einer Funktion.Hallo Jarmo,
Vielen Dank für Ihren Vorschlag. Ich werde den Profiler wie vorgeschlagen umschreiben. Allerdings wundert mich immer noch etwas über die Syntax. Ich habe meine Funktion umgeschrieben, um „Antwortgrenzen“ innerhalb des Profils statt in einem separaten Schritt festzulegen. Es funktioniert immer noch nicht. Aber wenn ich den Namen der Spaltenvariablen ersetze und ihn durch den Spaltennamen fest codiere, funktioniert es. Können Sie mir sagen, was ich möglicherweise falsch mache?
Wenn ich Folgendes im in der Funktion definierten Profiler mache, funktioniert es:
"P/V (W/m^3)"n << Response Limits(
{
Goal("Match Target"),
Importance( 1 ),
Lower(valueOfHydyMetric*0.8, 0.0183),
Middle(valueOfHydyMetric, 1),
Upper(valueOfHydyMetric*1.2, 0.0183)
}
),
Aber wenn ich das mache, funktioniert es nicht
Column (dt, HydyMetricMixing) << Response Limits(
{
Goal("Match Target"),
Importance( 1 ),
Lower(valueOfHydyMetric*0.8, 0.0183),
Middle(valueOfHydyMetric, 1),
Upper(valueOfHydyMetric*1.2, 0.0183)
}
),
I tried everything, parsing, eval, expr, etc. I just want the column name stored as a string to work with the Response Limits message. Here HydyMetricMixing is just a variable that stores the string "P/V (W/m^3)".
Betreff: Bitte um Hilfe beim Festlegen und Maximieren der Attraktivität innerhalb einer Funktion.Antwortgrenzen werden nicht wirklich an eine Spalte, sondern an einen JMP-Namen gesendet. Deshalb verwende ich Parse() und nicht Column()/AsColumn(). Keine Ahnung, warum das so implementiert ist.
Versuchen Sie in Ihrem Fall, As Name() anstelle von Parse() zu verwenden, da Ihr Spaltenname eine spezielle Syntax (""n) erfordert.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Tiretread.jmp");
Column(dt, "Pred Formula ABRASION") << Set Name("Pred Formula ABRASION/123-");
lval = 120;
mval = 150;
uval = 190;
col = "Pred Formula ABRASION/123-";
pf = Eval(Substitute(
Expr(dt << Profiler(
Y(_col_),
_colw_ << Response Limits(
{Lower(_lval_, 0.9819), Middle(_mval_, 0.5), Upper(_uval_, 0.066),
Goal(Maximize), Importance(1)}
)
)),
Expr(_col_), Name Expr(As Column(dt, col)),
Expr(_colw_), As Name(col),
Expr(_lval_), lval,
Expr(_mval_), mval,
Expr(_uval_), uval
));
pf << Desirability Functions(1);
Ich schlage vor, den Ausdruck zu überprüfen, den Sie erstellen. Mit Substitute und EvalExpr ist es ganz einfach, indem Sie einfach den hervorgehobenen Teil ausführen

Ich werde das auch anfangen zu verwenden, da es viel robuster ist und höchstwahrscheinlich der richtige Weg für so etwas ist.
Betreff: Bitte um Hilfe beim Festlegen und Maximieren der Attraktivität innerhalb einer Funktion.Hallo Jarmo,
Das hat perfekt funktioniert! Die Änderung von Parse() in As Name() hat alles behoben und weist nun den in der Variable gespeicherten Namensstring korrekt als Spalte zu, an die die Antwortgrenzen übergeben werden müssen.
Nochmals vielen Dank für Ihre Hilfe!