/home/coin/SVN-release/OS-2.4.1/Bcp/src/Member/BCP_warmstart_dual.cpp

Go to the documentation of this file.
00001 // Copyright (C) 2000, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #include "CoinWarmStartDual.hpp"
00004 #include "BCP_warmstart_dual.hpp"
00005 
00006 //#############################################################################
00007 
00008 CoinWarmStart*
00009 BCP_warmstart_dual::convert_to_CoinWarmStart() const
00010 {
00011   if (storage() != BCP_Storage_Explicit)
00012     return NULL;
00013 
00014   const BCP_vec<double>& dual = _dual.explicit_vector();
00015   return new CoinWarmStartDual(dual.size(), dual.begin());
00016 }
00017 
00018 //#############################################################################
00019 
00020 void
00021 BCP_warmstart_dual::update(const BCP_warmstart* const change)
00022 {
00023   const BCP_warmstart_dual* const dch =
00024     dynamic_cast<const BCP_warmstart_dual* const>(change);
00025   if (!dch)
00026     throw BCP_fatal_error("BCP_warmstart_dual::update\n  \
00027 Trying to update a BCP_warmstart_dual with a different warmstart!\n");
00028 
00029   _dual.update(dch->_dual);
00030 }
00031 
00032 
00033 //#############################################################################
00034 
00035 BCP_warmstart* 
00036 BCP_warmstart_dual::as_change(const BCP_warmstart* const old_ws,
00037                               const BCP_vec<int>& del_vars,
00038                               const BCP_vec<int>& del_cuts,
00039                               const double petol,
00040                               const double detol) const
00041 {
00042   const BCP_warmstart_dual* const ows =
00043     dynamic_cast<const BCP_warmstart_dual* const>(old_ws);
00044   if (!ows)
00045       throw BCP_fatal_error("\
00046 Trying to describe a BCP_warmstart_dual as a change to a different ws!\n");
00047 
00048   if (storage() != BCP_Storage_Explicit)
00049     throw BCP_fatal_error("\
00050 BCP_warmstart_dual::as_change : current data is not explicit!\n");
00051 
00052   if (ows->storage() == BCP_Storage_WrtParent)
00053     throw BCP_fatal_error("\
00054 BCP_warmstart_dual::as_change : old_ws is WrtParent!\n");
00055 
00056   if (ows->storage() == BCP_Storage_NoData)
00057     return new BCP_warmstart_dual(*this);
00058 
00059   // Both are explicit
00060   BCP_warmstart_dual* ws = new BCP_warmstart_dual();
00061   new (&ws->_dual) BCP_vec_change<double>(ows->_dual, _dual, del_cuts, 1e-4);
00062   if (ws->_dual.storage_size() >= _dual.storage_size())
00063     ws->_dual = _dual;
00064 
00065   return ws;
00066 }

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