Querida comunidad JMP,
¿Es posible pausar un bucle FOR y luego reanudarlo más tarde? Estoy pensando en tener una ventana emergente con un botón de "pausar" y un botón de "reanudar". La idea sería que en el script, cuando se presiona el botón de pausa, el cálculo finalizaría, el número de iteración que aún está en la memoria permanecería de modo que cuando se presione el botón de reanudar, el cálculo se reanudaría en la iteración dada.
Si no es posible, hágamelo saber y dejaré de intentar hacerlo por mi cuenta.
¡Gracias!,
DS
Hola @cwillden ,
Gracias por su aporte sobre esto, ¡es una gran solución! Funciona con mi script de prueba que muestra un indicador de progreso para el progreso general del modelado cuando ejecuto una tabla de ajuste grande.
Mi objetivo final es realizar la llamada para ajustar los datos en la parte loop_expr para poder pausar el proceso de modelado general y reanudarlo más tarde. Creo que esto podría requerir un poco más de arreglo. Lo estoy probando con el script (de Mark Bailey) de esta publicación. aquí utilizando la plataforma SVM.
Aquí está la barra de progreso/script de iteración que tengo y que me gustaría usar para "controlar" el progreso al poder pausar y luego reanudar más adelante.
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>
Aquí está el script SVM que escribió 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 )
)
);
¡Cualquier sugerencia sobre cómo hacerlo sería genial!
¡Gracias!,
DS
He aquí una ilustración de un enfoque.Básicamente, hay una variable, iter, que rastrea las iteraciones separadas de la variable de iteración del bucle For, 'i' en este caso.Cuando hace una pausa y reinicia, el bucle For comienza en iter+1 y continúa.Sin la función wait(), esto no funcionaría porque el script del botón de parada no se ejecutaría hasta el final del ciclo.0,5 segundos es una espera mucho más larga de lo necesario.De hecho, este ejemplo funciona con 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);
);