📄 javanns_kernelinterface.c
字号:
/*
* Java-to-SNNS kernel interface
* by Igor Fischer
*
* based on Tcl or Perl Extension with SNNS-Functions by Fred Rapp,
* which is itself based on Jens Wieland's batchman
*
*/
#include "javanns_KernelInterface.h"
#pragma warning( disable : 4244 )
#define BUFLEN 255
#include <time.h>
/* Taken from Fred's batch.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "glob_typ.h" /* SNNS-Kernel constants and data type definitions */
#include "cc_mac.h" /* SNNS-Kernel macros for cascade correlation */
#include "kr_ui.h" /* SNNS-Kernel User-Interface Function Prototypes */
#include "art_typ.h" /* Must include for art_ui.h (I.F.) */
#include "art_ui.h" /* SNNS-Kernel ART Interface Function Prototypes */
#include "prun_f.h" /* SNNS-Kernel constants for pruning function calls */
//#include "batch.h"
//#include "globals.h"
//#include "except.h"
#define NO_OF_CASCADE_PARAMS 23 /* UI_NO_OF_CASCADE_PARAMS as defined in xgui/ui.h */
time_t start;
char patternFileNames[NO_OF_PAT_SETS][BUFLEN];
int currentPatternSet = -1;
int i, k, ival;
int initnum, learnnum, ffLearnnum, updatenum, resultnum, cyclenum = 0;
int lastErrorCode = KRERR_NO_ERROR;
double val;
float init[NO_OF_INIT_PARAMS];
float learn[NO_OF_LEARN_PARAMS + NO_OF_CASCADE_PARAMS];
float ffLearn[NO_OF_LEARN_PARAMS]; /* I.F.: do we need this array at all? */
float update[NO_OF_UPDATE_PARAMS];
float *result, fval;
/* Pruning variables */
float max_error_incr, accepted_error, min_error_to_stop, init_matrix_value;
bool recreatef, input_pruningf, hidden_pruningf;
int first_train_cyc, retrain_cyc;
char *pruneTmpFile;
int
spIsize[MAX_NO_OF_VAR_DIM],/* parameters for subpattern definition */
spIstep[MAX_NO_OF_VAR_DIM],
spOsize[MAX_NO_OF_VAR_DIM],
spOstep[MAX_NO_OF_VAR_DIM];
int
init_net_flag = FALSE, /* init_param_array init'ed or not */
init_learn_flag = FALSE, /* learn_param_array init'ed or not */
init_ffLearn_flag = FALSE, /* ffLearn_param_array init'ed or not */
init_update_flag = FALSE, /* update_param_array init'ed or not */
init_subPat_flag = FALSE; /* subPattern arrays init'ed or not */
/***************************************************************************************
* Error handling *
***************************************************************************************/
bool isOK(JNIEnv *jEnv, int err_code) {
lastErrorCode = err_code;
if ( (err_code <= 0) && (err_code != KRERR_NO_ERROR) ) {
jclass newExcCls;
printf("%s\n\a", krui_error(err_code));
newExcCls = (*jEnv)->FindClass(jEnv, "javanns/KernelInterface$KernelException");
if (newExcCls == 0) { /* Unable to find the new exception class, give up. */
printf("Can't throw exception, giving up!\a\n");
return FALSE;
}
(*jEnv)->ThrowNew(jEnv, newExcCls, krui_error(err_code));
return FALSE;
}
return TRUE;
}
void error(JNIEnv *jEnv, const char *s) {
jclass newExcCls;
newExcCls = (*jEnv)->FindClass(jEnv, "javanns/KernelInterface$KernelException");
if (newExcCls == 0) { /* Unable to find the new exception class, give up. */
printf("Can't throw exception, giving up!\a\n");
return;
}
(*jEnv)->ThrowNew(jEnv, newExcCls, s);
}
/***************************************************************************************
* Some auxiliary functions *
***************************************************************************************/
/*
* trainFFNet is called from various pruning methods, as well as from
* the interface method Java_javanns_KernelInterface_trainFFNet__I
*/
float trainFFNet(JNIEnv *jEnv, jobject jObj, int cycles ) {
float *return_values;
int NoOfOutParams;
int cycle = 0;
while(
(cycle < cycles) &&
((cycle && (return_values [0] > min_error_to_stop)) || !cycle) &&
isOK(jEnv, krui_learnAllPatternsFF(learn, learnnum, &return_values, &NoOfOutParams) )
) cycle++;
return (return_values[0]);
}
/***************************************************************************************
* Actual interface functions *
***************************************************************************************/
/*
* Class: javanns_KernelInterface
* Method: getNoOfUnits
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_getNoOfUnits(JNIEnv *jEnv, jobject jObj) {
return krui_getNoOfUnits();
}
/*
* Class: javanns_KernelInterface
* Method: getNoOfSpecialUnits
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_getNoOfSpecialUnits(JNIEnv *jEnv, jobject jObj) {
error(jEnv, "Non-existent kernel function!");
return 0;
}
/*
* Class: javanns_KernelInterface
* Method: getFirstUnit
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_getFirstUnit(JNIEnv *jEnv, jobject jObj) {
return krui_getFirstUnit();
}
/*
* Class: javanns_KernelInterface
* Method: getNextUnit
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_getNextUnit(JNIEnv *jEnv, jobject jObj) {
return krui_getNextUnit();
}
/*
* Class: javanns_KernelInterface
* Method: setCurrentUnit
* Signature: (I)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setCurrentUnit(JNIEnv *jEnv, jobject jObj, jint unitNo) {
isOK(jEnv, krui_setCurrentUnit(unitNo) );
}
/*
* Class: javanns_KernelInterface
* Method: getCurrentUnit
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_getCurrentUnit(JNIEnv *jEnv, jobject jObj) {
return krui_getCurrentUnit();
}
/*
* Class: javanns_KernelInterface
* Method: getUnitName
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_javanns_KernelInterface_getUnitName(JNIEnv *jEnv, jobject jObj, jint unitNo) {
char *p = krui_getUnitName(unitNo);
if(p) return (*jEnv)->NewStringUTF(jEnv, p );
else return (*jEnv)->NewStringUTF(jEnv, "" );
}
/*
* Class: javanns_KernelInterface
* Method: setUnitName
* Signature: (ILjava/lang/String;)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setUnitName(JNIEnv *jEnv, jobject jObj,
jint unitNo,
jstring jUnitName) {
const char *unitName = (*jEnv)->GetStringUTFChars(jEnv, jUnitName, 0);
isOK(
jEnv,
krui_setUnitName( unitNo, (char *)unitName)
);
(*jEnv)->ReleaseStringUTFChars(jEnv, jUnitName, unitName);
}
/*
* Class: javanns_KernelInterface
* Method: searchUnitName
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_searchUnitName(JNIEnv *jEnv, jobject jObj, jstring jUnitName) {
const char *unitName = (*jEnv)->GetStringUTFChars(jEnv, jUnitName, 0);
int i = krui_searchUnitName( (char *)unitName);
(*jEnv)->ReleaseStringUTFChars(jEnv, jUnitName, unitName);
return i;
}
/*
* Class: javanns_KernelInterface
* Method: searchNextUnitName
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_searchNextUnitName(JNIEnv *jEnv, jobject jObj){
int i = krui_searchNextUnitName();
isOK(jEnv, i);
return i;
}
/*
* Class: javanns_KernelInterface
* Method: getUnitOutFuncName
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_javanns_KernelInterface_getUnitOutFuncName(JNIEnv *jEnv, jobject jObj, jint unitNo) {
char *p = krui_getUnitOutFuncName(unitNo);
if(p) return (*jEnv)->NewStringUTF(jEnv, p );
else return (*jEnv)->NewStringUTF(jEnv, "" );
}
/*
* Class: javanns_KernelInterface
* Method: getUnitActFuncName
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_javanns_KernelInterface_getUnitActFuncName(JNIEnv *jEnv, jobject jObj, jint unitNo) {
char *p = krui_getUnitActFuncName(unitNo);
if(p) return (*jEnv)->NewStringUTF(jEnv, p );
else return (*jEnv)->NewStringUTF(jEnv, "" );
}
/*
* Class: javanns_KernelInterface
* Method: setUnitOutFunc
* Signature: (ILjava/lang/String;)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setUnitOutFunc(JNIEnv *jEnv, jobject jObj,
jint unitNo,
jstring jName) {
const char *name = (*jEnv)->GetStringUTFChars(jEnv, jName, 0);
int i = krui_setUnitOutFunc(unitNo, (char *)name);
(*jEnv)->ReleaseStringUTFChars(jEnv, jName, name);
isOK(jEnv, i);
}
/*
* Class: javanns_KernelInterface
* Method: setUnitActFunc
* Signature: (ILjava/lang/String;)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setUnitActFunc(JNIEnv *jEnv, jobject jObj,
jint unitNo,
jstring jName) {
const char *name = (*jEnv)->GetStringUTFChars(jEnv, jName, 0);
int i = krui_setUnitActFunc(unitNo, (char *)name);
(*jEnv)->ReleaseStringUTFChars(jEnv, jName, name);
isOK(jEnv, i);
}
/*
* Class: javanns_KernelInterface
* Method: getUnitFTypeName
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_javanns_KernelInterface_getUnitFTypeName(JNIEnv *jEnv, jobject jObj, jint unitNo) {
char *p = krui_getUnitFTypeName(unitNo);
if(p) return (*jEnv)->NewStringUTF(jEnv, p );
else return (*jEnv)->NewStringUTF(jEnv, "" );
}
/*
* Class: javanns_KernelInterface
* Method: getUnitActivation
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_javanns_KernelInterface_getUnitActivation(JNIEnv *jEnv, jobject jObj, jint unitNo) {
return krui_getUnitActivation(unitNo);
}
/*
* Class: javanns_KernelInterface
* Method: setUnitActivation
* Signature: (ID)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setUnitActivation(JNIEnv *jEnv, jobject jObj,
jint unitNo,
jdouble act) {
isOK(jEnv, krui_setUnitActivation(unitNo, act) );
}
/*
* Class: javanns_KernelInterface
* Method: getUnitInitialActivation
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_javanns_KernelInterface_getUnitInitialActivation(JNIEnv *jEnv, jobject jObj, jint unitNo) {
return krui_getUnitInitialActivation(unitNo);
}
/*
* Class: javanns_KernelInterface
* Method: setUnitInitialActivation
* Signature: (ID)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setUnitInitialActivation(JNIEnv *jEnv, jobject jObj,
jint unitNo,
jdouble act) {
krui_setUnitInitialActivation(unitNo, act);
}
/*
* Class: javanns_KernelInterface
* Method: getUnitOutput
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_javanns_KernelInterface_getUnitOutput(JNIEnv *jEnv, jobject jObj, jint unitNo) {
return krui_getUnitOutput(unitNo);
}
/*
* Class: javanns_KernelInterface
* Method: setUnitOutput
* Signature: (ID)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setUnitOutput(JNIEnv *jEnv, jobject jObj,
jint unitNo,
jdouble out) {
isOK(jEnv, krui_setUnitOutput(unitNo, out) );
}
/*
* Class: javanns_KernelInterface
* Method: getUnitBias
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_javanns_KernelInterface_getUnitBias(JNIEnv *jEnv, jobject jObj, jint unitNo) {
return krui_getUnitBias(unitNo);
}
/*
* Class: javanns_KernelInterface
* Method: setUnitBias
* Signature: (ID)V
*/
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setUnitBias(JNIEnv *jEnv, jobject jObj,
jint unitNo,
jdouble bias) {
krui_setUnitBias(unitNo, bias);
}
/*
* Class: javanns_KernelInterface
* Method: getUnitSubnetNo
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_getUnitSubnetNo(JNIEnv *jEnv, jobject jObj, jint unitNo) {
return krui_getUnitSubnetNo(unitNo);
}
/*
* Class: javanns_KernelInterface
* Method: setUnitSubnetNo
* Signature: (II)V
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -