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

📄 javanns_kernelinterface.c

📁 著名的神经网络工具箱
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
 * 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 + -