친애하는 JMP 커뮤니티 여러분,
FOR 루프를 일시 중지했다가 나중에 다시 재개할 수 있습니까? "일시 중지" 버튼과 "재개" 버튼이 있는 팝업 창을 만들 생각입니다. 일시 중지 버튼을 누르면 스크립트에서 계산이 완료되고 메모리에 있는 반복 번호는 계속 유지되므로 다시 시작 버튼을 누르면 지정된 반복에서 계산이 시작됩니다.
가능하지 않은 경우 알려주시면 더 이상 혼자서 이 문제를 해결하려는 노력을 중단하겠습니다.
감사해요!,
DS
안녕 @cwillden ,
이에 대한 귀하의 의견에 감사드립니다. 훌륭한 솔루션입니다! 이는 대규모 튜닝 테이블을 실행할 때 전체 모델링 진행 상황에 대한 진행 표시기를 보여주는 테스트 스크립트와 함께 작동합니다.
나의 최종 목표는 전체 모델링 프로세스를 일시 중지하고 나중에 다시 시작할 수 있도록 데이터를 loop_expr 부분에 맞추는 호출을 넣는 것입니다. 내 생각엔 이건 좀 더 마무리하는 데 시간이 걸릴 것 같아. 이 게시물의 스크립트(Mark Bailey's)를 사용하여 테스트하고 있습니다. 여기 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
다음은 한 가지 접근 방식을 보여줍니다.기본적으로 For 루프의 반복 변수 'i'와 별도로 반복을 추적하는 변수 iter가 있습니다.일시 중지했다가 다시 시작하면 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);
);