computation/optimization/NLoptSolver.hxx

00001 // Copyright (C) 2011 INRIA
00002 // Author(s): Marc Fragu
00003 //
00004 // This file is part of the linear-algebra library Seldon,
00005 // http://seldon.sourceforge.net/.
00006 //
00007 // Seldon is free software; you can redistribute it and/or modify it under the
00008 // terms of the GNU Lesser General Public License as published by the Free
00009 // Software Foundation; either version 2.1 of the License, or (at your option)
00010 // any later version.
00011 //
00012 // Seldon is distributed in the hope that it will be useful, but WITHOUT ANY
00013 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00014 // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
00015 // more details.
00016 //
00017 // You should have received a copy of the GNU Lesser General Public License
00018 // along with Seldon. If not, see http://www.gnu.org/licenses/.
00019 
00020 
00021 #ifndef SELDON_COMPUTATION_OPTIMIZATION_NLOPTSOLVER_HXX
00022 #define SELDON_COMPUTATION_OPTIMIZATION_NLOPTSOLVER_HXX
00023 
00024 
00025 #include "NLopt.hxx"
00026 
00027 
00028 namespace Seldon
00029 {
00030 
00031 
00033   // NLOPTSOLVER //
00035 
00036 
00038   class NLoptSolver
00039   {
00040 
00041   protected:
00042 
00043     typedef double (*cost_ptr)(const Vector<double>&,
00044                                Vector<double>&, void*);
00045 
00047     nlopt::SeldonOpt opt_;
00049     nlopt::algorithm algorithm_;
00051     double parameter_tolerance_;
00053     double cost_function_tolerance_;
00056     int Niteration_max_;
00060     Vector<double> parameter_;
00064     Vector<double> gradient_;
00066     double cost_;
00067 
00068   public:
00069     // Constructor and destructor.
00070     NLoptSolver();
00071     ~NLoptSolver();
00072 
00073     void Initialize(int Nparameter, string algorithm,
00074                     double parameter_tolerance = 1.e-6,
00075                     double cost_function_tolerance = 1.e-6,
00076                     int Niteration_max = -1);
00077     void SetLowerBound(const Vector<double>&);
00078     void SetUpperBound(const Vector<double>&);
00079     void SetParameterTolerance(double);
00080     void SetCostFunctionTolerance(double);
00081     void SetNiterationMax(int);
00082     void GetParameterTolerance(double&) const;
00083     void GetCostFunctionTolerance(double&) const;
00084     void GetNiterationMax(int&) const;
00085     void SetParameter(const Vector<double>& parameter);
00086     void GetParameter(Vector<double>& parameter) const;
00087     void Optimize(cost_ptr cost, void* argument);
00088     double GetCost() const;
00089 
00090   };
00091 
00092 
00093 } // namespace Seldon.
00094 
00095 
00096 #endif