Comment passer une variable dans la formule du profileur personnaliséNous pouvons définir une formule personnalisée dans le profileur personnalisé et c'est assez simple, comme le montre l'exemple suivant
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;
Maintenant, disons que je voudrais changer la valeur du coefficient de 0,5 à un autre paramètre. Je définis donc la formule suivante :
coef=4;
myFormula=Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS")));
le résultat dans le log est ok :
:Pred Formule ABRASION + 4 * :Pred Formule MODULE
mais, si j'utilise la même phrase dans l'énoncé précédent, je n'arrive pas à avoir le résultat attendu :
obj << Objective Formula(Parse(eval(EvalExpr(":Pred Formula ABRASION + "||Char(coef)||" * :Pred Formula MODULUS"))));

J'ai probablement fait une erreur de base, mais j'ai des problèmes avec elle. et je voudrais adapter cette méthode à une situation plus complexe (changer les coefficients de désirabilité dans l'expression native)
Merci pour vos suggestions
Re : Comment passer une variable dans la formule du profileur personnaliséFlorence,
En général, il est préférable de traiter l'expression comme des expressions plutôt que comme une chaîne de texte à évaluer. Cela fonctionnera :
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;
Enfiler
Re : Comment passer une variable dans la formule du profileur personnaliséSalut Don,
Merci beaucoup pour votre réponse.
Dans cet exemple de base, cela fonctionne plutôt bien, car ma formule est simple.
Dans la vraie vie, j'ai une situation plus complexe. Je veux pouvoir définir le contenu des désirabilités que je vais attraper à partir d'une table de données.
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;
si j'applique le substitut dans ce cas, j'ai une erreur.

et oui.... Je veux changer le contenu des 6 variables (target et spec pour les deux Y)!!
Merci pour vos suggestions,
Florence
Re : Comment passer une variable dans la formule du profileur personnaliséFlorence,
Le problème a à voir avec le fonctionnement de l'opérateur matriciel (les crochets ouvrants et fermants). L'approche la plus simple à laquelle je puisse penser est de créer les matrices à l'avance et de les traiter comme un tout, plutôt que d'essayer de les construire dans Remplaçant . Cela devrait fonctionner
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 : Comment passer une variable dans la formule du profileur personnaliséJ'ai l'impression qu'il me manque quelque chose ici. Pourquoi utiliser l'Expr/Eval, etc. au lieu de simplement mettre la formule ?
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 : Comment passer une variable dans la formule du profileur personnaliséSi vous regardez l'expression dans le Formule aperçu, les valeurs pour y1Mat et y2Mat apparaissent non évalués, c'est-à-dire sous forme de variables :
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)
BTW, il semble que j'ai eu quelques erreurs dans le code précédent. Voici la version corrigée
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;
Cela dit, je ne suis pas sûr que ce soit la façon d'implémenter différentes limites pour les fonctions de désirabilité. La formule semble correcte, mais la valeur de l'objectif est manquante.
Re : Comment passer une variable dans la formule du profileur personnaliséMerci pour les conseils! Ça marche
Concernant la formule, c'est celle définie par JMP lorsque je lance le profileur personnalisé avec la formule de prédiction générée par la plateforme Fit Model.
La valeur par défaut est la suivante :

avec ce type de formule de prédiction :

Je vais vérifier si j'ai les mêmes résultats que sur la plateforme native de Model Fitting.
Merci encore!
Re : Comment passer une variable dans la formule du profileur personnaliséMerci Florence,
J'ai trouvé le problème. j'ai utilisé ABRASION et MODULE dans Profileur personnalisé mais utilisé ABRASION et ÉLONGATION dans le Formule objective .
Voici le code sans erreur (espérons-le):
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;