iterative-solver 0.0
OptimizeDistrArrayExample.cpp

Example for minimising a function, history vectors on disk, optional MPI

#include "ExampleProblemDistrArray.h"
#include <iostream>
#include <molpro/linalg/array/DistrArrayFile.h>
#include <molpro/linalg/array/DistrArraySpan.h>
#include <molpro/linalg/array/util/Distribution.h>
#include <molpro/linalg/itsolv/SolverFactory.h>
#include <molpro/mpi.h>
int main(int argc, char* argv[]) {
molpro::mpi::init();
{
auto solver = molpro::linalg::itsolv::create_Optimize<Rvector, molpro::linalg::array::DistrArrayFile>("BFGS");
auto problem = ExampleProblem(argc > 1 ? std::stoi(argv[1]) : 20);
solver->set_verbosity(molpro::mpi::rank_global() == 0 ? molpro::linalg::itsolv::Verbosity::Summary
solver->set_max_iter(100);
auto distribution = molpro::linalg::array::util::make_distribution_spread_remainder<Rvector::index_type>(
problem.n, molpro::mpi::size_global());
auto local_range = distribution.range(molpro::mpi::rank_global());
problem.m_vectors.front().assign(problem.n, 0);
problem.m_vectors.front()[0] = 1;
std::vector<Rvector::value_type> action_vector(local_range.second - local_range.first);
molpro::linalg::array::Span<Rvector::value_type>(problem.m_vectors.front().data() + local_range.first,
local_range.second - local_range.first));
molpro::linalg::array::Span<Rvector::value_type>(action_vector.data(), action_vector.size()));
if (not solver->solve(c, g, problem))
std::cout << "failed" << std::endl;
else if (molpro::mpi::rank_global() == 0) {
std::cout << "converged in " << solver->statistics().iterations << " iterations" << std::endl;
}
}
molpro::mpi::finalize();
}
#include <molpro/linalg/itsolv/SolverFactory-implementation.h>
molpro::linalg::array::DistrArrayFile, std::map<size_t, double>>;
Distributed array storing the buffer on disk using temporary local files.
Definition: DistrArrayFile.h:23
Definition: DistrArraySpan.h:8
Non-owning container taking a pointer to the data buffer and its size and exposing routines for itera...
Definition: Span.h:28
Specifies distribution of a contiguous array into non-overlapping chunks.
Definition: Distribution.h:16
Factory for creating instances of specific solver implementations from the corresponding Options obje...
Definition: SolverFactory.h:74
@ Summary
only summary at the start and end of solve