Changeset 2203


Ignore:
Timestamp:
Jun 26, 2015 10:38:52 AM (4 years ago)
Author:
forrest
Message:

Positive Edge in Cbc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cbc/src/CbcSolver.cpp

    r2163 r2203  
    3737#include "ClpDualRowSteepest.hpp"
    3838#include "ClpDualRowDantzig.hpp"
     39#include "ClpPEDualRowSteepest.hpp"
     40#include "ClpPEDualRowDantzig.hpp"
     41#include "ClpPEPrimalColumnSteepest.hpp"
     42#include "ClpPEPrimalColumnDantzig.hpp"
    3943#include "ClpLinearObjective.hpp"
    4044#include "ClpPrimalColumnSteepest.hpp"
     
    24562460                                ClpDualRowSteepest steep(2);
    24572461                                lpSolver->setDualRowPivotAlgorithm(steep);
    2458                             } else {
     2462                            } else if (action == 3) {
    24592463                                ClpDualRowSteepest steep;
    24602464                                lpSolver->setDualRowPivotAlgorithm(steep);
     2465                            } else if (action == 4) {
     2466                              // Positive edge steepest
     2467                              ClpPEDualRowSteepest p(fabs(parameters_[whichParam(CLP_PARAM_DBL_PSI, numberParameters_, parameters_)].doubleValue()));
     2468                              lpSolver->setDualRowPivotAlgorithm(p);
     2469                            } else if (action == 5) {
     2470                              // Positive edge Dantzig
     2471                              ClpPEDualRowDantzig p(fabs(parameters_[whichParam(CLP_PARAM_DBL_PSI, numberParameters_, parameters_)].doubleValue()));
     2472                              lpSolver->setDualRowPivotAlgorithm(p);
    24612473                            }
    24622474                            break;
     
    24832495                                ClpPrimalColumnSteepest steep(10);
    24842496                                lpSolver->setPrimalColumnPivotAlgorithm(steep);
     2497                            } else if (action == 7) {
     2498                              // Positive edge steepest
     2499                              ClpPEPrimalColumnSteepest p(fabs(parameters_[whichParam(CLP_PARAM_DBL_PSI, numberParameters_, parameters_)].doubleValue()));
     2500                              lpSolver->setPrimalColumnPivotAlgorithm(p);
     2501                            } else if (action == 8) {
     2502                              // Positive edge Dantzig
     2503                              ClpPEPrimalColumnDantzig p(fabs(parameters_[whichParam(CLP_PARAM_DBL_PSI, numberParameters_, parameters_)].doubleValue()));
     2504                              lpSolver->setPrimalColumnPivotAlgorithm(p);
    24852505                            }
    24862506                            break;
     
    27272747                            double objScale =
    27282748                                parameters_[whichParam(CLP_PARAM_DBL_OBJSCALE2, numberParameters_, parameters_)].doubleValue();
     2749                            // deal with positive edge
     2750                            double psi = parameters_[whichParam(CLP_PARAM_DBL_PSI, numberParameters_, parameters_)].doubleValue();
     2751                            if (psi>0.0) {
     2752                              ClpDualRowPivot * dualp = lpSolver->dualRowPivot();
     2753                              ClpDualRowSteepest * d1 = dynamic_cast<ClpDualRowSteepest *>(dualp);
     2754                              ClpDualRowDantzig * d2 = dynamic_cast<ClpDualRowDantzig *>(dualp);
     2755                              if (d1) {
     2756                                ClpPEDualRowSteepest p(psi,d1->mode());
     2757                                lpSolver->setDualRowPivotAlgorithm(p);
     2758                              } else if (d2) {
     2759                                ClpPEDualRowDantzig p(psi);
     2760                                lpSolver->setDualRowPivotAlgorithm(p);
     2761                              }
     2762                              ClpPrimalColumnPivot * primalp = lpSolver->primalColumnPivot();
     2763                              ClpPrimalColumnSteepest * p1 = dynamic_cast<ClpPrimalColumnSteepest *>(primalp);
     2764                              ClpPrimalColumnDantzig * p2 = dynamic_cast<ClpPrimalColumnDantzig *>(primalp);
     2765                              if (p1) {
     2766                                ClpPEPrimalColumnSteepest p(psi,p1->mode());
     2767                                lpSolver->setPrimalColumnPivotAlgorithm(p);
     2768                              } else if (p2) {
     2769                                ClpPEPrimalColumnDantzig p(psi);
     2770                                lpSolver->setPrimalColumnPivotAlgorithm(p);
     2771                              }
     2772                            }
    27292773                            if (objScale != 1.0) {
    27302774                                int iColumn;
     
    34083452                                si->getModelPtr()->scaling(doScaling);
    34093453                                ClpSimplex * lpSolver = si->getModelPtr();
     3454                                // deal with positive edge
     3455                                double psi = parameters_[whichParam(CLP_PARAM_DBL_PSI, numberParameters_, parameters_)].doubleValue();
     3456                                if (psi>0.0) {
     3457                                  ClpDualRowPivot * dualp = lpSolver->dualRowPivot();
     3458                                  ClpDualRowSteepest * d1 = dynamic_cast<ClpDualRowSteepest *>(dualp);
     3459                                  ClpDualRowDantzig * d2 = dynamic_cast<ClpDualRowDantzig *>(dualp);
     3460                                  if (d1) {
     3461                                    ClpPEDualRowSteepest p(psi,d1->mode());
     3462                                    lpSolver->setDualRowPivotAlgorithm(p);
     3463                                  } else if (d2) {
     3464                                    ClpPEDualRowDantzig p(psi);
     3465                                    lpSolver->setDualRowPivotAlgorithm(p);
     3466                                  }
     3467                                  ClpPrimalColumnPivot * primalp = lpSolver->primalColumnPivot();
     3468                                  ClpPrimalColumnSteepest * p1 = dynamic_cast<ClpPrimalColumnSteepest *>(primalp);
     3469                                  ClpPrimalColumnDantzig * p2 = dynamic_cast<ClpPrimalColumnDantzig *>(primalp);
     3470                                  if (p1) {
     3471                                    ClpPEPrimalColumnSteepest p(psi,p1->mode());
     3472                                    lpSolver->setPrimalColumnPivotAlgorithm(p);
     3473                                  } else if (p2) {
     3474                                    ClpPEPrimalColumnDantzig p(psi);
     3475                                    lpSolver->setPrimalColumnPivotAlgorithm(p);
     3476                                  }
     3477                                }
    34103478                                if (doVector) {
    34113479                                    ClpMatrixBase * matrix = lpSolver->clpMatrix();
Note: See TracChangeset for help on using the changeset viewer.