Changeset 52


Ignore:
Timestamp:
Sep 27, 2006 6:24:45 PM (13 years ago)
Author:
ladanyi
Message:

Added warmstart

Location:
stable/0.1/Bonmin/experimental/Bcp
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • stable/0.1/Bonmin/experimental/Bcp/BM.cpp

    r42 r52  
    6262    keys.push_back(make_pair(BCP_string("NumNlpFailureMax"),
    6363                             BCP_parameter(BCP_IntPar, NumNlpFailureMax)));
     64    keys.push_back(make_pair(BCP_string("WarmStartStrategy"),
     65                             BCP_parameter(BCP_IntPar, WarmStartStrategy)));
    6466    keys.push_back(make_pair(BCP_string("NL_filename"),
    6567                             BCP_parameter(BCP_StringPar, NL_filename)));
     
    8082    set_entry(VarWithLowPriorityMoreImportant, true);
    8183    set_entry(NumNlpFailureMax, 5);
     84    set_entry(WarmStartStrategy, WarmStartFromRoot);
    8285    set_entry(NL_filename, "");
    8386    set_entry(IpoptParamfile, "");
  • stable/0.1/Bonmin/experimental/Bcp/BM.hpp

    r42 r52  
    4040
    4141//#############################################################################
    42    
     42
     43enum BM_WarmStartStrategy {
     44    WarmStartNone,
     45    WarmStartFromRoot,
     46    WarmStartFromParent
     47};
     48
    4349class BM_par {
    4450public:
     
    5662        //
    5763        NumNlpFailureMax,
     64        WarmStartStrategy,
    5865        end_of_int_params
    5966    };
     
    179186    OsiBabSolver babSolver_;
    180187    BonminAmplInterface nlp;
     188    CoinWarmStart* ws;
    181189
    182190    double lower_bound_;
  • stable/0.1/Bonmin/experimental/Bcp/BM_lp.cpp

    r45 r52  
    99    babSolver_(3),
    1010    nlp(),
     11    ws(NULL),
    1112    feasChecker_(NULL),
    1213    in_strong(0)
     
    2021BM_lp::~BM_lp()
    2122{
     23    delete ws;
    2224    delete feasChecker_;
    2325    delete[] primal_solution_;
     
    134136           a feas sol) then create "sol"
    135137        */
    136         nlp.initialSolve();
     138        if (current_index() == 0) {
     139            nlp.initialSolve();
     140            switch (par.entry(BM_par::WarmStartStrategy)) {
     141            case WarmStartNone:
     142                break;
     143            case WarmStartFromRoot:
     144                ws = nlp.getWarmStart();
     145                break;
     146            case WarmStartFromParent:
     147                // FIXME: not yet implemented
     148                break;
     149            }
     150        } else {
     151            switch (par.entry(BM_par::WarmStartStrategy)) {
     152            case WarmStartNone:
     153                nlp.initialSolve();
     154                break;
     155            case WarmStartFromRoot:
     156                nlp.setWarmStart(ws);
     157                nlp.resolve();
     158                break;
     159            case WarmStartFromParent:
     160                // FIXME: not yet implemented
     161                nlp.initialSolve();
     162                break;
     163            }
     164        }
    137165        if (nlp.isProvenOptimal()) {
    138166            const int numCols = nlp.getNumCols();
     
    167195            }
    168196            if (lower_bound_>upper_bound()-get_param(BCP_lp_par::Granularity) &&
    169                         par.entry(BM_par::PrintBranchingInfo)) {
    170                         printf("\
     197                par.entry(BM_par::PrintBranchingInfo)) {
     198                printf("\
    171199BM_lp: At node %i : will fathom because of high lower bound\n",
    172                                    current_index());
     200                       current_index());
    173201            }
    174202        }
     
    177205            lower_bound_ = 1e200;
    178206            numNlpFailed_ = 0;
    179                 if (par.entry(BM_par::PrintBranchingInfo)) {
    180                         printf("\
     207            if (par.entry(BM_par::PrintBranchingInfo)) {
     208                printf("\
    181209BM_lp: At node %i : will fathom because of infeasibility\n",
    182                                    current_index());
    183                 }
     210                       current_index());
     211            }
    184212        }
    185213        else if (nlp.isAbandoned()) {
     214            if (nlp.isIterationLimitReached()) {
     215                printf("\
     216BM_lp: At node %i : WARNING: nlp reached iter limit. Will force branching\n",
     217                       current_index());
     218            } else {
    186219                printf("\
    187220BM_lp: At node %i : WARNING: nlp is abandoned. Will force branching\n",
    188                            current_index());
     221                       current_index());
     222            }
    189223            // nlp failed
    190224            nlp.forceBranchable();
Note: See TracChangeset for help on using the changeset viewer.