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