Professional Documents
Culture Documents
Manuale d'uso
v 0.1.5
AUTORE:
Corrado CHISARI
Indice generale
Capitolo 1. Cos' T.O.S.C.A........................................................................................1
1.1. Presentazione............................................................................................................................1
1.2. Principi generali........................................................................................................................1
1.3. Principi di funzionamento.........................................................................................................3
Capitolo 3. L'input.....................................................................................................13
3.1. Le variabili di input.................................................................................................................13
3.1.1. Parametri costanti............................................................................................................13
3.1.2. Parametri variabili in un intervallo.................................................................................13
3.1.3. Parametri variabili secondo una tabella..........................................................................13
3.1.4. Parametri ottenuti per combinazione..............................................................................14
3.2. Redazione dello schema (template) di input...........................................................................15
Capitolo 4. L'output..................................................................................................16
4.1. Le variabili di output...............................................................................................................16
4.1.1. Parametri ottenuti dal file di output................................................................................16
4.1.2. Parametri costanti e ottenuti per combinazione..............................................................16
4.1.3. Vincoli.............................................................................................................................16
4.1.4. Obiettivo..........................................................................................................................17
4.2. Redazione dello schema (template) di output.........................................................................17
6.3. Il pre-processing.....................................................................................................................29
Capitolo 7. Esempi.....................................................................................................30
7.1. La funzione di Himmelblau: prima opzione...........................................................................30
7.1.1. GA_Parameters.txt..........................................................................................................30
7.1.2. InputVariables.txt............................................................................................................30
7.1.3. InputTemplate.txt............................................................................................................31
7.1.4. OutputVariables.txt.........................................................................................................31
7.1.5. OutputTemplate,txt..........................................................................................................31
7.1.6. Script.bat.........................................................................................................................31
7.1.7. Himmelblau.py................................................................................................................31
7.2. La funzione di Himmelblau: seconda opzione.......................................................................32
7.2.1. InputTemplate.txt............................................................................................................32
7.2.2. OutputVariables.txt.........................................................................................................32
7.2.3. OutputTemplate.txt..........................................................................................................33
7.2.4. Script.bat.........................................................................................................................33
Bibliografia.................................................................................................................34
Presentazione
T.O.S.C.A. (acronimo per Technical Optimizer fo Structural and Civil engineering Analyses,
nel seguito TOSCA) un software di ottimizzazione generico creato da Corrado Chisari presso il
Dipartimento di Ingegneria Civile ed Architettura dell'Universit di Trieste. Esso utilizza gli
algoritmi genetici per la ricerca dell'ottimo ed stato pensato per l'applicazione ai pi diversi
problemi di ottimizzazione nell'ambito dell'ingegneria civile (Ottimo strutturale, identificazione di
parametri meccanici, fitting di curve sperimentali, ecc.).
Il software si basa sul pacchetto EvoCOM (Evolutionary Computation) sviluppato dagli ingg.
Pasquale Lucia e Roberto Zamparo nell'ambito del progetto AutoBiD (Automatic Bridge Design),
ma stato modificato sia nell'interfaccia (in modo da renderlo quanto pi generale possibile) che
negli algoritmi.
1.2.
Principi generali
Per ottimizzazione mono-obiettivo si intende il processo tramite cui possibile risalire alla
soluzione del problema matematico:
min/max {f(x)}
(1)
x:
gi(x)=0; hj(x)>0
La funzione f(x) viene definita funzione obiettivo, gi(x)=0 e hj(x)>0 sono rispettivamente
vincoli di uguaglianza e disuguaglianza. TOSCA, alla stesura del presente manuale, non permette la
definizione di vincoli di uguaglianza.
A seconda della forma della funzione f(x) e del vettore di variabili x, sono stati elaborati
diversi algoritmi di risoluzione del problema. Essi possono essere divisi in tre categorie:
a) Basati sul calcolo infinitesimale;
b) Enumerativi;
c) Metodi euristici.
Mentre i metodi di tipo a) (moltiplicatori di Lagrange, hill-climbing, line-search, ecc.)
necessitano di determinate condizioni per essere applicati (continuit e derivabilit di f(x) su tutto il
campo di applicazione di x) e sono necessariamente locali nel senso che non riescono a
distinguere fra ottimi locali e globali, i metodi di tipo b) e c) sono da questo punto di vista meno
restrittivi. Tralasciando i metodi enumerativi, che calcolano il valore di f(x) in tutto il campo di
esistenza e scelgono il minore/maggiore valore trovato (inapplicabili per problemi di di una certa
dimensione), ad oggi riscontrano sempre maggior successo i metodi euristici. Essi (Algoritmi
Genetici, Tabu Search, Ant Colony, Simulated Annealing, ecc.) ricercano l'ottimo secondo la
condizione (1) in un processo iterativo in cui l'individuo di tentativo viene migliorato secondo
determinati algoritmi che fanno, in molti casi, largo uso di tecniche di tipo random.
In particolare gli Algoritmi Genetici [1] partono da un certo numero di possibili soluzioni
(individui) chiamate popolazione e provvede a farle evolvere nel corso dell'esecuzione: a ciascuna
iterazione, esso opera una selezione di individui della popolazione corrente, impiegandoli per
generare nuovi elementi della popolazione stessa, che andranno a sostituire un pari numero
1
d'individui gi presenti, e a costituire in tal modo una nuova popolazione per l'iterazione (o
generazione) seguente. Tale successione di generazioni evolve verso una soluzione ottimale (locale
o globale) del problema assegnato [2]. L'algoritmo evolve quindi attraverso i seguenti punti:
a) generazione, in maniera casuale o pseudo-casuale, di una popolazione iniziale;
b) creazione di una sequenza di nuove popolazioni, o generazioni. In ciascuna
iterazione, gli individui della popolazione corrente sono usati per creare la
generazione successiva, e a questo scopo si compiono degli ulteriori passi:
Valutazione: ciascun membro della popolazione corrente valutato
calcolandone il rispettivo valore di fitness, che tiene conto del valore assunto
dalla funzione obiettivo f(x) e dai vincoli gi(x) e hj(x);
Ordinamento: si determina un opportuno ordinamento di tali individui sulla
base dei valori di fitness;
Selezione: gli individui pi promettenti sono selezionati come genitori;
Generazione: a partire da tali individui si genera un pari numero di individui
della generazione successiva, e ci pu avvenire secondo due modalit
distinte, vale a dire effettuando cambiamenti casuali su un singolo genitore
(mutazione) oppure combinando opportunamente le caratteristiche di una
coppia di genitori (crossover). Un'ulteriore tecnica utilizzata quella di
mantenere alcuni individui della popolazione attuale nella successiva
(sostituzione);
gli individui cos generati vengono utilizzati per formare la generazione
successiva;
c) infine, l'algoritmo s'interrompe quando uno dei criteri d'arresto soddisfatto
(tipicamente quando si raggiunto il numero di generazioni selezionate in fase di
input).
Dall'analisi appena svolta, evidente che i parametri pi importanti per una corretta
applicazione dell'algoritmo sono:
1. Una corretta scelta della popolazione iniziale (DOE, Design Of Experiment), sia in
quantit (numero di individui) sia in qualit (disposizione nello spazio delle variabili
degli individui generati);
2. La valutazione degli individui e l'importanza dei vincoli, che se troppo influenti
potrebbero far convergere l'analisi verso un ottimo relativo o addirittura rendere
impossibile la ricerca di un individuo valido (cio che soddisfi i vincoli stessi); d'altra
parte, vincoli troppo poco importanti potrebbero limitare troppo poco il campo di
ricerca [3];
3. Il tipo di selezione degli individui da sottoporre a mutazione e crossover, la quale
spesso responsabile di prematura convergenza;
4. Il tipo di crossover e di mutazione e le loro percentuali: in generale mutazioni alte
permettono di esplorare in maniera pi spinta il campo delle soluzioni perch evitano
la convergenza verso ottimi relativi, ma sono anche responsabili di corrompere
l'algoritmo. Una probabilit di mutazione del 100%, portando al limite, rende la
ricerca assolutamente casuale. Valori tipici sono intorno all'1-5%, mentre per il
2
1.3.
Principi di funzionamento
Inizio
Valutazione della
funzione obiettivo, dei
vincoli e quindi del fitness
per l'individuo i-esimo
Fine
i++
no
no
Valutazione, selezione,
Crossover, mutazione,
sostituzione
Creazione di una
nuova popolazione;
Contatore individuo i=0
template
di
input
(definito
in
Una volta lanciata l'analisi, nella cartella NomeCartella verr creata una cartella contenente il
progetto di ottimizzazione. Tale cartella, il cui nome definito in GA_Parameters.txt, contiene una
copia dei sei file suddetti, il database degli individui analizzati (in formato testo, importabile in
foglio di calcolo) e, a fine analisi, due grafici (files JPEG) con l'andamento individuo-funzione
obiettivo contenenti rispettivamente tutti gli individui e solo quelli soddisfacenti i vincoli (feasable).
Il file GA_Parameters.txt
Questo file contiene tutti i parametri relativi all'algoritmo di analisi. La sintassi della
definizione di ogni parametro del tipo:
NomeParametro: ValoreParametro1 [, ValoreParametro2, ]
2.2.
2.2.1.
Comando
projectLabel
Tipo Parametro
testuale
Valori permessi
qualsiasi
Valore di default
Project01
Descrizione
il nome del progetto
di
ottimizzazione.
Esso verr utilizzato
quale nome della
cartella
contenente
l'analisi; nel caso tale
cartella esista gi, ad
esso verr posposto un
numero progressivo
(per esempio se la
cartella
Project01
esiste gi, il progetto
verr creato nella
cartella
Project01001; se questa esiste,
verr
creata
Project01-002, e cos
via).
Comando
Tipo Parametro
Valori permessi
Valore di default
Descrizione
inputFile
testuale
qualsiasi
input.txt
outputFile
testuale
qualsiasi
output.txt
inputTemplate
testuale
qualsiasi
inputTempl.txt
outputTemplate
testuale
qualsiasi
outputTempl.txt
Comando
script
Tipo Parametro
testuale
Valori permessi
qualsiasi
Valore di default
script.bat
Descrizione
Nome dello script che
TOSCA lancer per
ogni individuo. Tale
script
dovr
processare inputFile e
creer outputFile al
termine
dell'analisi.
Tale script deve essere
presente nella cartella
di lavoro.
2.2.2.
Comando
DOE
Tipo
Parametro
testuale
Valori permessi
Random
Sobol
Diagonal
nome_file_doe
Valore di
default
Random
Descrizione
Algoritmo impiegato
per
generare
la
popolazione iniziale.
Nel caso in cui si
selezioni
un
file
contenente il doe
nome_file_doe
con
numero di individui
inferiore
a
numOfExperiments,
possibile selezionare
anche un secondo tipo
di DOE (secondo la
sintassi spiegata in
2.1. ).
Comando
Tipo
Parametro
Valori permessi
Valore di
default
Descrizione
numOfExperiments
numerico
>0
30
Numero
degli
individui
contenuti
nella
popolazione
iniziale,
selezionati
secondo l'algoritmo
DOE.
offspringPopSize
numerico
>0
30
Numero di individui
contenuti in ogni
generazione
successiva
alla
popolazione iniziale.
Non
deve
necessariamente
coincidere
con
numOfExperiments.
numberGenerations
numerico
>0
100
Numero
generazioni
analizzare
penaltyFunction
testuale
Statical
GenChengDinamic
Statical
Tipo di funzione di
penalizzazione,
che
permette di calcolare
il valore di fitness a
partire dal valore
assunto dalla funzione
obiettivo e dai vincoli
penaltyPressure
numerico
>1
2.0
Pressione
di
penalizzazione;
utilizzato solo quando
penaltyFunction:
GenChengDinamic
Selection
testuale
Tournament
RouletteWheel
SUS
Tournament
Tipo di selezione
tournamentSize
numerico
>0
Dimensione
del
torneo; utilizzato solo
quando
Selection:
Tournament
Scaling
testuale
LinearRank
Normalizing
ExponentialRank
Normalizing
Tipo di scalatura;
utilizzato solo quando
Selection:
RouletteWheel/SUS
scalingPressure
numerico
di
da
Pressione di scalatura
Comando
Tipo
Parametro
Valori permessi
Valore di
default
Descrizione
CrossOver
testuale
MultiPoint
Directional
FixedArithmetic
ProbArithmetic
Discrete
Mixed
MultiPoint
Tipo di crossover
crossoverProb
numerico
Compreso fra 0 e 1
0.8
Probabilit
crossover
numOffsprings
numerico
>0
crossoverPoints
numerico
Compreso fra 1 e 3
(offspringPopSize-1)
Numero di punti di
rottura; utilizzato solo
quando
CrossOver:
MultiPoint
intervalModifier
numerico
>0
0.2
Mutation
testuale
Aleatory
Directional
Local
Aleatory
Tipo di mutazione
mutationProb
numerico
Compreso fra 0 e 1
0.035
Probabilit
mutazione
localMutationRatio
numerico
Compreso fra 0 e 1
0.05
Frazione
dell'intervallo
utilizzato
per
la
mutazione
locale
(Mutation: Local)
Replacement
testuale
Elitism
Children
Competence
Elitism
Tipo di sostituzione
elitismParents
numerico
Compreso fra 0 e 3
offspringPopSize
10
di
di
Numero di individui
particolarmente buoni
da mantenere alla
nuova
generazione;
utilizzato solo se
Replacement: Elitism
Comando
Tipo
Parametro
Valori permessi
Valore di
default
Descrizione
WriteEliteStats
testuale
true/false
false
Se
true
e
Replacement: Elitism
viene creato un file
Elite.csv al termine
della
prima
generazione con le
statistiche dell'elite al
variare del numero di
individui
Restart
testuale
true/false
false
restartElitismElements
numerico
>0
Numero di individui
da scrivere nel file di
restart; utilizzato solo
se Restart: true
SubPopulation
testuale
true/false
false
Se
true
viene
applicata la tecnica
delle sottopopolazione
per
evitare
la
convergenza
verso
ottimi
locali
(sperimentale)
minSubPopRadiusRatio numerico
Compreso fra 0 e 1
1.0
maxSubPopRadiusRatio numerico
Compreso fra 0 e 1
1.0
limitFeasableRatio
numerico
>1
1.0
randomSeed
numerico
>0
11
2.3.
Lo script di lancio
Lo script di lancio (parametro script del file GA_Parameters.txt) il programma che viene
lanciato per ogni individuo, ed quello che si occupa di leggere l'input e scrivere l'output per
l'ottimizzatore. Esso deve essere presente nella cartella di analisi e verr copiato nella cartella
relativa al singolo individuo e da l lanciato: si tenga quindi presente che la cartella di lavoro
(variabile %cd% per i sistemi Windows, $PWD per i sistemi Linux o linux-like) per lo script stesso
quella del singolo individuo (ad esempio NomeCartella\projectLabel\0001\0208\ nel caso
dell'esempio riportato in 2.2.1. ).
Nella sua forma pi semplice, lo script un file di testo con estensione .bat o .cmd contenente
la seguente porzione di codice:
NomeEXE.exe Argument1 Argument2 ArgumentN
12
Capitolo 3. L'input
3.1.
Le variabili di input
Le variabili di input sono quelle variabili che vengono scelte dall'ottimizzatore per ogni
individuo e il cui insieme rappresenta il cromosoma di quest'ultimo. TOSCA permette l'inserimento
di diversi tipi di variabili di input:
Parametri costanti;
Essi vengono definiti nel file InputVariables.txt, secondo la sintassi spiegata nei paragrafi
seguenti.
La doppia barra // introduce un commento. Tale commento pu essere posto a inizio o
internamente a una riga: nel secondo caso tutto ci che sta a destra della doppia barra verr
ignorato.
3.1.1.
Parametri costanti
La sintassi la seguente:
NomeParametro: Valore
3.1.2.
La sintassi la seguente:
NomeParametro: ValoreMin, ValoreMax, Incremento
TOSCA non genera errore se il primo argomento dopo i due punti maggiore del secondo: in
tal caso prender il primo valore come limite superiore e il secondo come limite inferiore. Il terzo
valore rappresenta in ogni caso l'incremento.
3.1.3.
La sintassi la seguente:
NomeParametro: NomeFileTabella
NomeFileTabella deve essere un file di testo, il cui percorso pu essere assoluto o relativo a
partire dalla cartella del progetto. Esso deve essere redatto secondo il seguente schema:
13
Ogni colonna, sia dell'intestazione che del corpo della tabella separata dalle altre
mediante virgola;
3.1.4.
La sintassi la seguente:
NomeParametro: Espressione
PI, pi greco;
E, numero di Nepero;
Operatori + - / * ^;
Funzioni trigonometriche Sin, Cos, Tan, Asin, Acos, Atan. Gli argomenti di Sin, Cos,
Tan devono essere espressi in radianti;
14
Gli argomenti delle funzioni binarie e ternarie devono essere separati da ;. E' possibile
nidificare le funzioni If, come nell'esempio seguente:
x1: 10
x2: 7
x3: 6
x12: 5
x23: 12
x: If(x1<x12;x1;If(x2<x23; x2; x3))
3.2.
Una volta che l'ottimizzatore abbia definito per l'individuo le variabili di input primarie
(ossia quelle definite in 3.1.1. , 3.1.2. , 3.1.3. ) e calcolate quelle secondarie come descritte in
3.1.4. , esse devono essere scritte in un file che possa servire da input allo script.
Lo schema da seguire si trova nel file inputTemplate definito in GA_Parameters.txt; seguendo
questo schema, TOSCA creer un file il cui nome definito nella variabile inputFile.
Dati i parametri di input Parametro1, Parametro2, ParametroN, il loro valore sar sostituito
rispettivamente alle stringa <!Parametro1!>, <!Parametro2!>, <!ParametroN!> presenti nel
template.
Ad esempio, sia dato il file di template seguente:
La prima variabile vale <!a!>;
Se la seconda variabile vale <!b!>, allora dobbiamo avere che c=<!c!>
15
Capitolo 4. L'output
4.1.
Le variabili di output
Le variabili di output sono quelle variabili che vengono lette dall'ottimizzatore al termine del
lancio dello script per ogni individuo e che permettono di valutare l'obiettivo e i vincoli di
quest'ultimo. TOSCA permette la definizione di diversi tipi di variabili di output:
Parametri costanti;
Vincoli;
Obiettivo.
Essi vengono definiti nel file OutputVariables.txt, secondo la sintassi spiegata nei paragrafi
seguenti.
La doppia barra // introduce un commento. Tale commento pu essere posto a inizio o
internamente a una riga: nel secondo caso tutto ci che sta a destra della doppia barra verr
ignorato.
4.1.1.
Sono parametri ottenuti dal file avente nome outputFile (definito in GA_Parameters.txt),
secondo lo schema definito in outputTemplate. La redazione dello schema spiegata in 4.2. .
La sintassi , semplicemente:
NomeParametro
4.1.2.
La sintassi la stessa degli analoghi parametri di input (cfr. 3.1.1. , 3.1.4. ). possibile
utilizzare nelle espressioni anche parametri di input definiti in InputVariables.txt.
4.1.3.
Vincoli
La sintassi la seguente:
NomeVincolo: Espressione, Peso, LimiteInferiore, LimiteSuperiore
Espressione una qualsiasi espressione matematica (cfr. 3.1.4. ) che combini parametri di
input e di output (con eccezione di altri vincoli e e dell'obiettivo). Peso un valore numerico
permette di assegnare pesi diversi a vincoli diversi, nel caso in cui non tutti abbiano la stessa
importanza. LimiteInferiore e LimiteSuperiore sono i limiti entro cui il vincolo viene rispettato;
ponendoli sufficientemente vicini ci si pu avvicinare ad un vincolo di uguaglianza (altrimenti
16
4.1.4.
Obiettivo
La sintassi la seguente:
NomeObiettivo: Espressione, TipoObiettivo
Espressione una qualsiasi espressione matematica (cfr. 3.1.4. ) che combini parametri di
input e di output (con eccezione dei vincoli). TipoObiettivo pu assumere il valore maximize o
minimize, a seconda che l'obiettivo dell'analisi sia rispettivamente di massimizzare o di minimizzare
Espressione.
Al momento gestita la definizione di un solo obiettivo.
4.2.
Il file di output outputFile ottenuto dal lancio dello script deve avere una forma leggibile da
TOSCA, tramite le indicazioni contenute nel template outputTemplate. Ci significa che TOSCA
deve sapere esattamente dove andare a leggere le variabili di cui al punto 4.1.1. . Una possibilit
semplice potrebbe essere il fornire, per ogni variabile, la riga e la colonna di outputFile da cui
estrarre il valore numerico. Questa possibilit, per, rende il formato dell'output molto rigido.
Allo scopo di lasciare quanta pi libert allo script nella creazione del file di output,
l'estrazione dei dati da quest'ultimo viene effettuata facendo uso del concetto di riferimento. Un
riferimento una porzione di file (una stringa, anche su pi righe) che TOSCA deve ricercare nel
file di output. Ogni variabile di output (a cui viene associato un riferimento) viene ottenuta
estraendo il valore che si trova N righe e M colonne dopo il suo riferimento.
Definito quindi un certo numero di riferimenti, e definita per ogni variabile il riferimento
associato e i valori N e M, l'estrazione dei valori di output viene effettuata nel seguente modo:
1. Ricerca del riferimento associato nel file di output;
2. Estrazione del valore numerico che si trova N righe e M colonne dopo.
La sintassi del riferimento :
<!NomeRiferimento!b>CorpoRiferimento<!NomeRiferimento!e>
Il corpo del riferimento (la stringa che deve essere ricercata nel file di output) quanto si
trova fra <!NomeRiferimento!b> e <!NomeRiferimento!e>.
La sintassi della variabile (parametro) di output, invece, :
<!NomeParametro!NomeRiferimento!>
NomeParametro deve coincidere con uno dei parametri definiti come descritto in 4.1.1. .
NomeRiferimento, invece, deve coincidere con un riferimento definito precedentemente.
A titolo di esempio, si riporta il seguente template:
17
<!Rif1!b>XYData-1<!Rif1!e>
1.00000E+000
2.00000E+000
9.15576E+006
<!Smax!Rif1!>
<!Rif2!b>XYData-2<!Rif2!e>
0.00000E+000
1.00000E+000
0.00000E+000
<!Uz!Rif2!>
Smax=12.33610 6 e
XYData-1
9.15576E+006
12.336E+006
XYData-2
0.00000E+000
0.00000E+000
1.00000E+000 5.489E+000
XYData-1
1.00000E+000
9.15576E+006
2.00000E+000
12.336E+006
Bla Bla
Bla
Bla
.....
X
XYData-2
0.00000E+000
0.00000E+000
1.00000E+000 5.489E+000
18
5.2.
ID, ossia numero identificativo progressivo dell'individuo. Esso coincide con il nome
della sottocartella in cui sono contenuti i dati relativi all'analisi dell'individuo.
Label, ossia stringa numerica che identifica l'individuo. Essa pu essere pensata come
il cromosoma dell'individuo: Label uguali corrispondono a cromosomi uguali e,
specialmente giunti a convergenza, nella norma constatare che molti individui uguali
sono processati da TOSCA. In questo caso, analizzato il primo, i risultati di tutti gli
altri sono ottenuti per copia di questo, senza materialmente rilanciare l'analisi e quindi
risparmiando tempo di calcolo.
I parametri di input. I parametri ottenuti per combinazione non sono riportati, mentre
lo sono quelli dei tipi riportati in 3.1.1. , 3.1.2. , 3.1.3. .
I vincoli e l'obiettivo. I parametri costanti e quelli ottenuti per combinazione non sono
riportati.
Fitness, che coincide con la funzione obiettivo se i vincoli sono tutti verificati,
altrimenti se ne discosta proporzionalmente alla violazione di questi.
Feasable. Risulta pari a true se i vincoli sono rispettati, false in caso contrario.
I grafici
19
pu essere lanciato anche in modalit grafica (cliccando sull'icona) e verr chiesto di selezionare il
file Database.
21
Descrizione
Il plugin Straus7 stato creato per garantire un'interfaccia diretta fra TOSCA e il codice
commerciale per analisi con elementi finiti Straus7 [4]. Esso permette di ottimizzare un modello
esistente modificando alcuni parametri e estraendo i risultati successivi all'analisi.
Il concetto di base il seguente: le variabili definite in InputVariables.txt o in
OutputVariables.txt, se hanno un nome riconosciuto dal plugin (secondo la sintassi definita in 6.2. ),
vengono rispettivamente scritte o lette nel modello fornito dall'utente. Quest'ultimo, quindi, non si
deve pi preoccupare di redarre uno script di lancio per l'analisi del singolo individuo, ma fornisce
unicamente il modello su cui effettuare le modifiche.
Per quanto riguarda il file GA_Parameter.txt, l'unica differenza con quanto visto al Capitolo 2.
riguarda la variabile script, che deve contenere il nome del modello .st7 da ottimizzare. Inoltre,
sono ignorati i comandi inpuFile, outputFile, inputTemplate, outputTemplate, e non devono essere
predisposti template di input o output.
Il plugin stato testato (non estensivamente) utilizzando la release 2.3 di Straus7. L'unico tipo
di analisi per ora implementata quella statica lineare.
6.2.
COMMAND una stringa riconosciuta come comando dal software e indica cosa deve essere
modificato (coordinate nodali, forze, pre-tensioni, caratteristiche delle sezioni, ecc.). LABEL un
numero che indica, nel modello .st7, l'elemento (in senso lato, cio un nodo, un elemento, una
sezione, ecc.) a cui deve essere applicato COMMAND. LOADCASE la combinazione di carico
(stringa numerica; sono ordinati a partire da 1 prima i load cases e poi i combos) a cui deve essere
applicato COMMAND, mentre ATTRIBUTE un attributo (stringa testuale) che pu essere richiesto
in certi casi; LOADCASE e ATTRIBUTE sono mutualmente esclusivi. Infine, POSITIONRATIO la
posizione relativa (espressa in percentuale) del punto considerato all'interno di un elemento, e pu
essere utilizzato solo nell'estrazione di valori delle sollecitazioni da un elemento.
Riportiamo l'elenco dei comandi attualmente riconosciuti.
22
COMMAND
B
LABEL
LOADCASE
Numero
di propriet delle
beam
ATTRIBUTE
Connection
KS1
KS2
KA
KB1
KB2
KT
Point
contact
KIN
FRICT1
FRICT2
TENSMAX
Spring:
KA
KLAT
KT
VISCA
VISCLAT
VISCT
MASS
Sezioni:
D1
D2
D3
T1
T2
T3
A
I11
I22
J
SL1
SL2
SA1
SA2
XBAR
YBAR
ANGLE
MODULUS
POISSON
DENSITY
Cutoff
TENSMAX
COMPRMAX
Pipe
FLEXIBILITY
FLUIDDENSIT
YOOUTERDIA
METER
THICKNESS
23
Descrizione
Modifica o ottiene
l'attributo
ATTRIBUTE
della
propriet
LABEL
relativa agli elementi
beam
COMMAND
LABEL
LOADCASE
ATTRIBUTE
Descrizione
Numero
di propriet delle
plate
THICKM
THICKB
MODULUS
POISSON
DENSITY
Modifica o ottiene
l'attributo
ATTRIBUTE
della
propriet
LABEL
relativa agli elementi
plate
Numero
propriet
solidi
MODULUS
POISSON
DENSITY
Modifica o ottiene
l'attributo
ATTRIBUTE
della
propriet
LABEL
relativa agli elementi
solidi
Numero nodo
Modifica o ottiene la
coordinata x del nodo
LABEL
Numero nodo
Modifica o ottiene la
coordinata y del nodo
LABEL
Numero nodo
Modifica o ottiene la
coordinata z del nodo
LABEL
Numero
elemento beam
Ottiene la lunghezza
della beam LABEL
Numero
elemento plate
Ottiene l'area
plate LABEL
Numero
elemento
solido
Ottiene il volume
dell'elemento solido
LABEL
FX
Numero nodo
Modifica o ottiene la
forza concentrata in
direzione x del nodo
LABEL
nel
load
case/combo
LOADCASE
FY
Numero nodo
Modifica o ottiene la
forza concentrata in
direzione y del nodo
LABEL
nel
load
case/combo
LOADCASE
FZ
Numero nodo
Modifica o ottiene la
forza concentrata in
direzione z del nodo
LABEL
nel
load
case/combo
LOADCASE
di dei
24
della
COMMAND
LABEL
LOADCASE
ATTRIBUTE
Descrizione
MX
Numero nodo
Modifica o ottiene il
momento concentrato
di asse x del nodo
LABEL
nel
load
case/combo
LOADCASE
MY
Numero nodo
Modifica o ottiene il
momento concentrato
di asse y del nodo
LABEL
nel
load
case/combo
LOADCASE
MZ
Numero nodo
Modifica o ottiene il
momento concentrato
di asse z del nodo
LABEL
nel
load
case/combo
LOADCASE
PSB
Numero
Numero load elemento beam case
o
combinazione
Modifica o ottiene il
valore del pre-stress
sulla beam LABEL nel
load
case/combo
LOADCASE
PSP1
Numero
Numero load elemento plate case
o
combinazione
Modifica o ottiene il
valore del pre-stress
nella direzione locale
1 sulla plate LABEL
nel load case/combo
LOADCASE
PSP2
Numero
Numero load elemento plate case
o
combinazione
Modifica o ottiene il
valore del pre-stress
nella direzione locale
2 sulla plate LABEL
nel load case/combo
LOADCASE
PSS1
Numero
elemento
solido
Modifica o ottiene il
valore del pre-stress
nella direzione locale
1 sull'elemento solido
LABEL
nel
load
case/combo
LOADCASE
PSS2
Numero
elemento
solido
Modifica o ottiene il
valore del pre-stress
nella direzione locale
2 sull'elemento solido
LABEL
nel
load
case/combo
LOADCASE
25
COMMAND
LABEL
LOADCASE
ATTRIBUTE
Descrizione
PSS3
Numero
elemento
solido
Modifica o ottiene il
valore del pre-stress
nella direzione locale
3 sull'elemento solido
LABEL
nel
load
case/combo
LOADCASE
DX
Numero nodo
DY
Numero nodo
DZ
Numero nodo
RX
Numero nodo
RY
Numero nodo
RZ
Numero nodo
SF1
Numero
Numero load elemento beam case
o
combinazione
SF2
Numero
Numero load elemento beam case
o
combinazione
26
COMMAND
LABEL
LOADCASE
ATTRIBUTE
Descrizione
BM1
Numero
Numero load elemento beam case
o
combinazione
BM2
Numero
Numero load elemento beam case
o
combinazione
AX
Numero
Numero load elemento beam case
o
combinazione
TQ
Numero
Numero load elemento beam case
o
combinazione
FXX
Numero
Numero load elemento plate case
o
combinazione
FYY
Numero
Numero load elemento plate case
o
combinazione
FXY
Numero
Numero load elemento plate case
o
combinazione
27
COMMAND
LABEL
LOADCASE
ATTRIBUTE
Descrizione
FYZ
Numero
Numero load elemento plate case
o
combinazione
FXZ
Numero
Numero load elemento plate case
o
combinazione
MXX
Numero
Numero load elemento plate case
o
combinazione
MYY
Numero
Numero load elemento plate case
o
combinazione
MXY
Numero
Numero load elemento plate case
o
combinazione
SXX
Numero
elemento
solido
SYY
Numero
elemento
solido
28
COMMAND
LABEL
LOADCASE
ATTRIBUTE
Descrizione
SZZ
Numero
elemento
solido
SXY
Numero
elemento
solido
SYZ
Numero
elemento
solido
SXZ
Numero
elemento
solido
6.3.
Il pre-processing
Utilizzando il comando:
TOSCA.exe FileStraus.st7
29
Capitolo 7. Esempi
7.1.
Questa primo esempio minimizza la funzione di Himmelblau utilizzando uno script Python (
quindi necessario installare Python). La funzione di Himmelblau una funzione matematica molto
utilizzata come test per gli algoritmi di ottimizzazione. Per ulteriori dettagli si consulti [5].
7.1.1. GA_Parameters.txt
//Basic parameters for Genetic Algorithm Analysis
offspringPopSize: 100 //valore di default=30
numOfExperiments : 400 //valore di default=30
numberGenerations : 200 //valore di default=100
crossoverProb : 0.8 //valore di default=0.8
mutationProb : 0.038 // valore di default=0.035
crossoverPoints : 2 //valore di default=3
limitFeasableRatio: 1.0 //valore di default=1.0
penaltyPressure : 2.0 //valore di default=2.0
scalingPressure : 0.5 //valore di default=0.4
elitismParents : 3 //valore di default=3
randomSeed : 5
//valore di default=4
penaltyFunction : Statical //valore di default=Statical (altra
alternativa=GenChengDinamic)
DOE : Random
//per il momento unica alternativa possibile
CrossOver : MultiPoint //valore di default=MultiPoint (altra
alternativa=Directional)
Mutation : Aleatory
//valore di default=Aleatory (altra
alternativa=Directional)
Scaling : Normalizing
//valore di default=Normalizing (altre
alternative=LinearRank,ExponentialRank)
Selection : RouletteWheel
//valore di default=Tournament (altre
alternative=RouletteWheel,SUS)
Replacement : Elitism
//valore di default=Elitism (altre
alternative=Children,Competence)
projectLabel: Himmelblau //valore di default=Project01
inputFile : input.txt
//valore di default=input.txt
outputFile : output.txt //valore di default=output.txt
inputTemplate : InputTemplate.txt //valore di default=inputTempl.txt
outputTemplate : OutputTemplate.txt //valore di default=outputTempl.txt
script : script.bat
//valore di default=script.bat
7.1.2.
InputVariables.txt
//Input variables
x1:78,102,0.001
//minimo, massimo, step
x2:33,45,0.001
30
x3:27,45,0.001
x4:27,45,0.001
x5:27,45,0.001
7.1.3.
InputTemplate.txt
<!x1!>,<!x2!>,<!x3!>, <!x4!>,<!x5!>
7.1.4.
OutputVariables.txt
result
constr1
constr2
constr3
obj:result,minimize
vinc1:constr1,10,0.0,92.0
vinc2:constr2,10,90.0,110.0
vinc3:constr3,10,20.0,25.0
7.1.5.
OutputTemplate,txt
7.1.6.
Script.bat
7.1.7.
Himmelblau.py
#!/usr/bin/python
import sys
31
file="input.txt"
try:
f = open(file,"r")
except:
print "The file %s doesn't exist"%file
sys.exit()
lines=f.readlines()
f.close()
approssimazione=1.
x=[float(l.strip())/approssimazione for l in lines[0].split(',')]
result=0.
f=5.3578547*x[2]**2+0.8356891*x[0]*x[4]+37.293239*x[0]-40792.141
g1=85.334407+0.0056858*x[1]*x[4]+0.00026*x[0]*x[3]-0.0022053*x[2]*x[4]
g2=80.51249+0.0071317*x[1]*x[4]+0.0029955*x[0]*x[1]+0.0021813*x[2]**2
g3=9.300961+0.0047026*x[2]*x[4]+0.0012547*x[0]*x[2]+0.0019085*x[2]*x[3]
constraints=[g1,g2,g3]
outputfile="output.txt"
output="""
Questo e' un file di outputfile
Per prima mettiamo il risultato del calcolo:
Risultato: %f
Ora mettiamo i vincoli
"""%f
i=1
for c in constraints:
output+="\nConstraint %d= \n%f"%(i,c)
i+=1
f=open(outputfile,"w")
f.write(output)
f.close()
7.2.
Questo secondo esempio calcola il valore della funzione e dei vincoli utilizzando il solo
motore di calcolo interno a TOSCA, quindi senza la necessit di avere Python installato. Lo script
rinomina semplicemente il file di input, che diventa di output. I vantaggi sono notevoli anche per
velocit di esecuzione.
I files GA_Parameters.txt, InputVariables.txt sono identici al precedente esempio.
7.2.1.
InputTemplate.txt
x1=<!x1!>
x2=<!x2!>
x3=<!x3!>
x4=<!x4!>
x5=<!x5!>
7.2.2.
OutputVariables.txt
32
x1
x2
x3
x4
x5
//Combinazione delle variabili di output per obiettivi e vincoli
f:5.3578547*x3^2+0.8356891*x1*x5+37.293239*x1-40792.141,minimize
//expression, type
g1:85.334407+0.0056858*x2*x5+0.00026*x1*x4-0.0022053*x3*x5,10,0.0,92.0
//expression,weight, min, max
g2:80.51249+0.0071317*x2*x5+0.0029955*x1*x2+0.0021813*x3^2,10,90.0,110.0
g3:9.300961+0.0047026*x3*x5+0.0012547*x1*x3+0.0019085*x3*x4,10,20.0,25.0
7.2.3.
OutputTemplate.txt
<!ref1!b>x1=<!ref1!e><!x1!ref1!>
<!ref2!b>x2=<!ref2!e><!x2!ref2!>
<!ref3!b>x3=<!ref3!e><!x3!ref3!>
<!ref4!b>x4=<!ref4!e><!x4!ref4!>
<!ref5!b>x5=<!ref5!e><!x5!ref5!>
7.2.4.
Script.bat
33
Bibliografia
[1] Goldberg, D. E., Genetic algorithms in search, optimization and machine learning,
Addison-Wesley, 1989.
[2] Algoritmo Genetico, http://it.wikipedia.org/wiki/Algoritmo_genetico
[3] Mezura-Montesa E., Coello Coello C. A., Constraint-handling in nature-inspired
numerical optimization: Past, present and future, Swarm and Evolutionary
Computation 1 (2011) 173-194.
[4] Theoretical Manual. Theoretical background to the Straus7 finite element analysis
system. G+D Computing, Sydney-2004.
[5] Lucia P., Progettazione ottimale di ponti in struttura mista acciaio-calcestruzzo ad
asse rettilineo mediante algoritmi evolutivi, Tesi di dottorato in Ingegneria delle
infrastrutture, delle strutture e dei trasporti, Universit degli Studi di Trieste, XX ciclo.
34