30 Juin 2005 By LPX  
 

neant

neant

Optimisation - étude paramétrique :

Mise en place de la structure et des premières méthodes d'opti - étude paramétriques.

Tout a été fait en python et se trouve dans le fichier toolbox.parametricStudy.py

ResultFobj / ResultFobjSet :

gestion des résultat

Parameter / StringParameter / NumericParameter / ParametersSet :

gestion des paramètres (d'optimisation et autres par exemple le 'domainDirName')

Experiment / ExperimentSet / ExperimentSetViz :

gestion des expériences et de la visualisation

FullParametricStudy :

classe permettant d'effectuer une étude paramétrique sur des listes de paramètres (création des cas associé à toutes les combinaisons possibles de paramètres)

OptimisationMethod / NewtonGaussOptimisationMethod / LevenbergMarquardtOptimisationMethod :

Premier jet des méthodes d'opti de NewtonGauss et LevenbergMarquardt (plus classe mère pour éviter les "copiers-collers").

avec :

- adimensionnalisation du système (option pour NG - tjrs pour LM)
- gestion de contraintes sur les paramètres (contraintes de bornes pour l'instant) : NG adaptation de l'incrément de variation des paramètres, LM par pénalité

Remarque 1 :

Pour utiliser ces méthodes, il est nécessaire que le domaine soit réellement construit par la fonction getDomain (et non plus a l'importation du module) de manière à prendre en compte les valeurs des paramètres. Je propose donc la forme suivante pour lees jeux de donnée à optimiser :

Ce qui ne doit pas être détruit (les derniers memory leaks indispensables) :

#Valeurs Globales
domain = Domain()
domainBuilt = False
winc1 = VizWin()

#-- Fonctions d'evolution --
FCT_CHA = PieceWiseLinearFunction()
FCT_CHA.setData(0.0 , 0.0)
FCT_CHA.setData(1.0 , 0.5)

Fonction GetDomain : avec paramètre DomainBuilt pour ne pas construire plusieurs fois le meme domain:

#-- Fonction getDomain() --
def getDomain(_parameters):

global domainBuilt
if domainBuilt == False:
buildDomain(_parameters)
domainBuilt = True
return domain

 

Fonction buildDomain : Construction du domain avec paramètres par défaut et mise à jour des paramètres avec ceux passés en argument

#-- Construction du domain --
def buildDomain(_parameters):

#-- parametres par defaut :
parameters = {'Young': 210000.0,'Poisson':0.3,'IH_SIGEL':120.0,'IH_A':50.0,'IH_N':4.2}
print _parameters
# mise a jour des nouveaux parametres
parameters.update(_parameters)
# etre sur qu'on ne fait pas de conneries
global domain
#-- Initialisation - References --
domain.setAnalysis(METAFOR_ID)
metafor = domain.getMetafor()

 

Objectives Functions :

- Les objectives-Functions avaient été construites dans le but de faire de l'opti. Maintenant que les besoins se précisent (en terme de valeur à exporter, méthodes de calcul de S, format de fichier,... ces classes sont soumises à modifications

- DiffDataCurve a été renomé AreaDataCurve

- Une Objective Function DiffDataCurve a été reprogrammée calculant simplement à chaque abscisse de la courbe "numérique", l'écart relatif entre celle-ci et la courbe "expérimentale". La fonction objective S etant la norme d'ordre 2 de ces valeurs.

- Une interface avec les modules d'opti a été définie pour la sortie des résultats (fichier objectiveFunction.py en fonction de la classe python

 

Divers :

numarray :

Package de calcul numérique (matriciel) sous python utilisé pour résoudre les problèmes d'opti.

downloader et installer sous vos pc la version 1.3.2 :

version precompilee Win32 pour python 2.4 : http://prdownloads.sourceforge.net/numpy/numarray-1.3.2.win32-py2.4.exe?download

 

Stations : version 1.3.2 compilée - installée

ATTENTION (pour info): compilation sous tru64 est buggée :

dans le fichier : /numarray-1.3.2/Src/libnumarray.ch
line 1622 :
remplacer
int fpstatus;
par
int retstatus;

 

python ??? :

sous pc sys.executable donne bien metafor alors que sous station, sys.executable donne /usr/bin/python !!!

#args = [sys.executable,"-nogui","-c",callingString]
args = [sys.argv[0],"-nogui","-c",callingString]

conséquence : utilisation de sys.argv[0] (bien laisser PySys_SetArgv(argc, argv); dans le constructeur de PythonInterpreter)

Added Files :

oo_meta\mtExtractors\AreaDataCurveObjectiveFunction.h/cpp

Added Test :

oo_meta\apps\makefiles\Makefile_parametric

Courbes expérimentales de comparaison :

oo_meta\apps\experimentalCurves\

oo_meta\apps\experimentalCurves\apps.monosMaterials.tracEvpIso3dParam\
oo_meta\apps\experimentalCurves\apps.monosMaterials.tracEvpIso3dParam\exp_defo.ascii
oo_meta\apps\experimentalCurves\apps.monosMaterials.tracEvpIso3dParam\exp_stress.ascii

oo_meta\apps\experimentalCurves\apps.monosMaterials.tracIdentParamIHLin\
oo_meta\apps\experimentalCurves\apps.monosMaterials.tracIdentParamIHLin\ expDispl.ascii
oo_meta\apps\experimentalCurves\apps.monosMaterials.tracIdentParamIHLin\expForce.ascii

oo_meta\apps\experimentalCurves\apps.qs.triangleForOpti\
oo_meta\apps\experimentalCurves\apps.qs.triangleForOpti\expDisplX.ascii
oo_meta\apps\experimentalCurves\apps.qs.triangleForOpti\expDisplX_LAG.ascii
oo_meta\apps\experimentalCurves\apps.qs.triangleForOpti\expForcX.ascii
oo_meta\apps\experimentalCurves\apps.qs.triangleForOpti\expForcX_LAG.ascii

Test d'Opti :

oo_meta\apps\parametric\
oo_meta\apps\parametric\__init__.py
oo_meta\apps\parametric\Makefile
oo_meta\apps\parametric\tracEvpIso3dParam_LM.py
oo_meta\apps\parametric\tracEvpIso3dParam_NG.py
oo_meta\apps\parametric\tracEvpIso3dParam_ParamStudy.py
oo_meta\apps\parametric\tracIdentIHLin_LM.py
oo_meta\apps\parametric\tracIdentIHLin_NG.py
oo_meta\apps\parametric\tracIdentIHLin_NGNorm.py
oo_meta\apps\parametric\triangleForOpti_LM.py
oo_meta\apps\parametric\triangleForOpti_NG.py
oo_meta\apps\parametric\triangleForOpti_NGNorm.py

Test à optimiser :

oo_meta\apps\monosMaterials\tracEvpIso3dParam.py
oo_meta\apps\monosMaterials\tracIdentParamIHLin.py

oo_meta\apps\qs\triangleForOpti.py

 

ATTENTION NOUVEAUX REPERTOIRES => cvs update -d !!!

 

 

Back to Metafor web server
created :29 Juin 2005   modified : 30 Juin2005
contact :L.Papeleux@ulg.ac.be