⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpkit.h

📁 linux下的源码分类器SVM
💻 H
📖 第 1 页 / 共 2 页
字号:
/*  Main header file of the LP_SOLVE toolkit.    Original by Jeroen Dirks, 21-2-95  Maintained by Michel Berkelaar*//* let's please C++ users */#ifdef __cplusplusextern "C" {#endif#include <stdlib.h>#include <stdio.h>#include <math.h>#include "hash.h"#ifndef NULL#define NULL 	0#endif#define FALSE   0#define TRUE    1#define DEFNUMINV 50#define INITIAL_MAT_SIZE 10000/* solve status values */#define OPTIMAL     	0#define MILP_FAIL   	1#define INFEASIBLE  	2#define UNBOUNDED   	3#define FAILURE     	4#define RUNNING     	5/* lag_solve extra status values */#define FEAS_FOUND   	6#define NO_FEAS_FOUND 	7#define BREAK_BB	8#define FIRST_NI	0#define RAND_NI		1#define LE      0#define EQ      1#define GE      2#define OF      3#define	my_abs(x)	((x) < 0 ? -(x) : (x))#define my_min(x, y)    ((x) < (y) ? (x) : (y))#define my_max(x, y)    ((x) > (y) ? (x) : (y))#define MAX_WARN_COUNT 20#ifdef CHECK#define my_round(val, eps) { \	REAL absv; \        absv = ((val) < 0 ? -(val) : (val)); \        if(absv < (eps)) \          val = 0; \	if(Warn_count < MAX_WARN_COUNT) \	  { \	    if(absv > 0.5 * (eps) && absv < 2 * (eps)) \	      { \		Warn_count++; \		fprintf(stderr, \			"Warning Value close to epsilon V: %e E: %e\n", \			(double)absv, (double)(eps)); \		if(Warn_count == MAX_WARN_COUNT) \		  { \		    fprintf(stderr, \			    "*** Surpressing further rounding warnings\n"); \		  } \	      } \	  } \}#else#define my_round(val,eps) if (((val) < 0 ? -(val) : (val)) < (eps)) val = 0;#endif#define DEF_INFINITE  1e24 /* limit for dynamic range */#define DEF_EPSB      5.01e-7 /* for rounding RHS values to 0 determine					 infeasibility basis */#define DEF_EPSEL     1e-8 /* for rounding other values (vectors) to 0 */#define DEF_EPSD      1e-6 /* for rounding reduced costs to zero */#define DEF_EPSILON   1e-3 /* to determine if a float value is integer */ #define PREJ          1e-3  /* pivot reject (try others first) */#ifndef REAL /* to allow -DREAL=<float type> while compiling */#define REAL double#endif#define ETA_START_SIZE 10000 /* start size of array Eta. Realloced if needed */#define FNAMLEN 64#define NAMELEN 25#define MAXSTRL (NAMELEN-1)#define STD_ROW_NAME_PREFIX "r_"#define CALLOC(ptr, nr)\  if(!(ptr = calloc((size_t)(nr), sizeof(*ptr))) && nr) {\    fprintf(stderr, "calloc of %d bytes failed on line %d of file %s\n",\            nr * sizeof(*ptr), __LINE__, __FILE__);\    exit(EXIT_FAILURE);\  }#define MALLOC(ptr, nr)\  if(!(ptr = malloc((size_t)((nr) * sizeof(*ptr)))) && nr) {\    fprintf(stderr, "malloc of %d bytes failed on line %d of file %s\n",\            nr * sizeof(*ptr), __LINE__, __FILE__);\    exit(EXIT_FAILURE);\  }#define REALLOC(ptr, nr)\  if(!(ptr = realloc(ptr, (size_t)((nr) * sizeof(*ptr)))) && nr) {\    fprintf(stderr, "realloc of %d bytes failed on line %d of file %s\n",\            nr * sizeof(*ptr), __LINE__, __FILE__);\    exit(EXIT_FAILURE);\  }#define MALLOCCPY(nptr, optr, nr)\  {MALLOC(nptr, nr); memcpy(nptr, optr, (size_t)((nr) * sizeof(*optr)));}#define MEMCPY(nptr, optr, nr)\  memcpy(nptr, optr, (size_t)((nr) * sizeof(*optr)));typedef char nstring[NAMELEN];typedef struct _matrec{  int row_nr;  REAL value;} matrec;typedef struct _column{  int            row;  REAL           value;  struct _column *next ;} column;typedef struct _constraint_name{  char                    name[NAMELEN];  int                     row;  struct _constraint_name *next;} constraint_name;typedef struct _bound{  REAL          upbo;  REAL          lowbo;} bound;typedef struct _tmp_store_struct{  nstring name;  int     row;  REAL    value;  REAL    rhs_value;  short   relat;} tmp_store_struct;typedef struct _rside /* contains relational operator and rhs value */{  REAL          value;  struct _rside *next;  short         relat;} rside;/* fields indicated with ## may be modified directly *//* pointers will have their array size in the comments */typedef struct _lprec{  nstring   lp_name;		/* the name of the lp */  short     verbose;            /* ## Verbose flag */  short     print_duals;        /* ## PrintDuals flag for PrintSolution */  short     print_sol;          /* ## used in lp_solve */  short     debug;              /* ## Print B&B information */  short     print_at_invert;    /* ## Print information at every reinversion */  short     trace;              /* ## Print information on pivot selection */  short     anti_degen;		/* ## Do perturbations */  short     do_presolve;        /* perform matrix presolving */  int	    rows;               /* Nr of constraint rows in the problem */  int       rows_alloc;      	/* The allocated memory for Rows sized data */  int       columns;            /* The number of columns (= variables) */  int       columns_alloc;    int       sum;                /* The size of the variables + the slacks */  int       sum_alloc;  short     names_used;         /* Flag to indicate if names for rows and				   columns are used */  nstring   *row_name;		/* rows_alloc+1 */  nstring   *col_name;		/* columns_alloc+1 */ /* Row[0] of the sparce matrix is the objective function */  int       non_zeros;          /* The number of elements in the sparce matrix*/  int       mat_alloc;		/* The allocated size for matrix sized 				   structures */  matrec    *mat;               /* mat_alloc :The sparse matrix */  int       *col_end;           /* columns_alloc+1 :Cend[i] is the index of the		 		   first element after column i.				   column[i] is stored in elements 				   col_end[i-1] to col_end[i]-1 */  int       *col_no;            /* mat_alloc :From Row 1 on, col_no contains the				   column nr. of the                                   nonzero elements, row by row */  short     row_end_valid;	/* true if row_end & col_no are valid */  int       *row_end;           /* rows_alloc+1 :row_end[i] is the index of the 				   first element in Colno after row i */  REAL      *orig_rh;           /* rows_alloc+1 :The RHS after scaling & sign				  changing, but before `Bound transformation' */  REAL      *rh;		/* rows_alloc+1 :As orig_rh, but after Bound 				   transformation */  REAL      *rhs;		/* rows_alloc+1 :The RHS of the current				   simplex tableau */  short     *must_be_int;       /* sum_alloc+1 :TRUE if variable must be 				   Integer */  REAL      *orig_upbo;         /* sum_alloc+1 :Bound before transformations */  REAL      *orig_lowbo;	/*  "       "                   */  REAL      *upbo;              /*  " " :Upper bound after transformation &				   B&B work */  REAL      *lowbo;             /*  "       "  :Lower bound after transformation				   & B&B work */  short     basis_valid;        /* TRUE is the basis is still valid */  int       *bas;               /* rows_alloc+1 :The basis column list */  short     *basis;             /* sum_alloc+1 : basis[i] is TRUE if the column				   is in the basis */  short     *lower;             /*  "       "  :TRUE is the variable is at its 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -