[[ノート>ノート/ノート]]~
訪問者数 &counter();      最終更新 &lastmod();

*EPMRを読んでみる(2) [#e10c66d8]
⇒ EPMRを読んでみる(1):[[ノート/EPMRを見る1]]
***起動時のコマンドラインパラメタ(引数)を手がかりにして読む [#pb5ecdc1]

まず、-n を手がかりにして考える。
 -n integer The number of independent optimization attempts
    The default value is 10, which is intended for routine cases. For difficult
    cases, values up to 100 are worth trying. The program will stop before the
    completion of the number of runs specified here if a solution is obtained
    that has a correlation coefficient that exceeds a specified threshold (flag t,
below).

この-nで決められるパラメタは、main.cppの82-84行目で
                case 'n':
                    epmr.SetOption( "attempts", optarg );
                    break;
であるから、attemptsを設定している。確かにデフォルト値は Epmr.cppの97行目で
     defaultOptions[ "attempts" ] = "10"; // maximum runs to attempt
としている。更に、Epmr.cppの407行目(Initializeの中)で
     nAttempts = GetIntegerOptionValue( "attempts" );
として、変数nAttemptsに設定されている。

但し、Epmr.cppのReconcileOptions() の702-705行目で
    // change attempts to one if no global optimizer
    if ( options[ "optimizer.global" ] == "none" ) {
        if ( options[ "attempts" ] == defaultOptions[ "attempts" ] )
            SetOption( "attempts", "1" );
としている。つまり、もしoptimizer.globalがnoneで、attemptsがデフォルト値(10)であれば、attemptsを1に修正してしまう(1トライしかしない)。

では、nAttemptsはどう参照されているか?
-584行目付近で
    else if ( options[ "output.level" ] == "best" &&
              ( attempt == nAttempts || Converged() ) ) {
        WriteSolution( bestSolution, bestScore, bestRfactor );
    }
つまり、output.levelが(allでなく)bestの時、かつattemptがnAttemptsに達するか
収束した(Converged())の時、出力する。
-588行目で、    attempt++;
-589行目で
    if ( attempt > nAttempts || 
         ( options[ "autostop" ] == "true" && nDuplicateSolutions > 1 ) ) {
つまり、attemptがnAttemptsを越えたか、△△△の時に、云々。~
なお、このif節の中の599行目で1にリセットしている。 
        attempt = 1;


-

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS