This is NPSOL.h in view mode; [Download] [Up]
/*
Copyright (C) 1996 John W. Eaton
This file is part of Octave.
Octave is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
Octave is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with Octave; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if !defined (octave_NPSOL_h)
#define octave_NPSOL_h 1
#if defined (__GNUG__)
#pragma interface
#endif
#ifndef NPSOL_MISSING
#include <cfloat>
#include <cmath>
#include <string>
#include "dColVector.h"
#include "NLP.h"
class
NPSOL_options
{
public:
NPSOL_options (void) { init (); }
NPSOL_options (const NPSOL_options& opt) { set_options (opt); }
NPSOL_options& operator = (const NPSOL_options& opt)
{
if (this != &opt)
set_options (opt);
return *this;
}
~NPSOL_options (void) { }
void init (void);
void set_default_options (void) { init (); }
void set_options (const NPSOL_options& opt);
// XXX FIXME XXX -- is this a good idea?
// Passing invalid values to the set_* functions will result in
// setting the default option.
void set_central_difference_interval (double val)
{ x_central_difference_interval = (val > 0.0) ? val : -1.0; }
void set_crash_tolerance (double val)
{ x_crash_tolerance = (val >= 0.0) ? val : 0.1; }
void set_difference_interval (double val)
{ x_difference_interval = (val > 0.0) ? val : -1.0; }
void set_function_precision (double val)
{ x_function_precision = (val > 0.0) ? val : ::pow (DBL_EPSILON, 0.9); }
void set_infinite_bound (double val)
{ x_infinite_bound = (val > 0.0) ? val : 1.0e+30; }
void set_infinite_step (double val)
{ x_infinite_step = (val > 0.0) ? val : 1.0e+30; }
void set_linear_feasibility_tolerance (double val)
{
x_linear_feasibility_tolerance
= (val > 0.0) ? val : ::sqrt (DBL_EPSILON);
}
void set_linesearch_tolerance (double val)
{ x_linesearch_tolerance = (val >= 0.0 && val < 1.0) ? val : 0.9; }
void set_nonlinear_feasibility_tolerance (double val)
{
x_nonlinear_feasibility_tolerance
= (val > 0.0) ? val : ::sqrt (DBL_EPSILON);
}
void set_optimality_tolerance (double val)
{ x_optimality_tolerance = (val > 0.0) ? val : ::pow (DBL_EPSILON, 0.8); }
void set_derivative_level (int val)
{ x_derivative_level = (val >= 0 && val < 4) ? val : 0; }
void set_major_iteration_limit (int val)
{ x_major_iteration_limit = (val > 0) ? val : -1; }
void set_minor_iteration_limit (int val)
{ x_minor_iteration_limit = (val > 0) ? val : -1; }
void set_major_print_level (int val)
{ x_major_print_level = (val >= 0) ? val : -1; }
void set_minor_print_level (int val)
{ x_minor_print_level = (val >= 0) ? val : -1; }
void set_start_objective_check (int val)
{ x_start_objective_check = (val >= 0) ? val : -1; }
void set_start_constraint_check (int val)
{ x_start_constraint_check = (val >= 0) ? val : -1; }
void set_stop_objective_check (int val)
{ x_stop_objective_check = (val >= 0) ? val : -1; }
void set_stop_constraint_check (int val)
{ x_stop_constraint_check = (val >= 0) ? val : -1; }
void set_verify_level (int val)
{
x_verify_level
= ((val > -1 && val < 4) || (val > 9 && val < 14)) ? val : 0;
}
double central_difference_interval (void) const
{ return x_central_difference_interval; }
double crash_tolerance (void) const
{ return x_crash_tolerance; }
double difference_interval (void) const
{ return x_difference_interval; }
double function_precision (void) const
{ return x_function_precision; }
double infinite_bound (void) const
{ return x_infinite_bound; }
double infinite_step (void) const
{ return x_infinite_step; }
double linear_feasibility_tolerance (void) const
{ return x_linear_feasibility_tolerance; }
double linesearch_tolerance (void) const
{ return x_linesearch_tolerance; }
double nonlinear_feasibility_tolerance (void) const
{ return x_nonlinear_feasibility_tolerance; }
double optimality_tolerance (void) const
{ return x_optimality_tolerance; }
int derivative_level (void) const
{ return x_derivative_level; }
int major_iteration_limit (void) const
{ return x_major_iteration_limit; }
int minor_iteration_limit (void) const
{ return x_minor_iteration_limit; }
int major_print_level (void) const
{ return x_major_print_level; }
int minor_print_level (void) const
{ return x_minor_print_level; }
int start_objective_check (void) const
{ return x_start_objective_check; }
int start_constraint_check (void) const
{ return x_start_constraint_check; }
int stop_objective_check (void) const
{ return x_stop_objective_check; }
int stop_constraint_check (void) const
{ return x_stop_constraint_check; }
int verify_level (void) const
{ return x_verify_level; }
protected:
void pass_options_to_npsol (void);
void set_option (const string& key, int opt);
void set_option (const string& key, double opt);
void set_option (const char *key, int opt)
{ set_option (string (key), opt); }
void set_option (const char *key, double opt)
{ set_option (string (key), opt); }
private:
double x_central_difference_interval;
double x_crash_tolerance;
double x_difference_interval;
double x_function_precision;
double x_infinite_bound;
double x_infinite_step;
double x_linear_feasibility_tolerance;
double x_linesearch_tolerance;
double x_nonlinear_feasibility_tolerance;
double x_optimality_tolerance;
int x_derivative_level;
int x_major_iteration_limit;
int x_minor_iteration_limit;
int x_major_print_level;
int x_minor_print_level;
int x_start_objective_check;
int x_start_constraint_check;
int x_stop_objective_check;
int x_stop_constraint_check;
int x_verify_level;
};
class
NPSOL : public NLP, public NPSOL_options
{
public:
NPSOL (void)
: NLP (), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi)
: NLP (x, phi), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi, const Bounds& b)
: NLP (x, phi, b), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi, const Bounds& b,
const LinConst& lc)
: NLP (x, phi, b, lc), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi, const Bounds& b,
const LinConst& lc, const NLConst& nlc)
: NLP (x, phi, b, lc, nlc), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi, const LinConst& lc)
: NLP (x, phi, lc), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi, const LinConst& lc,
const NLConst& nlc)
: NLP (x, phi, lc, nlc), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi,
const NLConst& nlc)
: NLP (x, phi, nlc), NPSOL_options () { }
NPSOL (const ColumnVector& x, const Objective& phi, const Bounds& b,
const NLConst& nlc)
: NLP (x, phi, b, nlc), NPSOL_options () { }
NPSOL (const NPSOL& a)
: NLP (a), NPSOL_options () { }
NPSOL& operator = (const NPSOL& a)
{
if (this != &a)
{
NLP::operator = (a);
NPSOL_options::operator = (a);
}
return *this;
}
~NPSOL (void) { }
ColumnVector do_minimize (double& objf, int& inform, ColumnVector& lambda);
private:
int attempt;
};
// XXX FIXME XXX -- would be nice to not have to have this global
// variable.
// Nonzero means an error occurred in the calculation of the objective
// function, and the user wants us to quit.
extern int npsol_objective_error;
#endif
#endif
/*
;;; Local Variables: ***
;;; mode: C++ ***
;;; End: ***
*/
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.