openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

87 lines
2.4 KiB

// Copyright (C) 2004, 2009 International Business Machines and others.
// All Rights Reserved.
// This code is published under the Eclipse Public License.
//
// $Id: IpConvCheck.hpp 1861 2010-12-21 21:34:47Z andreasw $
//
// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
#ifndef __IPCONVCHECK_HPP__
#define __IPCONVCHECK_HPP__
#include "IpAlgStrategy.hpp"
namespace Ipopt
{
/** Base class for checking the algorithm
* termination criteria.
*/
class ConvergenceCheck : public AlgorithmStrategyObject
{
public:
/**@name Constructors/Destructors */
//@{
/** Constructor */
ConvergenceCheck()
{}
/** Default destructor */
virtual ~ConvergenceCheck()
{}
//@}
/** Convergence return enum */
enum ConvergenceStatus {
CONTINUE,
CONVERGED,
CONVERGED_TO_ACCEPTABLE_POINT,
MAXITER_EXCEEDED,
CPUTIME_EXCEEDED,
DIVERGING,
USER_STOP,
FAILED
};
/** overloaded from AlgorithmStrategyObject */
virtual bool InitializeImpl(const OptionsList& options,
const std::string& prefix) = 0;
/** Pure virtual method for performing the convergence test. If
* call_intermediate_callback is true, the user callback method
* in the NLP should be called in order to see if the user
* requests an early termination. */
virtual ConvergenceStatus
CheckConvergence(bool call_intermediate_callback = true) = 0;
/** Method for testing if the current iterate is considered to
* satisfy the "accptable level" of accuracy. The idea is that
* if the desired convergence tolerance cannot be achieved, the
* algorithm might stop after a number of acceptable points have
* been encountered. */
virtual bool CurrentIsAcceptable()=0;
private:
/**@name Default Compiler Generated Methods
* (Hidden to avoid implicit creation/calling).
* These methods are not implemented and
* we do not want the compiler to implement
* them for us, so we declare them private
* and do not define them. This ensures that
* they will not be implicitly created/called. */
//@{
/** Default Constructor */
// ConvergenceCheck();
/** Copy Constructor */
ConvergenceCheck(const ConvergenceCheck&);
/** Overloaded Equals Operator */
void operator=(const ConvergenceCheck&);
//@}
};
} // namespace Ipopt
#endif