NAME

Math::Macopt - provides PERL interface for the macopt C++ codes, which is developed by David Mackay. http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html

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 any conflict if you have installed previous 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 is generated by SWIG (http://www.swig.org) to provide PERL API to the native C macopt codes.

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