NAME

Math::Macopt - A wrapper for macopt++, which is a conjugate gradient library.

INSTALLATION

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++".

SYNOPSIS

  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);
  }

DESCRIPTION

Overview

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++.

Class Hierarchy

Math::Macopt
+- Math::Macopt::Base

Constants

nil.

Member Variables

nil.

Constructor and initialization

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.

Class and Object methods

size

Arguments:

  • nil.

Returns:

  • (Integer) The number of dimensions.

macoptII

Optimize (minimize) the vector based on the function and its gradient.

Arguments:

  • 0: (ARRAY) x -- Starting vector.

  • 1: (Integer) N -- The number of dimensions.

Returns:

  • nil.

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.

Arguments:

  • 0: (ARRAY) x -- Starting vector.

  • 1: (Integer) N -- The number of dimensions.

  • 2: (Double) eplison -- Step size.

  • 3 (Boolean) stopat -- Stop at this component. If 0, do the lot.

Returns:

  • nil.

setFunc
setDfunc

Set the function and its gradient function as PERL callbacks.

Arguments:

  • 0: (SV*) callback -- The PERL callback.

Returns:

  • nil.

OTHER ISSUES

Future Plans

  • Support on MS Windows (e.g., SFU or native)

  • Support on Java language (e.g., use SWIG for Java)

BUGS

No bug found yet.

RELATED MODULES

nil.

AUTHOR(S)

Tom Chau <tom@cpan.org>

CREDIT(S)

Cluster Technology Limited http://www.clustertech.com