ALPS MPS Codes
Reference documentation.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
optimizer_base< Matrix, SymmGroup, Storage > Class Template Referenceabstract

#include <optimize.h>

Inheritance diagram for optimizer_base< Matrix, SymmGroup, Storage >:
ss_optimize< Matrix, SymmGroup, Storage > ts_optimize< Matrix, SymmGroup, Storage >

Public Member Functions

 optimizer_base (MPS< Matrix, SymmGroup > &mps_, MPO< Matrix, SymmGroup > const &mpo_, BaseParameters &parms_, boost::function< bool()> stop_callback_, int site=0)
 
virtual ~optimizer_base ()
 
virtual void sweep (int sweep, OptimizeDirection d=Both)=0
 
results_collector const & iteration_results () const
 

Protected Member Functions

void boundary_left_step (MPO< Matrix, SymmGroup > const &mpo, int site)
 
void boundary_right_step (MPO< Matrix, SymmGroup > const &mpo, int site)
 
void init_left_right (MPO< Matrix, SymmGroup > const &mpo, int site)
 
double get_cutoff (int sweep) const
 
std::size_t get_Mmax (int sweep) const
 

Protected Attributes

results_collector iteration_results_
 
MPS< Matrix, SymmGroup > & mps
 
MPO< Matrix, SymmGroup > const & mpo
 
BaseParametersparms
 
boost::function< bool()> stop_callback
 
std::vector< Boundary
< typename
storage::constrained< Matrix >
::type, SymmGroup > > 
left_
 
std::vector< Boundary
< typename
storage::constrained< Matrix >
::type, SymmGroup > > 
right_
 
unsigned int northo
 
std::vector< std::vector
< block_matrix< typename
storage::constrained< Matrix >
::type, SymmGroup > > > 
ortho_left_
 
std::vector< std::vector
< block_matrix< typename
storage::constrained< Matrix >
::type, SymmGroup > > > 
ortho_right_
 
std::vector< MPS< Matrix,
SymmGroup > > 
ortho_mps
 

Detailed Description

template<class Matrix, class SymmGroup, class Storage>
class optimizer_base< Matrix, SymmGroup, Storage >

Definition at line 87 of file optimize.h.

Constructor & Destructor Documentation

template<class Matrix , class SymmGroup , class Storage >
optimizer_base< Matrix, SymmGroup, Storage >::optimizer_base ( MPS< Matrix, SymmGroup > &  mps_,
MPO< Matrix, SymmGroup > const &  mpo_,
BaseParameters parms_,
boost::function< bool()>  stop_callback_,
int  site = 0 
)
inline

Definition at line 90 of file optimize.h.

95  : mps(mps_)
96  , mpo(mpo_)
97  , parms(parms_)
98  , stop_callback(stop_callback_)
99  {
100  std::size_t L = mps.length();
101 
102  mps.canonize(site);
103  for(int i = 0; i < mps.length(); ++i)
104  Storage::evict(mps[i]);
105 
106  northo = parms_["n_ortho_states"];
107  maquis::cout << "Expecting " << northo << " states to orthogonalize to." << std::endl;
108 
109  //if (northo > 0 && parms_["ortho_states"]=="")
110  if (northo > 0 && !parms_.is_set("ortho_states"))
111  throw std::runtime_error("Parameter \"ortho_states\" is not set\n");
112 
113  ortho_mps.resize(northo);
114  std::string files_ = parms_["ortho_states"].str();
115  std::vector<std::string> files;
116  boost::split(files, files_, boost::is_any_of(", "));
117  for (int n = 0; n < northo; ++n) {
118  maquis::cout << "Loading ortho state " << n << " from " << files[n] << std::endl;
119  load(files[n], ortho_mps[n]);
120  maquis::cout << "Right end: " << ortho_mps[n][mps.length()-1].col_dim() << std::endl;
121  }
122 
123  init_left_right(mpo, site);
124  maquis::cout << "Done init_left_right" << std::endl;
125  }
void load(alps::hdf5::archive &ar, std::string const &path, TrivialGroup::charge &value, std::vector< std::size_t > chunk=std::vector< std::size_t >(), std::vector< std::size_t > offset=std::vector< std::size_t >())
Definition: none.h:81
BaseParameters & parms
Definition: optimize.h:232
bool is_set(std::string const &key) const
void init_left_right(MPO< Matrix, SymmGroup > const &mpo, int site)
Definition: optimize.h:153
boost::function< bool()> stop_callback
Definition: optimize.h:233
MPO< Matrix, SymmGroup > const & mpo
Definition: optimize.h:230
MPS< Matrix, SymmGroup > & mps
Definition: optimize.h:229
unsigned int northo
Definition: optimize.h:238
std::vector< MPS< Matrix, SymmGroup > > ortho_mps
Definition: optimize.h:240
template<class Matrix , class SymmGroup , class Storage >
virtual optimizer_base< Matrix, SymmGroup, Storage >::~optimizer_base ( )
inlinevirtual

