Liebe JMP-Community,
Ist es möglich, eine FOR-Schleife anzuhalten und später wieder fortzusetzen? Ich denke über ein Popup-Fenster mit einer Schaltfläche „Pause“ und einer Schaltfläche „Fortsetzen“ nach. Die Idee wäre, dass im Skript die Berechnung beendet wird, wenn die Pause-Taste gedrückt wird. Die noch im Speicher befindliche Iterationsnummer bleibt erhalten, sodass die Berechnung bei der angegebenen Iteration fortgesetzt wird, wenn die Fortsetzungstaste gedrückt wird.
Wenn dies nicht möglich ist, lassen Sie es mich bitte wissen und ich werde aufhören, die Sache alleine weiterzuverfolgen.
Danke!,
DS
Hallo @cwillden ,
Vielen Dank für Ihren Beitrag dazu, es ist eine großartige Lösung! Es funktioniert mit meinem Testskript, das einen Fortschrittsindikator für den gesamten Modellierungsfortschritt anzeigt, wenn ich eine große Optimierungstabelle ausführe.
Mein Endziel besteht darin, den Aufruf zum Einpassen der Daten in den Abschnitt „loop_expr“ zu platzieren, sodass ich den gesamten Modellierungsprozess anhalten und später fortsetzen kann. Ich denke, das könnte etwas mehr Fummelei erfordern. Ich teste es mit dem Skript (Mark Baileys) aus diesem Beitrag Hier Verwendung der SVM-Plattform.
Hier ist mein Fortschrittsbalken/Iterationsskript, mit dem ich den Fortschritt „kontrollieren“ möchte, indem ich anhalten und zu einem späteren Zeitpunkt fortfahren kann.
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>
Hier ist das SVM-Skript, das Mark geschrieben hat:
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 )
)
);
Irgendwelche Vorschläge, wie das geht, wären großartig!
Danke!,
DS
Hier ist eine Illustration eines Ansatzes.Grundsätzlich gibt es eine Variable, iter, die die Iterationen unabhängig von der Iterationsvariablen der For-Schleife verfolgt, in diesem Fall „i“.Wenn Sie anhalten und neu starten, beginnt die For-Schleife bei iter+1 und läuft weiter.Ohne die Funktion wait() würde dies nicht funktionieren, da das Skript über die Stopp-Schaltfläche erst am Ende der Schleife ausgeführt würde.0,5 Sekunden ist eine viel längere Wartezeit als nötig.Tatsächlich funktioniert dieses Beispiel mit 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);
);