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
以下に 1 つのアプローチを示します。基本的に、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);
);