/home/coin/SVN-release/Bcp-1.2.1/Applications/Csp/include/CSP_userexits.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2005, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef CSP_USEREXITS_H
00004 #define CSP_USEREXITS_H
00005 
00006 #include <algorithm>
00007 #include <vector>
00008 
00009 #include <OsiClpSolverInterface.hpp>
00010 
00011 class CSP_subProblem;
00012 
00013 class UserData {
00014 public:
00015    CSP_subProblem* subProblem;
00016    OsiClpSolverInterface* solver;
00017    int cutMode;
00018    int nBaseRows;
00019    std::vector<const double*> denseSols;
00020    std::vector<double> objval;
00021 public:
00022    void clear() {
00023       for (int i = denseSols.size() - 1; i >= 0; --i)
00024          delete[] denseSols[i];
00025       denseSols.clear();
00026       objval.clear();
00027    }
00028    bool addSol(const double* sol, double val) {
00029       const int size = solver->getNumCols();
00030       for (int i = denseSols.size() - 1; i >= 0; --i) {
00031          if (fabs(objval[i] - val) > 1e-3)
00032             continue;
00033          if (std::equal(sol, sol + size, denseSols[i])) {
00034             delete[] sol;
00035             return false;
00036          }
00037       }
00038       denseSols.push_back(sol);
00039       objval.push_back(val);
00040       return true;
00041    }
00042    int numSolutions() {
00043       return denseSols.size();
00044    }
00045    const double* solution(int i) {
00046       return denseSols[i];
00047    }
00048 
00049    UserData() : subProblem(0), solver(0), cutMode(0) {}
00050    ~UserData() { clear(); }
00051 };
00052 
00053 UserData* initializeUserData(CSP_subProblem* sp, OsiClpSolverInterface* solver,
00054                              int baseRows);
00055 
00056 #endif

Generated on Thu Jan 15 03:00:58 2009 for coin-Bcp by  doxygen 1.4.7