親愛的 JMP 社群:
是否可以暫停 FOR 循環,稍後再恢復? 我正在考慮有一個帶有“暫停”按鈕和“恢復”按鈕的彈出視窗。 這個想法是,在腳本中,當按下暫停按鈕時,計算將完成,仍在記憶體中的迭代編號將保留,以便當按下恢復按鈕時,計算將在給定的迭代處開始。
如果不可能,請告訴我,我將停止嘗試自己追求這一目標。
謝謝!,
DS
你好@cwillden ,
感謝您對此的意見,這是一個很好的解決方案! 它與我的測試腳本配合使用,當我執行大型調整表時,該腳本顯示整體建模進度的進度指示器。
我的最終目標是將適合資料的呼叫放入loop_expr部分,以便我可以暫停整個建模過程並稍後恢復。 我認為這可能需要更多的欺騙。 我正在使用這篇文章中的腳本(馬克貝利的)測試它這裡使用SVM平台。
這是我擁有的進度條/迭代腳本,我想用它來「控制」進度,能夠暫停然後稍後恢復。
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>
這是 Mark 編寫的 SVM 腳本:
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 )
)
);
任何關於如何做到這一點的建議都會很棒!
謝謝!,
DS
下面是一種方法的範例。基本上,有一個變數 iter,它追蹤與 For 迴圈的迭代變數(本例為「i」)分開的迭代。當暫停並重新啟動時,For 循環從 iter+1 開始並繼續進行。如果沒有 wait() 函數,這將不起作用,因為停止按鈕中的腳本直到循環結束才會執行。0.5 秒的等待時間比必要的要長得多。事實上,這個例子適用於 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);
);