List of useful subroutine in ODICON

Common usage of minimizing subroutine

returns the minimum value of func(x)  
INPUT  dim   : dimention of the function
INPUT  func  : pointer to the function
INPUT  init[]: the initial solution
INPUT  lower[], upper[]: range to search
               lower[i] <= init[i] <= upper[i] for all 0 <= i < dim
OUTPUT init[]: the minimized solution

minimization of M(#)-convex function

/* steepest descent algorithm */
double  mconv_minimize(int dim, double func(int dim, int x[]),
                       int init[], int lower[], int upper[]);
double mgconv_minimize(int dim, double func(int dim, int x[]),
                       int init[], int lower[], int upper[]);

/* greedy algorithm (improved steepest descent method) */
double  mconv_minimize2(int dim, double func(int dim, int x[]), int init[]);
double mgconv_minimize2(int dim, double func(int dim, int x[]), int init[]);

/* greedy algorithm (improved steepest descent method) */
double  mconv_minimize3(int dim, double func(int dim, int x[]),
                        int init[], int lower[], int upper[]);
double mgconv_minimize3(int dim, double func(int dim, int x[]),
                        int init[], int lower[], int upper[]);

/* scaling algorithm (with greedy) */
double  mconv_minimize_scaling(int dim, double func(int dim, int x[]),
                               int init[], int lower[], int upper[]);
double mgconv_minimize_scaling(int dim, double func(int dim, int x[]),
                               int init[], int lower[], int upper[]);

/* continues relaxation algorithm */
double  mconv_minimize_relax(int dim, double func(int dim, double x[]),
                             int init[]);
double mgconv_minimize_relax(int dim, double func(int dim, double x[]),
			     int init[]);

minimization of L(#)-convex function

/* steepest descent algorithm */
double  lconv_minimize(int dim, double func(int dim, int x[]), int init[],
		       const int fix_index);
double lgconv_minimize(int dim, double func(int dim, int x[]), int init[]);

/* steepest descent scaling algorithm */
double  lconv_minimize_scaling(int dim, double func(int dim, int x[]),
                               int init[], const int fix_index);
double lgconv_minimize_scaling(int dim, double func(int dim, int x[]),
                               int init[]);

/* steepest descent algorithm (with IFF) */
double  lconv_minimize_IFF(int dim, double func(int,int*), int init[],
                           const int fix_index);
double lgconv_minimize_IFF(int dim, double func(int,int*), int init[]);

/* steepest descent scaling algorithm (with IFF) */
double  lconv_minimize_scaling_IFF(int dim, double func(int,int*), int init[],
                           const int fix_index);
double lgconv_minimize_scaling_IFF(int dim, double func(int,int*), int init[]);

/* steepest descent algorithm (with FW) */
double  lconv_minimize_FW(int dim, double func(int,int*), int init[],
                           const int fix_index);
double lgconv_minimize_FW(int dim, double func(int,int*), int init[]);

/* steepest descent scaling algorithm (with FW) */
double  lconv_minimize_scaling_FW(int dim, double func(int,int*),int init[],
                           const int fix_index);
double lgconv_minimize_scaling_FW(int dim, double func(int,int*),int init[]);

/* continues relaxation algorithm (with IFF) */
double  lconv_minimize_relax(int dim, double func(int dim, double x[]),
                             int init[], const int fix_index);
double lgconv_minimize_relax(int dim, double func(int dim, double x[]),
			     int init[]);

L# convex function minimization as submodular function

double sf_minimize(int dim, double func(int,int*), int x[], int direction,
                   int set[], const int fix_index);

decide if a function is L#/M# convex (by Hessian on all points)

int is_lgconv_gene(int dim, double func(int,int*), int lower[], int upper[]);
int  is_lconv_gene(int dim, double func(int,int*), int lower[], int upper[]);
int is_mgconv_gene(int dim, double func(int,int*), int lower[], int upper[]);
int  is_mconv_gene(int dim, double func(int,int*), int lower[], int upper[],
                   int sum);