Definition at line 127 of file optimize.h.

127 {}

Member Function Documentation

template<class Matrix , class SymmGroup , class Storage >
void optimizer_base< Matrix, SymmGroup, Storage >::boundary_left_step ( MPO< Matrix, SymmGroup > const &  mpo,
int  site 
)
inlineprotected

Definition at line 135 of file optimize.h.

136  {
137  left_[site+1] = contraction::overlap_mpo_left_step(mps[site], mps[site], left_[site], mpo[site]);
138  Storage::pin(left_[site+1]);
139 
140  for (int n = 0; n < northo; ++n)
141  ortho_left_[n][site+1] = contraction::overlap_left_step(mps[site], ortho_mps[n][site], ortho_left_[n][site]);
142  }
std::vector< Boundary< typename storage::constrained< Matrix >::type, SymmGroup > > left_
Definition: optimize.h:235
std::vector< std::vector< block_matrix< typename storage::constrained< Matrix >::type, SymmGroup > > > ortho_left_
Definition: optimize.h:239
static block_matrix< OtherMatrix, SymmGroup > overlap_left_step(MPSTensor< Matrix, SymmGroup > const &bra_tensor, MPSTensor< Matrix, SymmGroup > const &ket_tensor, block_matrix< OtherMatrix, SymmGroup > const &left, block_matrix< OtherMatrix, SymmGroup > *localop=NULL)
Definition: contractions.h:41
MPS< Matrix, SymmGroup > & mps
Definition: optimize.h:229
static Boundary< OtherMatrix, SymmGroup > overlap_mpo_left_step(MPSTensor< Matrix, SymmGroup > const &bra_tensor, MPSTensor< Matrix, SymmGroup > const &ket_tensor, Boundary< OtherMatrix, SymmGroup > const &left, MPOTensor< Matrix, SymmGroup > const &mpo)
Definition: contractions.h:340
unsigned int northo
Definition: optimize.h:238
std::vector< MPS< Matrix, SymmGroup > > ortho_mps
Definition: optimize.h:240
template<class Matrix , class SymmGroup , class Storage >
void optimizer_base< Matrix, SymmGroup, Storage >::boundary_right_step ( MPO< Matrix, SymmGroup > const &  mpo,
int  site 
)
inlineprotected

Definition at line 144 of file optimize.h.

