亲爱的 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);
);