File ECQPP.h

Copyright

This code is licensed under the 3-clause BSD license.

Copyright ETH Zurich, Laboratory for Physical Chemistry, Reiher Group.

See LICENSE.txt for details.

namespace Scine

This header file contains functions that allow for common notation for common things that can be done at a different degree of derivatives.

This header contains alias definitions defining which classes to use for the different degrees of derivatives.

namespace Utils
class ECQPP
#include <ECQPP.h>

Equality Constrained Quadratic Programming Problem solver for EDIIS. This class solves the optimization problem for an EDIIS iteration. It minimizes the expression E*c - 0.5 c^T*B*c with the constraint that sum(c_i) = 1. To do so, it solves the above equation for all subsets of c, rejects inadmissible solutions (c_i < 0) and keeps the best one.

Public Functions

ECQPP(const Eigen::MatrixXd &B, const Eigen::VectorXd &E)
Eigen::VectorXd calculateOptimalCoefficients()

Private Functions

void solveAllConstrainedProblems()
void solveAllConstrainedProblemsForNumberZeros(unsigned int numberZeros)
void generatePreviousIndexesVector(const std::vector<bool> &consideredIndexes, unsigned numberZeros)
void generateReducedObjects()
void solveConstrainedProblem()
bool solutionIsValid() const
void addSolution()
void generateSolutionFromReducedSolution()
void setBestSolutionIfHasLowerEnergy()

Private Members

const Eigen::MatrixXd &B_
const Eigen::VectorXd &E_
const unsigned dimension_
std::vector<unsigned> previousIndexes_
Eigen::MatrixXd reducedB_
Eigen::VectorXd reducedE_
Eigen::VectorXd reducedSolution_
Eigen::VectorXd fullSolution_
Eigen::VectorXd solution_
double bestSolutionEnergy_