145  {
146  right_[site] = contraction::overlap_mpo_right_step(mps[site], mps[site], right_[site+1], mpo[site]);
147  Storage::pin(right_[site]);
148 
149  for (int n = 0; n < northo; ++n)
150  ortho_right_[n][site] = contraction::overlap_right_step(mps[site], ortho_mps[n][site], ortho_right_[n][site+1]);
151  }
static block_matrix< OtherMatrix, SymmGroup > overlap_right_step(MPSTensor< Matrix, SymmGroup > const &bra_tensor, MPSTensor< Matrix, SymmGroup > const &ket_tensor, block_matrix< OtherMatrix, SymmGroup > const &right, block_matrix< OtherMatrix, SymmGroup > *localop=NULL)
Definition: contractions.h:71
static Boundary< OtherMatrix, SymmGroup > overlap_mpo_right_step(MPSTensor< Matrix, SymmGroup > const &bra_tensor, MPSTensor< Matrix, SymmGroup > const &ket_tensor, Boundary< OtherMatrix, SymmGroup > const &right, MPOTensor< Matrix, SymmGroup > const &mpo)
Definition: contractions.h:386
std::vector< std::vector< block_matrix< typename storage::constrained< Matrix >::type, SymmGroup > > > ortho_right_
Definition: optimize.h:239
MPS< Matrix, SymmGroup > & mps
Definition: optimize.h:229
unsigned int northo
Definition: optimize.h:238
std::vector< Boundary< typename storage::constrained< Matrix >::type, SymmGroup > > right_
Definition: optimize.h:235
std::vector< MPS< Matrix, SymmGroup > > ortho_mps
Definition: optimize.h:240
template<class Matrix , class SymmGroup , class Storage >
double optimizer_base< Matrix, SymmGroup, Storage >::get_cutoff ( int  sweep) const
inlineprotected

Definition at line 202 of file optimize.h.

203  {
204  double cutoff;
205  if (sweep >= parms.template get<int>("ngrowsweeps"))
206  cutoff = parms.template get<double>("truncation_final");
207  else
208  cutoff = log_interpolate(parms.template get<double>("truncation_initial"), parms.template get<double>("truncation_final"), parms.template get<int>("ngrowsweeps"), sweep);
209  return cutoff;
210  }
BaseParameters & parms
Definition: optimize.h:232
virtual void sweep(int sweep, OptimizeDirection d=Both)=0
double log_interpolate(double y0, double y1, int N, int i)
Definition: optimize.h:74
template<class Matrix , class SymmGroup , class Storage >
std::size_t optimizer_base< Matrix, SymmGroup, Storage >::get_Mmax ( int  sweep) const
inlineprotected

Definition at line 212 of file optimize.h.

213  {
214  std::size_t Mmax;
215  if (parms.is_set("sweep_bond_dimensions")) {
216  std::vector<std::size_t> ssizes = parms.template get<std::vector<std::size_t> >("sweep_bond_dimensions");
217  if (sweep >= ssizes.size())
218  Mmax = *ssizes.rbegin();
219  else
220  Mmax = ssizes[sweep];
221  } else
222  Mmax = parms.template get<std::size_t>("max_bond_dimension");
223  return Mmax;
224  }
BaseParameters & parms
Definition: optimize.h:232
bool is_set(std::string const &key) const
virtual void sweep(int sweep, OptimizeDirection d=Both)=0
template<class Matrix , class SymmGroup , class Storage >
void optimizer_base< Matrix, SymmGroup, Storage >::init_left_right ( MPO< Matrix, SymmGroup > const &  mpo,
int  site 
)
inlineprotected

Definition at line 153 of file optimize.h.

