📄 t4runtim.c
字号:
/* ----------------------------------------------------------------------- *
* *
* (C) Copyright 1997 by: aiNet *
* Trubarjeva 42 *
* SI-3000 Celje *
* Europe, Slovenia *
* All Rights Reserved *
* *
* Subject: C code for a hole in the square problem. *
* File: T4RUNTIM - Hole int the square - dynamic binding *
* *
* ----------------------------------------------------------------------- */
/*
* This file assumes that ainetxx.dll will be loaded at run time,
* which is default option and no flags need to be defined.
* ainetxx.lib must NOT be included in the linking process.
*/
#include "ainetdll.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h> /* This is Borland specific header. */
/* It is used for getch() function only. */
/*
* Path and the filename of dll which will be loaded.
*/
#if defined(__WIN32__)
const char ainetDll[] = "ainet32.dll";
#else
const char ainetDll[] = "ainet16.dll";
#endif
/*
* Pointers to ainet dll functions. They are made global - all functions
* can use them.
*/
t_aiRegistration aiRegistration;
t_aiGetVersion aiGetVersion;
t_aiCreateModel aiCreateModel;
t_aiCreateModelFromCSVFile aiCreateModelFromCSVFile;
t_aiDeleteModel aiDeleteModel;
t_aiNormalize aiNormalize;
t_aiDenormalize aiDenormalize;
t_aiPrediction aiPrediction;
t_aiGetNumberOfVariables aiGetNumberOfVariables;
t_aiGetNumberOfModelVectors aiGetNumberOfModelVectors;
t_aiGetNumberOfInputVariables aiGetNumberOfInputVariables;
t_aiSetDiscreteFlag aiSetDiscreteFlag;
t_aiGetDiscreteFlag aiGetDiscreteFlag;
t_aiSetVariable aiSetVariable;
t_aiGetVariable aiGetVariable;
t_aiGetVariableVB aiGetVariableVB;
t_aiGetCSVFileModelSize aiGetCSVFileModelSize;
// New in version 1.24
t_aiSetCapacity aiSetCapacity;
t_aiGetCapacity aiGetCapacity;
t_aiGetFreeEntries aiGetFreeEntries;
t_aiInsertModelVector aiInsertModelVector;
t_aiOverwriteModelVector aiOverwriteModelVector;
t_aiAppendModelVector aiAppendModelVector;
t_aiDeleteModelVector aiDeleteModelVector;
t_aiPredictionEx aiPredictionEx;
t_aiExcludeModelVector aiExcludeModelVector;
t_aiExcludeModelVectorRange aiExcludeModelVectorRange;
t_aiIsModelVectorExcluded aiIsModelVectorExcluded;
t_aiSaveCSVFile aiSaveCSVFile;
/*
* ainet32.dll module variable.
*/
HINSTANCE hLib;
/*
* The load_aiNetLibrary() function is implemented below.
* This function will load ainet32.dll and define pointers to
* ainet functions.
*/
int load_aiNetLibrary(void);
/*
* #########################################################################
*/
void main()
{
/*
* Please, see the manual (Part 1, Chapter 2.3) for more details about a
* hole in the square problem.
*/
int i;
int counter;
int loop;
int version;
int outcome;
aiModel* model;
float x,y;
int mvIndex[5];
/* Let us define 6 vectors to be predicted.
* This definitely not enough for a good test set. However, this
* is just an example how to use aiNet.DLL library. You can
* construct a larger if you like.
* Test points were selected near the 'border'. One half of the set
* lies slightly inside - in the hole, and the other half of the
* set lies slightly outside - in the square.
* +-------+--------+-------+-------+--------+
* | Fi | R | X | Y | IN/OUT |
* +-------+--------+-------+-------+--------+
* 1 | 0 | 0.75 | 0.750 | 0.000 | OUT |
* 2 | 60 | 0.65 | 0.325 | 0.563 | IN |
* 3 | 120 | 0.75 |-0.375 | 0.650 | OUT |
* 4 | 180 | 0.65 |-0.650 | 0.000 | IN |
* 5 | 240 | 0.75 |-0.375 |-0.650 | OUT |
* 6 | 300 | 0.65 | 0.325 |-0.563 | IN |
* +-------+--------+-------+-------+--------+
*/
float predict[6][3] = { { 0.750, 0.000, 999 }, /* vectors to be predicted */
{ 0.325, 0.563, 999 },
{-0.375, 0.650, 999 },
{-0.650, 0.000, 999 },
{-0.375,-0.650, 999 },
{ 0.325,-0.563, 999 } };
/*
* Load DLL
*/
if( !load_aiNetLibrary() ) {
exit(EXIT_FAILURE);
}
/*
* Print out the title
*/
version = aiGetVersion();
printf( "\naiNetDLL version %i.%i! (C) Copyright by aiNet, 1997",
version/100, version%100 );
printf( "\n---------------------------------------------------\n" );
/*
* Register DLL
*/
aiRegistration( "Your registration name", "Your code" );
/*
* Setup the model. We will start with 10 model vectors. They will be
* generated using random number generator.
*/
model = aiCreateModel(10,3,2);
if(!model) {
printf( "\nError: Something went wrong during model creation!" );
exit(EXIT_FAILURE);
}
/* Let us generate initial model vectors */
randomize();
for(i=1; i<=10; i++) {
float inside;
x = (float)((random(2000)-1000))/1000.0;
y = (float)((random(2000)-1000))/1000.0;
if ( (x*x + y*y - 0.490) <= 0.0 )
inside = 1.0;
else
inside = 0.0;
aiSetVariable(model,i,1,x);
aiSetVariable(model,i,2,y);
aiSetVariable(model,i,3,inside);
}
/*
* Output the model
*/
printf( "\n Model name: aiNet DLL test 4 (Hole in the square)" );
printf( "\nNumber of model vectors: %i", aiGetNumberOfModelVectors(model));
printf( "\n Number of variables: %i", aiGetNumberOfVariables(model));
printf( "\n Variable names: X, Y, IN(1)/OUT(0)" );
printf( "\n Discrete flag: %i, %i, %i",
aiGetDiscreteFlag(model,1),
aiGetDiscreteFlag(model,2),
aiGetDiscreteFlag(model,3) );
for( i=1; i<=aiGetNumberOfModelVectors(model); i++ ) {
printf( "\n\t\t\t % 5.3f, % 5.3f, % 5.3f",
aiGetVariable(model, i,1),
aiGetVariable(model, i,2),
aiGetVariable(model, i,3) );
}
/* This loop will be repeated 7 times */
/* Each time new model vectors will be added to the problem. */
for(loop=0; loop<7; loop++) {
int oldSize;
/*
* Normalize the model
*/
aiNormalize(model,NORMALIZE_REGULAR);
/*
* Prediction: Pen. coefficient = 0.30, Pen. method = STATIC
* This test has static penalty coefficient 0.30
*/
printf( "\n\n Penalty coefficient: 0.15" );
printf( "\n Penalty method: STATIC" );
printf( "\n\t X(inp), Y(inp), IN/OUT (out)" );
counter = 0;
for ( i=0; i<6; i++ ) {
int inside;
int j;
/* TRUE stands for most influent MV */
aiPredictionEx( model, predict[i], 0.15, PENALTY_STATIC, mvIndex, 5, TRUE );
printf( "\n % 7.4f, % 7.4f, % 7.4f",
predict[i][0],predict[i][1],predict[i][2] );
inside = predict[i][2] >= 0.5;
if( inside )
printf( " IN " );
else
printf( " OUT" );
if( inside == i%2 ) {
printf( " PASSED" );
counter++;
}
else {
printf( " FAILED" );
}
printf( " Most inf. MVs: " );
for( j=0; j<5; j++ ) {
printf( "%i", mvIndex[j] );
if(j!=4) printf(", ");
}
}
printf( "\n\t%i Correct predictions (%3.2f)!", counter, counter/6.0*100.0 );
printf( "\nPress any key to continue!" );
getch();
/*
* Denormalize the model!
* We must do that, because new model vectors will be added to the model.
*/
aiDenormalize(model);
/*
* Each time, 100 new model vectors will be added to the model
*/
oldSize = aiGetCapacity(model);
outcome = aiSetCapacity(model,oldSize+100);
if(outcome < 0) {
printf( "\nError: Something went wrong during capacity call!" );
exit(EXIT_FAILURE);
}
for(i=0; i<100; i++) {
float newModelVector[3];
float inside;
x = (float)((random(2000)-1000))/1000.0;
y = (float)((random(2000)-1000))/1000.0;
if ( (x*x + y*y - 0.490) <= 0.0 )
inside = 1.0;
else
inside = 0.0;
newModelVector[0] = x;
newModelVector[1] = y;
newModelVector[2] = inside;
outcome = aiAppendModelVector(model,newModelVector);
if(outcome < 0) {
printf( "\nError: Appending new model vector failure!" );
exit(EXIT_FAILURE);
}
}
}
/*
* Finally we will use other new functions. There is no particular
* reason for their use. We will use them for demonstration purposes only!
*/
printf( "\n" );
printf( "\nNumber of model vectors in the model: %i",
aiGetNumberOfModelVectors(model));
printf( "\nCapacity of the model: %i",
aiGetCapacity(model));
printf( "\nFree entries in the model: %i",
aiGetFreeEntries(model));
/*
* Before we can save the model, the model must be denormalized in order
* to restore initial model values.
*/
aiSaveCSVFile(model,"Test.csv");
/*
* We must call the aiDeleteModel function here since the model
* was allocated dynamicaly using the aiCreateModelFromCSVFile function.
*/
aiDeleteModel(model);
model = aiCreateModelFromCSVFile("Test.csv");
aiDeleteModel(model);
printf( "\n\nEnd." );
getch();
exit(EXIT_SUCCESS);
}
/*
* This function binds AINET.DLL with function prototypes.
*/
int load_aiNetLibrary()
{
/*
* Load the Dynamic Link Library AINET32.DLL
*/
hLib = LoadLibrary(ainetDll);
if((unsigned)hLib<=HINSTANCE_ERROR){
char bfr[40];
wsprintf(bfr, "Failure loading library: %s", ainetDll);
MessageBox(NULL, bfr, "Error", MB_OK|MB_APPLMODAL);
return 0;
}
/*
* Get all the entry points for the functions in ainet32.dll
*/
aiRegistration = (t_aiRegistration) GetProcAddress(hLib, "aiRegistration");
aiGetVersion = (t_aiGetVersion) GetProcAddress(hLib, "aiGetVersion");
aiCreateModel = (t_aiCreateModel) GetProcAddress(hLib, "aiCreateModel");
aiCreateModelFromCSVFile = (t_aiCreateModelFromCSVFile) GetProcAddress(hLib, "aiCreateModelFromCSVFile");
aiDeleteModel = (t_aiDeleteModel) GetProcAddress(hLib, "aiDeleteModel");
aiNormalize = (t_aiNormalize) GetProcAddress(hLib, "aiNormalize");
aiDenormalize = (t_aiDenormalize) GetProcAddress(hLib, "aiDenormalize");
aiPrediction = (t_aiPrediction) GetProcAddress(hLib, "aiPrediction");
aiGetNumberOfVariables = (t_aiGetNumberOfVariables) GetProcAddress(hLib, "aiGetNumberOfVariables");
aiGetNumberOfModelVectors = (t_aiGetNumberOfModelVectors) GetProcAddress(hLib, "aiGetNumberOfModelVectors");
aiGetNumberOfInputVariables = (t_aiGetNumberOfInputVariables) GetProcAddress(hLib, "aiGetNumberOfInputVariables");
aiSetDiscreteFlag = (t_aiSetDiscreteFlag) GetProcAddress(hLib, "aiSetDiscreteFlag");
aiGetDiscreteFlag = (t_aiGetDiscreteFlag) GetProcAddress(hLib, "aiGetDiscreteFlag");
aiSetVariable = (t_aiSetVariable) GetProcAddress(hLib, "aiSetVariable");
aiGetVariable = (t_aiGetVariable) GetProcAddress(hLib, "aiGetVariable");
aiGetVariableVB = (t_aiGetVariableVB) GetProcAddress(hLib, "aiGetVariableVB");
aiGetCSVFileModelSize = (t_aiGetCSVFileModelSize) GetProcAddress(hLib, "aiGetCSVFileModelSize");
aiSetCapacity = (t_aiSetCapacity) GetProcAddress(hLib, "aiSetCapacity");
aiGetCapacity = (t_aiGetCapacity) GetProcAddress(hLib, "aiGetCapacity");
aiGetFreeEntries = (t_aiGetFreeEntries) GetProcAddress(hLib, "aiGetFreeEntries");
aiInsertModelVector = (t_aiInsertModelVector) GetProcAddress(hLib, "aiInsertModelVector");
aiOverwriteModelVector = (t_aiOverwriteModelVector) GetProcAddress(hLib, "aiOverwriteModelVector");
aiAppendModelVector = (t_aiAppendModelVector) GetProcAddress(hLib, "aiAppendModelVector");
aiDeleteModelVector = (t_aiDeleteModelVector) GetProcAddress(hLib, "aiDeleteModelVector");
aiPredictionEx = (t_aiPredictionEx) GetProcAddress(hLib, "aiPredictionEx");
aiExcludeModelVector = (t_aiExcludeModelVector) GetProcAddress(hLib, "aiExcludeModelVector");
aiExcludeModelVectorRange = (t_aiExcludeModelVectorRange) GetProcAddress(hLib, "aiExcludeModelVectorRange");
aiIsModelVectorExcluded = (t_aiIsModelVectorExcluded) GetProcAddress(hLib, "aiIsModelVectorExcluded");
aiSaveCSVFile = (t_aiSaveCSVFile) GetProcAddress(hLib, "aiSaveCSVFile");
/*
* GetProcAddress returns null on failure
*/
if( aiRegistration == NULL
|| aiGetVersion == NULL
|| aiCreateModel == NULL
|| aiCreateModelFromCSVFile == NULL
|| aiDeleteModel == NULL
|| aiNormalize == NULL
|| aiDenormalize == NULL
|| aiPrediction == NULL
|| aiGetNumberOfVariables == NULL
|| aiGetNumberOfModelVectors == NULL
|| aiGetNumberOfInputVariables == NULL
|| aiSetDiscreteFlag == NULL
|| aiGetDiscreteFlag == NULL
|| aiSetVariable == NULL
|| aiGetVariable == NULL
|| aiGetVariableVB == NULL
|| aiGetCSVFileModelSize == NULL
|| aiSetCapacity == NULL
|| aiGetCapacity == NULL
|| aiGetFreeEntries == NULL
|| aiInsertModelVector == NULL
|| aiOverwriteModelVector == NULL
|| aiAppendModelVector == NULL
|| aiDeleteModelVector == NULL
|| aiPredictionEx == NULL
|| aiExcludeModelVector == NULL
|| aiExcludeModelVectorRange == NULL
|| aiIsModelVectorExcluded == NULL
|| aiSaveCSVFile == NULL ) {
MessageBox(NULL, "Failure locating procedures.", "Error",
MB_OK|MB_APPLMODAL);
return 0;
}
return 1;
}
/* THE END */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -