__declspec(property(get = GetGradProcedure, put = SetGradProcedure)) TGrad GradProcedure;
Defines the gradient vector calculation routine.
Remarks:
Defines the gradient vector calculation routine. Set TMtxOptimization::GradProcedure to nil if you want to use internal numeric gradient vector calculation.
Examples
#include "MtxVec.h"
#include "MtxVecTools.h"
#include "Optimization.h"
#include "Units.Math387.h"
using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units;
// Objective function
static double Banana(TVec* pars, TVec* consts, const DewArray<tObject*>& obj)
{
return 100.0*Math387::IntPower((*pars)[1] - Math387::IntPower((*pars)[0], 2), 2)
+ Math387::IntPower(1.0 - (*pars)[0], 2);
}
// Analytical gradient of the objective function
static void GradBanana(TRealFunction Fun, TVec* pars, TVec* consts, const DewArray<tObject*>& obj, TVec* grad)
{
grad->Values(0) = -400*((*pars)[1] - Math387::IntPower((*pars)[0], 2))*(*pars)[0] - 2*(1 - (*pars)[0]);
grad->Values(1) = 200*((*pars)[1] - Math387::IntPower((*pars)[0], 2));
}
void Example()
{
TMtxOptimization* opt = new TMtxOptimization(nullptr);
opt->VariableParameters->SetIt(DewArray<double>{2, -1});
opt->RealFunction = Banana;
opt->OptimizationMethod = TOptMethod::optBFGS;
// use exact gradient vector calculation
// NOTE : set opt.GradProcedure to null if you
// want to use internal numeric gradient calculation
opt->GradProcedure = GradBanana;
opt->Recalculate();
delete opt;
}
#include "MtxVec.h"
#include "MtxVecTools.h"
#include "Optimization.h"
#include "Units.Math387.h"
using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units;
// Objective function
static double Banana(TVec* pars, TVec* consts, const DewArray<tObject*>& obj)
{
return 100.0*Math387::IntPower((*pars)[1] - Math387::IntPower((*pars)[0], 2), 2)
+ Math387::IntPower(1.0 - (*pars)[0], 2);
}
// Analytical gradient of the objective function
static void GradBanana(TRealFunction Fun, TVec* pars, TVec* consts, const DewArray<tObject*>& obj, TVec* grad)
{
grad->Values(0) = -400*((*pars)[1] - Math387::IntPower((*pars)[0], 2))*(*pars)[0] - 2*(1 - (*pars)[0]);
grad->Values(1) = 200*((*pars)[1] - Math387::IntPower((*pars)[0], 2));
}
void Example()
{
TMtxOptimization* opt = new TMtxOptimization(nullptr);
opt->VariableParameters->SetIt(DewArray<double>{2, -1});
opt->RealFunction = Banana;
opt->OptimizationMethod = TOptMethod::optBFGS;
// use exact gradient vector calculation
// NOTE : set opt.GradProcedure to null if you
// want to use internal numeric gradient calculation
opt->GradProcedure = GradBanana;
opt->Recalculate();
delete opt;
}
Declared in Dew::Math::TMtxOptimization · Dew.Math/MtxVecTools.h · Cross-compiler