154  {
156  std::size_t L = mps.length();
157 
158  left_.resize(mpo.length()+1);
159  right_.resize(mpo.length()+1);
160 
161  ortho_left_.resize(northo);
162  ortho_right_.resize(northo);
163  for (int n = 0; n < northo; ++n) {
164  ortho_left_[n].resize(L+1);
165  ortho_right_[n].resize(L+1);
166 
167  ortho_left_[n][0] = mps.left_boundary()[0];
168  ortho_right_[n][L] = mps.right_boundary()[0];
169  }
170 
171  //Timer tlb("Init left boundaries"); tlb.begin();
172  Storage::drop(left_[0]);
173  left_[0] = mps.left_boundary();
174  Storage::pin(left_[0]);
175 
176  for (int i = 0; i < site; ++i) {
177  Storage::drop(left_[i+1]);
178  boundary_left_step(mpo, i);
179  Storage::evict(left_[i]);
180  }
181  Storage::evict(left_[site]);
182  //tlb.end();
183 
184  maquis::cout << "Boundaries are partially initialized...\n";
185 
186  //Timer trb("Init right boundaries"); trb.begin();
187  Storage::drop(right_[L]);
188  right_[L] = mps.right_boundary();
189  Storage::pin(right_[L]);
190 
191  for (int i = L-1; i >= site; --i) {
192  Storage::drop(right_[i]);
193  boundary_right_step(mpo, i);
194  Storage::evict(right_[i+1]);
195  }
196  Storage::evict(right_[site]);
197  //trb.end();
198 
199  maquis::cout << "Boundaries are fully initialized...\n";
200  }
std::vector< std::vector< int > > construct_placements(const MPO< Matrix, SymmGroup > &mpo)
Definition: placement.h:101
std::vector< Boundary< typename storage::constrained< Matrix >::type, SymmGroup > > left_
Definition: optimize.h:235
std::vector< std::vector< block_matrix< typename storage::constrained< Matrix >::type, SymmGroup > > > ortho_left_
Definition: optimize.h:239
std::vector< std::vector< block_matrix< typename storage::constrained< Matrix >::type, SymmGroup > > > ortho_right_
Definition: optimize.h:239
MPS< Matrix, SymmGroup > & mps
Definition: optimize.h:229
unsigned int northo
Definition: optimize.h:238
std::vector< Boundary< typename storage::constrained< Matrix >::type, SymmGroup > > right_
Definition: optimize.h:235
void boundary_right_step(MPO< Matrix, SymmGroup > const &mpo, int site)
Definition: optimize.h:144
void boundary_left_step(MPO< Matrix, SymmGroup > const &mpo, int site)
Definition: optimize.h:135
template<class Matrix , class SymmGroup , class Storage >
results_collector const& optimizer_base< Matrix, SymmGroup, Storage >::iteration_results ( ) const
inline

Definition at line 131 of file optimize.h.

131 { return iteration_results_; }
results_collector iteration_results_
Definition: optimize.h:227
template<class Matrix , class SymmGroup , class Storage >
virtual void optimizer_base< Matrix, SymmGroup, Storage >::sweep ( int  sweep,
OptimizeDirection  d = Both 
)
pure virtual

Member Data Documentation

template<class Matrix , class SymmGroup , class Storage >
results_collector optimizer_base< Matrix, SymmGroup, Storage >::iteration_results_
protected

Definition at line 227 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
std::vector<Boundary<typename storage::constrained<Matrix>::type, SymmGroup> > optimizer_base< Matrix, SymmGroup, Storage >::left_
protected

Definition at line 235 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
MPO<Matrix, SymmGroup> const& optimizer_base< Matrix, SymmGroup, Storage >::mpo
protected

Definition at line 230 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
MPS<Matrix, SymmGroup>& optimizer_base< Matrix, SymmGroup, Storage >::mps
protected

Definition at line 229 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
unsigned int optimizer_base< Matrix, SymmGroup, Storage >::northo
protected

Definition at line 238 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
std::vector< std::vector<block_matrix<typename storage::constrained<Matrix>::type, SymmGroup> > > optimizer_base< Matrix, SymmGroup, Storage >::ortho_left_
protected

Definition at line 239 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
std::vector<MPS<Matrix, SymmGroup> > optimizer_base< Matrix, SymmGroup, Storage >::ortho_mps
protected

Definition at line 240 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
std::vector< std::vector<block_matrix<typename storage::constrained<Matrix>::type, SymmGroup> > > optimizer_base< Matrix, SymmGroup, Storage >::ortho_right_
protected

Definition at line 239 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
BaseParameters& optimizer_base< Matrix, SymmGroup, Storage >::parms
protected

Definition at line 232 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
std::vector<Boundary<typename storage::constrained<Matrix>::type, SymmGroup> > optimizer_base< Matrix, SymmGroup, Storage >::right_
protected

Definition at line 235 of file optimize.h.

template<class Matrix , class SymmGroup , class Storage >
boost::function<bool ()> optimizer_base< Matrix, SymmGroup, Storage >::stop_callback
protected

Definition at line 233 of file optimize.h.


The documentation for this class was generated from the following file: