|
Demonstration in Python (Demo.py) |
Accueil Précédent Suivant |
# -*- coding: ISO-8859-15 -*-
#=================================================
# Module Demo.py
#
# Demo de la DLL NDK
#
# Author: Jean-Luc PLOIX - NETRAL
# Mai 2008
#=================================================
from ctypes import windll, byref, c_char, c_double, c_long
import const as C
from monaldecl import TModelData
from testfiles import createdata11
def createmodel(NInput, NOutput, NHidden, modelfilename=""):
NData = TModelData(NInput, NOutput, NHidden)
monal = windll.LoadLibrary( "MonaEx70.dll" )
monal.OpenLibrary(0)
Hndl = monal.CreateNewModel(byref(NData), 1)
if modelfilename:
monal.SaveModel(Hndl, modelfilename)
return monal, Hndl
def destroymodel(monal, Hndl):
monal.DestroyModel(Hndl)
monal.CloseLibrary()
def preparemodel():
datafile = "$$$.csv"
createdata11(datafile)
monal, Hndl = createmodel(1, 1, 2)
monal.SetRandSeed(1947)
monal.SetTrainingSet(Hndl, datafile, 1, 37, c_char(';'));
monal.ModelAction(Hndl, C.maLoadTrainingData)
monal.SetRealValue(Hndl, 1, c_double(0.1), C.rpIniDev);
monal.ModelAction(Hndl, C.maNormalizeData)
return monal, Hndl
def modelappris(verbose=1):
monal, Hndl = preparemodel()
if verbose:
vec = (c_double*monal.GetVector(Hndl, None, 0, 0))()
monal.GetVector(Hndl, byref(vec), 0, 0)
print "first data line", vec[0], vec[1] # verify the first data line
monal.GetVector(Hndl, byref(vec), 36, 0)
print "last data line", vec[0], vec[1] # verify the last data line
cost = c_double(0)
monal.GetRealValue(Hndl, 1, byref(cost), C.rpCost)
print "cost before training", cost.value
Number = c_long(25)
res = monal.Train(Hndl, byref(Number), C.TrS_InitParam, None)
if verbose:
cost.value = 0
monal.GetRealValue(Hndl, 1, byref(cost), C.rpCost)
print "cost after training", cost.value
if verbose:
destroymodel(monal, Hndl)
return "train cycles: %s"% Number.value
else:
return monal, Hndl
def demo1(modelfilename="MyModel.nml"):
monal, res = createmodel(4, 1, 3, modelfilename)
N = monal.GetText(res, 0, 0, C.gt_ProductInfo, None)
val = (c_char*N)()
monal.GetText(res, 0, 0, C.gt_ProductInfo, byref(val))
print val.value
# N = monal.TestFile(modelfilename)
# print "Type de fichier", N
monal.DestroyModel(res)
return res
def demo2():
monal, Hndl = createmodel(4, 1, 3)
monal.SetRandSeed(1947)
# initialisation des parametres
monal.ModelAction(Hndl, C.maInitParams)
input = (c_double*4)()
for i in xrange ( 4 ):
input[i] = 0.0
output = c_double(0)
monal.Transfer(Hndl, byref(input), byref(output), None, None, 0, C.trSimple)
monal.DestroyModel(Hndl)
return output.value
def demo3(verbose=1):
monal, Hndl = modelappris(0)
monal.SetRealValue(Hndl, 0, c_double(0.95), C.rpConfLevel)
monal.ModelAction(Hndl, C.maConfidenceComputation)
if verbose:
vec = (c_double*monal.GetVector(Hndl, None, 0, C.veLeverages))()
monal.GetVector(Hndl, byref(vec), 0, C.veLeverages)
cum=0
print "liste des leviers :"
for val in vec:
print val
cum = cum + val
ns = monal.GetInfo(Hndl, 5)
destroymodel(monal, Hndl)
return "Somme des leviers = %s à %s près"% (ns, ns-cum)
else:
return monal, Hndl
if __name__ == "__main__":
print demo1(), "must be 1"
print demo2(), "must be -0.0414775353794"
print demo3()
print "Done"