/home/coin/SVN-release/OS-2.4.1/examples/osDip/OSDip_Main.cpp

Go to the documentation of this file.
00001 //===========================================================================//
00002 // This file is part of the Decomp Solver Framework.                         //
00003 //                                                                           //
00004 // Decomp is distributed under the Common Public License as part of the      //
00005 // COIN-OR repository (http://www.coin-or.org).                              //
00006 //                                                                           //
00007 // Author: Matthew Galati, Lehigh University   
00008 // Modified by Kipp Martin
00009 //
00010 //                                                                           //
00011 // Copyright (C) 2002-2009, Lehigh University, Matthew Galati, and Ted Ralphs//
00012 // All Rights Reserved.                                                      //
00013 //===========================================================================//
00014 
00015 //===========================================================================//
00016 #include "UtilParameters.h"
00017 //===========================================================================//
00018 #include "OSDipApp.h"
00019 //===========================================================================//
00020 #include "AlpsDecompModel.h"
00021 //===========================================================================//
00022 #include "DecompAlgoC.h"
00023 #include "DecompAlgoPC.h"
00024 #include "DecompAlgoRC.h"
00025 //===========================================================================//
00026 #include "UtilTimer.h"
00027 #include<map>
00028 
00029 //===========================================================================//
00030 int main(int argc, char ** argv){
00031    try{
00032 
00033       //---
00034       //--- create the utility class for parsing parameters
00035       //---
00036       UtilParameters utilParam(argc, argv);  
00037 
00038       bool doCut          = utilParam.GetSetting("doCut",          false);
00039       bool doPriceCut     = utilParam.GetSetting("doPriceCut",     true);
00040       bool doDirect       = utilParam.GetSetting("doDirect",       false);
00041 
00042    
00043       UtilTimer timer;
00044       double    timeSetupReal = 0.0;
00045       double    timeSetupCpu  = 0.0;
00046       double    timeSolveReal = 0.0;
00047       double    timeSolveCpu  = 0.0;
00048    
00049       //---
00050       //--- start overall timer
00051       //---
00052       timer.start();
00053       
00054       //---
00055       //--- create the user application (a DecompApp)
00056       //---  
00057       
00058       OSDipApp osdip( utilParam); 
00059       
00060       //return 0;
00061       
00062      
00063       //---
00064       //--- create the algorithm (a DecompAlgo)
00065       //---
00066       DecompAlgo *algo = NULL;
00067       assert(doCut + doPriceCut == 1);
00068 
00069       //---
00070       //--- create the CPM algorithm object
00071       //---      
00072       if(doCut)
00073          algo = new DecompAlgoC(&osdip, &utilParam);
00074    
00075       //---
00076       //--- create the PC algorithm object
00077       //---
00078       if(doPriceCut){
00079          std::cout << "CREATE NEW DecompAlgoPC" << std::endl;
00080          algo = new DecompAlgoPC(&osdip, &utilParam);
00081          std::cout << "DONE CREATE NEW DecompAlgoPC" << std::endl;
00082          //delete algo;
00083          //return 0;
00084 
00085       }
00086    
00087       if(doCut && doDirect){
00088          timer.stop();
00089          timeSetupCpu  = timer.getCpuTime();
00090          timeSetupReal = timer.getRealTime();
00091       
00092          //---
00093          //--- solve
00094          //---
00095          timer.start();      
00096         // algo->solveDirect(timeLimit);
00097          algo->solveDirect();
00098          timer.stop();
00099          timeSolveCpu  = timer.getCpuTime();
00100          timeSolveReal = timer.getRealTime();
00101       }
00102       else{
00103          timer.stop();
00104          timeSetupCpu  = timer.getCpuTime();
00105          timeSetupReal = timer.getRealTime();
00106       
00107          //---
00108          //--- create the driver AlpsDecomp model
00109          //---
00110          int             status = 0;
00111          AlpsDecompModel alpsModel(utilParam, algo);
00112       
00113          //---
00114          //--- solve
00115          //---
00116          timer.start();     
00117          std::cout << std::endl << std::endl << std::endl << std::endl;
00118          std::cout << "***************START SOLVE***************" << std::endl;
00119          
00120     
00121          
00122          status = alpsModel.solve();
00123          std::cout << "FINISH SOLVE" << std::endl;
00124          timer.stop();
00125          timeSolveCpu  = timer.getCpuTime();
00126          timeSolveReal = timer.getRealTime();
00127          
00128          //---
00129          //--- sanity check
00130          //---
00131          //cout << setiosflags(std::ios::fixedl std::ios::showpoint);
00132          std::cout << "Status= " << status 
00133               << " BestLB= " << std::setw(10) 
00134               << UtilDblToStr(alpsModel.getGlobalLB(),5)
00135               << " BestUB= " << std::setw(10)
00136               << UtilDblToStr(alpsModel.getGlobalUB(),5)        
00137               << " Nodes= " << std::setw(6) 
00138               << alpsModel.getNumNodesProcessed()
00139               << " SetupCPU= "  << timeSetupCpu
00140               << " SolveCPU= "  << timeSolveCpu 
00141               << " TotalCPU= "  << timeSetupCpu + timeSolveCpu
00142               << " SetupReal= " << timeSetupReal
00143               << " SetupReal= " << timeSolveReal
00144               << " TotalReal= " << timeSetupReal + timeSetupReal
00145               << std::endl;  
00146          
00147          
00148          const DecompSolution * solution = alpsModel.getBestSolution();
00149          std::cout << "Optimal Solution" << std::endl;
00150          solution->print();
00151          //print final solution
00152          algo->getMasterOSI()->writeLp("finalRestrictedMaster", "lp", 1e-30, 5, 10);
00153       
00154       }  
00155       //---
00156       //--- free local memory
00157       //---
00158       delete algo;
00159 
00160    }
00161         catch(const ErrorClass& eclass){
00162                 std::cout << "Something went wrong:" << std::endl;
00163                 std::cout << eclass.errormsg << std::endl;
00164                 
00165       return 1;
00166    }
00167    return 0;
00168 }
00169 

Generated on Thu Nov 10 03:05:46 2011 by  doxygen 1.4.7