/*
* MinpackOptimizer.java
*
* Created on May 27, 2002, 4:26 PM
*/
package hep.aida.ref.optimizer.minpack;
import hep.aida.ref.optimizer.OptimizerResult;
/**
*
* Implementation of IOptimizerConfiguration for the Minpack optimizer
*
* @author Tony Johnson, Victor Serbo, Max Turri
*
*/
public class MinpackOptimizer extends hep.aida.ref.optimizer.AbstractOptimizer {
/**
* Creates a new instance of MinpackOptimizer
*/
public MinpackOptimizer() {
result = new OptimizerResult();
configuration = new MinpackOptimizerConfiguration();
domainConstraint = null;
}
public void optimize() {
/*
int nFunctions = functions.size();
if ( nFunctions == 0 ) {
System.out.println("Cannot optimize!! The function was not set correctely!");
return false;
}
double tolerance = configuration.tolerance();
ArrayList variables = new ArrayList();
for ( int i = 0; i<nFunctions; i++ ) {
IVariable[] vars = ( (IFunction)functions.get(i) ).variables();
for ( int j = 0; j<vars.length; j++ ) {
IVariable var = vars[j];
if ( ! var.isFixed() )
if ( ! variables.contains( var ) )
variables.add( (IVariable)var );
}
}
int nVariables = variables.size();
double[] xVal = new double[ nVariables+1 ];
for ( int i = 0; i<nVariables; i++ )
xVal[i+1] = ( (IVariable) variables.get(i) ).value();
IVariable[] v = new IVariable[nVariables];
for ( int i = 0; i<nVariables; i++ )
v[i] = (IVariable) variables.get(i);
IFunction[] f = new IFunction[nFunctions];
for ( int i = 0; i<nFunctions; i++ )
f[i] = (IFunction) functions.get(i);
MinpackLmdifFunc lmdifFunc = new MinpackLmdifFunc( f, v );
double[] fVal = new double[ nFunctions+1 ];
lmdifFunc.fcn( nFunctions, nVariables, xVal, fVal, null );
int info[] = new int[2];
Minpack_f77.lmdif1_f77(lmdifFunc,nFunctions,nVariables,xVal,fVal,tolerance,info);
System.out.println("\n Info: "+info[0]+" "+info[1]);
for ( int i = 0; i<nVariables; i++ )
System.out.println("Var "+i+" "+xVal[i+1]);
*/
}
/*
private class MinpackLmdifFunc implements Lmdif_fcn {
protected IFunction[] functions;
protected IVariable[] vars;
MinpackLmdifFunc( IFunction[] functions, IVariable[] vars ) {
this.functions = functions;
this.vars = vars;
}
public void fcn(int m, int n, double x[], double fvec[], int iflag[]) {
if ( n != vars.length ) throw new RuntimeException("Wrong number of variables in MinpackLmdifFunc!!");
if ( m != functions.length ) throw new RuntimeException("Wrong number of functions in MinpackLmdifFunc!!");
for ( int i = 0; i<n; i++ )
vars[i].setValue( x[i+1] );
for ( int i = 0; i<m; i++ )
fvec[i+1] = ((AbstractModelFunction)functions[i]).value();
}
}
*/
}