Math::Macopt - A wrapper for macopt++, which is a conjugate gradient library.
Math::Macopt
The package can be installed by the standard PERL module installation procedure:
perl Makefile.PL make make test make install
Please noted that the original "macopt++" C++ source code is included in this PERL package. The static linking avoids the possible conflict to any pre-installed version of "macopt++".
use strict; use Math::Macopt; &main(); sub main { # Some settings my $N = 10; my $epsilon = 0.001; # Initialize the Macopt my $macopt = new Math::Macopt::Base($N, 0); # Setup the function and its gradient my $func = sub { my $x = shift; my $size = $macopt->size(); my $sum = 0; foreach my $i (0..$size-1) { $sum += ($x->[$i]-$i)**2; } return $sum; }; my $dfunc = sub { my $x = shift; my $size = $macopt->size(); my $g = (); foreach my $i (0..$size-1) { $g->[$i] = 2*($x->[$i]-$i); } return $g; }; $macopt->setFunc(\&$func); $macopt->setDfunc(\&$dfunc); # Optimizer using macopt my $x = [(1)x($N)]; $macopt->maccheckgrad($x, $N, $epsilon, 0) ; $macopt->macoptII($x, $N); # Display the result printf "[%s]\n", join(',', @$x); }
The Math::Macopt provides a PERL interface for the macopt++ conjugate gradient library, which is developed by David Mackay in C++. http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html
The API is generated by SWIG (http://www.swig.org) to interact the native C codes of macopt++.
Math::Macopt +- Math::Macopt::Base
nil.
new
Same as the original C++ source code.
Arguments:
0: (Integer) n -- The dimension of the vector.
1: (Boolean) verbose -- Whether the verbose messages are displayed.
2: (Double) tolerance -- Optimization convergence.
3: (Boolean) rich -- Whether to do extra gradient evaluation.
Returns:
The blessed object.
Please refer to the original macopt code for details.
size
(Integer) The number of dimensions.
macoptII
Optimize (minimize) the vector based on the function and its gradient.
0: (ARRAY) x -- Starting vector.
1: (Integer) N -- The number of dimensions.
Please notice that the optimal results will be put in the input vector "x" after called.
maccheckgrad
Examines objective function and d_objective function to see if they agree for a step of size epsilon.
2: (Double) eplison -- Step size.
3 (Boolean) stopat -- Stop at this component. If 0, do the lot.
setFunc
setDfunc
Set the function and its gradient function as PERL callbacks.
0: (SV*) callback -- The PERL callback.
Support on MS Windows (e.g., SFU or native)
Support on Java language (e.g., use SWIG for Java)
No bug found yet.
Tom Chau <tom@cpan.org>
Cluster Technology Limited http://www.clustertech.com
To install Math::Macopt, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Math::Macopt
CPAN shell
perl -MCPAN -e shell install Math::Macopt
For more information on module installation, please visit the detailed CPAN module installation guide.