Chère communauté JMP,
Est-il possible de mettre une boucle FOR en pause et de la reprendre plus tard ? Je pense avoir une fenêtre popup avec un bouton "pause" et un bouton "reprendre". L'idée serait que dans le script, lorsque le bouton pause est enfoncé, le calcul se terminerait, le numéro d'itération toujours en mémoire resterait de sorte que lorsque le bouton de reprise est enfoncé, le calcul reprendrait à l'itération donnée.
Si ce n'est pas possible, faites-le-moi savoir et j'arrêterai d'essayer de poursuivre cela par moi-même.
Merci!,
DS
Salut @cwillden ,
Merci pour votre contribution à ce sujet, c'est une excellente solution ! Cela fonctionne avec mon script de test qui affiche un indicateur de progression pour la progression globale de la modélisation lorsque j'exécute une grande table de réglage.
Mon objectif final est de placer l'appel pour insérer les données dans la partie loop_expr afin de pouvoir suspendre le processus de modélisation global et le reprendre plus tard. Je pense que cela pourrait prendre un peu plus de temps. Je le teste avec le script (Mark Bailey's) de ce post ici en utilisant la plateforme SVM.
Voici la barre de progression/script d'itération que j'ai et que j'aimerais utiliser pour "contrôler" la progression en pouvant faire une pause puis reprendre plus tard.
Names Default To Here( 1 );
i = 1;
imax = 100;
dlgStatus = New Window( "Overall Modeling Progress",
V List Box(
Text Box( " Overall Modeling Progress ", <<SET font="" size=""></SET>
Voici le script SVM écrit par Mark :
Names Default To Here( 1 );
// use a small example
data = Open( "$SAMPLE_DATA/Big Class.jmp" );
// launch SVM platform
svm = data << Support Vector Machines( Y( :age ), X( :height, :weight ) );
// iterate over a range of hyper-parameters
For( cost = 0.1, cost <= 5, cost += 0.05,
For( gamma = 0.1, gamma <= 1, gamma += 0.1,
svm << Fit(
Kernel Function( "Radial Basis Function" ),
Gamma( gamma ),
Cost( cost ),
Validation Method( "None" )
)
)
);
// separate parameters and performance in a new table
results = Report( svm )["Model Comparison"][Table Box( 1 )] << Make Into Data Table;
// fit interpolator for profiling
results << Neural(
Y( :Training Misclassification Rate ),
X( :Cost, :Gamma ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit(
NTanH( 3 ),
Profiler(
1,
Confidence Intervals( 1 ),
Term Value( Cost( 2.75, Lock( 0 ), Show( 1 ) ), Gamma( 1, Lock( 0 ), Show( 1 ) ) )
),
Plot Actual by Predicted( 1 ),
Plot Residual by Predicted( 1 )
)
);
Toutes les suggestions sur la façon de procéder seraient formidables !
Merci!,
DS
Voici une illustration d’une approche.Fondamentalement, il existe une variable, iter, qui suit les itérations, distincte de la variable d'itération de la boucle For, « i » dans ce cas.Lorsque vous faites une pause et redémarrez, la boucle For démarre à iter+1 et continue.Sans la fonction wait(), cela ne fonctionnerait pas car le script du bouton d'arrêt ne s'exécuterait qu'à la fin de la boucle.0,5 seconde est une attente beaucoup plus longue que nécessaire.En fait, cet exemple fonctionne avec wait(0).
New Window( "Test Pause Loop",
V List Box(
tb1 = Text Box( "Iteration: 0" ),
H List Box(
start_btn = Button Box( "Start", On Start ),
stop_btn = Button Box( "Stop", On Stop )
)
)
);
pause_state = 1;
iter = 0;
loop_expr = Expr(
for(i = iter+1, i<=1000, i++,
iter = i;
tb1 << Set Text("Iteration: "||char(iter));
wait(0.5);
show(iter, pause_state);
if(pause_state == 1, break());
)
);
On Start = Expr(
pause_state = 0;
start_btn << Enable(0);
loop_expr();
);
On Stop = Expr(
pause_state=1;
start_btn << Enable(1);
);