/usr/include/shogun/multiclass/GMNPLib.h is in libshogun-dev 3.2.0-7.3build4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | /*-----------------------------------------------------------------------
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Library of solvers for Generalized Nearest Point Problem (GNPP).
*
* Written (W) 1999-2008 Vojtech Franc, xfrancv@cmp.felk.cvut.cz
* Copyright (C) 1999-2008 Center for Machine Perception, CTU FEL Prague
*
-------------------------------------------------------------------- */
#ifndef GMNPLIB_H__
#define GMNPLIB_H__
#include <math.h>
#include <limits.h>
#include <shogun/base/SGObject.h>
#include <shogun/io/SGIO.h>
#include <shogun/lib/common.h>
#include <shogun/kernel/Kernel.h>
namespace shogun
{
/** @brief class GMNPLib
* Library of solvers for Generalized Minimal Norm Problem (GMNP).
*
* Generalized Minimal Norm Problem to solve is
*
* min 0.5*alpha'*H*alpha + c'*alpha
*
* subject to sum(alpha) = 1, alpha(i) >= 0
*
* H [dim x dim] is symmetric positive definite matrix.
* c [dim x 1] is an arbitrary vector.
*
* The precision of the found solution is given by
* the parameters tmax, tolabs and tolrel which
* define the stopping conditions:
*
* UB-LB <= tolabs -> exit_flag = 1 Abs. tolerance.
* UB-LB <= UB*tolrel -> exit_flag = 2 Relative tolerance.
* LB > th -> exit_flag = 3 Threshold on lower bound.
* t >= tmax -> exit_flag = 0 Number of iterations.
*
* UB ... Upper bound on the optimal solution.
* LB ... Lower bound on the optimal solution.
* t ... Number of iterations.
* History ... Value of LB and UB wrt. number of iterations.
*
*
* The following algorithms are implemented:
* ..............................................
*
* - GMNP solver based on improved MDM algorithm 1 (u fixed v optimized)
* exitflag = gmnp_imdm( &get_col, diag_H, vector_c, dim,
* tmax, tolabs, tolrel, th, &alpha, &t, &History, verb );
*
* For more info refer to V.Franc: Optimization Algorithms for Kernel
* Methods. Research report. CTU-CMP-2005-22. CTU FEL Prague. 2005.
* ftp://cmp.felk.cvut.cz/pub/cmp/articles/franc/Franc-PhD.pdf .
*/
class CGMNPLib: public CSGObject
{
public:
/** default constructor */
CGMNPLib();
/** constructor
*
* @param vector_y vector y
* @param kernel kernel
* @param num_data number of data
* @param num_virtual_data number of virtual data
* @param num_classes number of classes
* @param reg_const reg const
*/
CGMNPLib(
float64_t* vector_y, CKernel* kernel, int32_t num_data,
int32_t num_virtual_data, int32_t num_classes, float64_t reg_const);
virtual ~CGMNPLib();
/** --------------------------------------------------------------
GMNP solver based on improved MDM algorithm 1.
Search strategy: u determined by common rule and v is
optimized.
Usage: exitflag = gmnp_imdm( &get_col, diag_H, vector_c, dim,
tmax, tolabs, tolrel, th, &alpha, &t, &History );
-------------------------------------------------------------- */
int8_t gmnp_imdm(float64_t *vector_c,
int32_t dim,
int32_t tmax,
float64_t tolabs,
float64_t tolrel,
float64_t th,
float64_t *alpha,
int32_t *ptr_t,
float64_t **ptr_History,
int32_t verb);
/** get indices2
*
* @param index index
* @param c c
* @param i i
*/
void get_indices2( int32_t *index, int32_t *c, int32_t i );
protected:
/** get kernel col
*
* @param a a
* @return col at a
*/
float64_t *get_kernel_col( int32_t a );
/** get col
*
* @param a a
* @param b b
* @return col at a, b
*/
float64_t* get_col( int32_t a, int32_t b );
/** kernel fce
*
* @param a a
* @param b b
* @return something floaty
*/
float64_t kernel_fce( int32_t a, int32_t b );
/** @return object name */
virtual const char* get_name() const { return "GMNPLib"; }
protected:
/** diag H */
float64_t* diag_H;
/** kernel columns */
float64_t** kernel_columns;
/** cache index */
float64_t* cache_index;
/** first kernel inx */
int32_t first_kernel_inx;
/** cache size */
int64_t Cache_Size;
/** num data */
int32_t m_num_data;
/** reg const */
float64_t m_reg_const;
/** vectory */
float64_t* m_vector_y;
/** kernel */
CKernel* m_kernel;
/** index of first used column */
int32_t first_virt_inx;
/** cache for three columns */
float64_t *virt_columns[3];
/** number of virt data */
int32_t m_num_virt_data;
/** number of classes */
int32_t m_num_classes;
};
}
#endif //GMNPLIB_H__
|