16b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua/* 26b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Copyright (C) 2012 The Android Open Source Project 36b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * 46b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Licensed under the Apache License, Version 2.0 (the "License"); 56b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * you may not use this file except in compliance with the License. 66b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * You may obtain a copy of the License at 76b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * 86b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * http://www.apache.org/licenses/LICENSE-2.0 96b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * 106b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * Unless required by applicable law or agreed to in writing, software 116b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * distributed under the License is distributed on an "AS IS" BASIS, 126b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * See the License for the specific language governing permissions and 146b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua * limitations under the License. 156b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua */ 166b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 176b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#ifndef LEARNING_JNI_STOCHASTIC_LINEAR_RANKER_H 186b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#define LEAENING_JNI_STOCHASTIC_LINEAR_RANKER_H 196b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 206b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#include <jni.h> 216b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 226b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#ifdef __cplusplus 236b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Huaextern "C" { 246b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#endif 256b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 26b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Counts the number of learning iterations. */ 27b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * ITR_NUM = "IterationNumber"; 28b019e89cbea221598c482b05ab68b7660b41aa23saberian 29b019e89cbea221598c482b05ab68b7660b41aa23saberian/* The maximum norm of the weight vector. If norm of weights are larger than NormConstraint 30b019e89cbea221598c482b05ab68b7660b41aa23saberian they will be reprojected using RegularizationType to satisfy this constraint. */ 31b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * NORM_CONSTRAINT = "NormConstraint"; 32b019e89cbea221598c482b05ab68b7660b41aa23saberian 33b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Ddetermines type of the regularization used in learning. 34b019e89cbea221598c482b05ab68b7660b41aa23saberian This regularization can be based on different norms. 35b019e89cbea221598c482b05ab68b7660b41aa23saberian Options: "L0", "L1", "L2", "L1L2", "L1LInf". 36b019e89cbea221598c482b05ab68b7660b41aa23saberian Default : LINEAR */ 37b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * REG_TYPE = "RegularizationType"; 38b019e89cbea221598c482b05ab68b7660b41aa23saberian 39b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Lambda is a factor that is multiplied with the step size in learning. This can be used 40b019e89cbea221598c482b05ab68b7660b41aa23saberian to change the step size. 41b019e89cbea221598c482b05ab68b7660b41aa23saberian Default : 1.0 */ 42b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * LAMBDA = "Lambda"; 43b019e89cbea221598c482b05ab68b7660b41aa23saberian 44b019e89cbea221598c482b05ab68b7660b41aa23saberian/* This parameter determines the update type in learning process. 45b019e89cbea221598c482b05ab68b7660b41aa23saberian Options: "FULL_CS" , "CLIP_CS", "REG_CS", "SL", "ADAPTIVE_REG" 46b019e89cbea221598c482b05ab68b7660b41aa23saberian Default : "SL" */ 47b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * UPDATE_TYPE = "UpdateType"; 48b019e89cbea221598c482b05ab68b7660b41aa23saberian 49b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Options: "CONST", "INV_LINEAR", "INV_QUADRATIC", "INV_SQRT" 50b019e89cbea221598c482b05ab68b7660b41aa23saberian Default: "INV_LINEAR". */ 51b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * ADAPT_MODE = "AdaptationMode"; 52b019e89cbea221598c482b05ab68b7660b41aa23saberian 53b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Three differnt kernels are supported: Linear "LINEAR", Polynomial "POLY", and RBF "RBF" 54b019e89cbea221598c482b05ab68b7660b41aa23saberian Default : "LINEAR" */ 55b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * KERNEL_TYPE = "KernelType"; 56b019e89cbea221598c482b05ab68b7660b41aa23saberian 57b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Kernel param is kernel-specific. In case of polynomial kernel, it is the degree of the 58b019e89cbea221598c482b05ab68b7660b41aa23saberian polynomial. In case of RBF kernel, it implies the sigma parameter. In case of linear 59b019e89cbea221598c482b05ab68b7660b41aa23saberian kernel, it is not used. */ 60b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * KERNEL_PARAM = "KernelParameter"; 61b019e89cbea221598c482b05ab68b7660b41aa23saberian 62b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Kernel gain is typically a multiplicative factor to the dot product while calculating 63b019e89cbea221598c482b05ab68b7660b41aa23saberian the kernel function. In most use cases, gain should be set to 1.0. */ 64b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * KERNEL_GAIN = "KernelGain"; 65b019e89cbea221598c482b05ab68b7660b41aa23saberian 66b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Kernel bias is typically an additive factors to the dot product while calculating 67b019e89cbea221598c482b05ab68b7660b41aa23saberian the kernel function. In most use cases, bias should be set to 0.0. */ 68b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * KERNEL_BIAS = "KernelBias"; 69b019e89cbea221598c482b05ab68b7660b41aa23saberian 70b019e89cbea221598c482b05ab68b7660b41aa23saberian/* This parameter determines the type of loss function to minimize. 71b019e89cbea221598c482b05ab68b7660b41aa23saberian Options : "PAIRWISE", "RECIPROCAL_RANK" 72b019e89cbea221598c482b05ab68b7660b41aa23saberian Default : "PAIRWISE" */ 73b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * LOSS_TYPE = "LossType"; 74b019e89cbea221598c482b05ab68b7660b41aa23saberian 75b019e89cbea221598c482b05ab68b7660b41aa23saberian/* The minimum percent of training pairs that are used in training. 76b019e89cbea221598c482b05ab68b7660b41aa23saberian Default : "0.1" */ 77b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * ACC_PROB = "AcceptaceProbability"; 78b019e89cbea221598c482b05ab68b7660b41aa23saberian 79b019e89cbea221598c482b05ab68b7660b41aa23saberian/* The code averages out gradient updates for MinimumBatchSize samples 80b019e89cbea221598c482b05ab68b7660b41aa23saberian before performing an iteration of the algorithm. */ 81b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * MIN_BATCH_SIZE = "MinimumBatchSize"; 82b019e89cbea221598c482b05ab68b7660b41aa23saberian 83b019e89cbea221598c482b05ab68b7660b41aa23saberian/* Specifies the number of non-zero entries allowed in a gradient. 84b019e89cbea221598c482b05ab68b7660b41aa23saberian Default is -1 which means we take the gradient as given by data without 85b019e89cbea221598c482b05ab68b7660b41aa23saberian adding any new constraints. positive number is treated as an L0 constraint */ 86b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * GRAD_L0_NORM = "GradientL0Nrom"; 87b019e89cbea221598c482b05ab68b7660b41aa23saberian 88b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * REG_TYPE_L0 = "L0"; 89b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * REG_TYPE_L1 = "L1"; 90b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * REG_TYPE_L2 = "L2"; 91b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * REG_TYPE_L1L2 = "L1L2"; 92b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * REG_TYPE_L1LInf = "L1LInf"; 93b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * UPDATE_TYPE_FULL_CS = "FULL_CS"; 94b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * UPDATE_TYPE_CLIP_CS = "CLIP_CS"; 95b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * UPDATE_TYPE_REG_CS = "REG_CS"; 96b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * UPDATE_TYPE_SL = "SL"; 97b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * UPDATE_TYPE_ADAPTIVE_REG = "ADAPTIVE_REG"; 98b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * ADAPT_MODE_CONST = "CONST"; 99b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * ADAPT_MODE_INV_LINEAR = "INV_LINEAR"; 100b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * ADAPT_MODE_INV_QUADRATIC = "INV_QUADRATIC"; 101b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * ADAPT_MODE_INV_SQRT = "INV_SQRT"; 102b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * KERNEL_TYPE_LINEAR = "LINEAR"; 103b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * KERNEL_TYPE_POLY = "POLY"; 104b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * KERNEL_TYPE_RBF = "RBF"; 105b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * LOSS_TYPE_PAIRWISE = "PAIRWISE"; 106b019e89cbea221598c482b05ab68b7660b41aa23saberianconst char * LOSS_TYPE_RECIPROCAL_RANK = "RECIPROCAL_RANK"; 107b019e89cbea221598c482b05ab68b7660b41aa23saberian 1086b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJNIEXPORT jint JNICALL 1096b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJava_android_bordeaux_learning_StochasticLinearRanker_initNativeClassifier( 1106b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua JNIEnv* env, 1116b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobject thiz); 1126b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1136b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1146b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJNIEXPORT jboolean JNICALL 1156b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJava_android_bordeaux_learning_StochasticLinearRanker_deleteNativeClassifier( 1166b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua JNIEnv* env, 1176b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobject thiz, 1186b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jint paPtr); 1196b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1206b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJNIEXPORT jboolean JNICALL 1216b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJava_android_bordeaux_learning_StochasticLinearRanker_nativeUpdateClassifier( 1226b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua JNIEnv* env, 1236b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobject thiz, 1246b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobjectArray key_array_positive, 1256b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jfloatArray value_array_positive, 1266b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobjectArray key_array_negative, 1276b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jfloatArray value_array_negative, 1286b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jint paPtr); 1296b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1306b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJNIEXPORT jfloat JNICALL 1316b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJava_android_bordeaux_learning_StochasticLinearRanker_nativeScoreSample( 1326b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua JNIEnv* env, 1336b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobject thiz, 1346b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobjectArray key_array, 1356b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jfloatArray value_array, 1366b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jint paPtr); 1376b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1386b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJNIEXPORT void JNICALL 139b019e89cbea221598c482b05ab68b7660b41aa23saberianJava_android_bordeaux_learning_StochasticLinearRanker_nativeGetWeightClassifier( 1406b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua JNIEnv* env, 1416b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobject thiz, 142b019e89cbea221598c482b05ab68b7660b41aa23saberian jobjectArray key_array_weight, 143b019e89cbea221598c482b05ab68b7660b41aa23saberian jfloatArray value_array_weight, 144b019e89cbea221598c482b05ab68b7660b41aa23saberian jfloat normalizer, 145b019e89cbea221598c482b05ab68b7660b41aa23saberian jint paPtr); 146b019e89cbea221598c482b05ab68b7660b41aa23saberian 147b019e89cbea221598c482b05ab68b7660b41aa23saberianJNIEXPORT void JNICALL 148b019e89cbea221598c482b05ab68b7660b41aa23saberianJava_android_bordeaux_learning_StochasticLinearRanker_nativeGetParameterClassifier( 149b019e89cbea221598c482b05ab68b7660b41aa23saberian JNIEnv* env, 150b019e89cbea221598c482b05ab68b7660b41aa23saberian jobject thiz, 151b019e89cbea221598c482b05ab68b7660b41aa23saberian jobjectArray key_array_param, 152b019e89cbea221598c482b05ab68b7660b41aa23saberian jobjectArray value_array_param, 1536b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jint paPtr); 1546b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1556b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJNIEXPORT jint JNICALL 1566b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJava_android_bordeaux_learning_StochasticLinearRanker_nativeGetLengthClassifier( 1576b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua JNIEnv* env, 1586b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobject thiz, 1596b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jint paPtr); 1606b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1616b4eebc73439cbc3ddfb547444a341d1f9be7996Wei HuaJNIEXPORT jboolean JNICALL 162b019e89cbea221598c482b05ab68b7660b41aa23saberianJava_android_bordeaux_learning_StochasticLinearRanker_nativeSetWeightClassifier( 1636b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua JNIEnv* env, 1646b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobject thiz, 1656b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jobjectArray key_array_model, 1666b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jfloatArray value_array_model, 167b019e89cbea221598c482b05ab68b7660b41aa23saberian jfloat normalizer_model, 168b019e89cbea221598c482b05ab68b7660b41aa23saberian jint paPtr); 169b019e89cbea221598c482b05ab68b7660b41aa23saberian 170b019e89cbea221598c482b05ab68b7660b41aa23saberianJNIEXPORT jboolean JNICALL 171b019e89cbea221598c482b05ab68b7660b41aa23saberianJava_android_bordeaux_learning_StochasticLinearRanker_nativeSetParameterClassifier( 172b019e89cbea221598c482b05ab68b7660b41aa23saberian JNIEnv* env, 173b019e89cbea221598c482b05ab68b7660b41aa23saberian jobject thiz, 174b019e89cbea221598c482b05ab68b7660b41aa23saberian jstring key, 175b019e89cbea221598c482b05ab68b7660b41aa23saberian jstring value, 1766b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua jint paPtr); 1776b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1786b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#ifdef __cplusplus 1796b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua} 1806b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#endif 1816b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua 1826b4eebc73439cbc3ddfb547444a341d1f9be7996Wei Hua#endif /* ANDROID_LERNING_JNI_STOCHASTIC_LINEAR_RANKER_H */ 183