You are on page 1of 38

T.O.S.C.A.

Technical Optimizer for Structural and Civil engineering Analyses

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 2. L'algoritmo di analisi...............................................................................6


2.1. Il file GA_Parameters.txt..........................................................................................................6
2.2. Lista dei comandi......................................................................................................................6
2.2.1. Comandi relativi alla gestione dei files.............................................................................6
2.2.2. Comandi relativi agli Algoritmi Genetici..........................................................................8
2.3. Lo script di lancio...................................................................................................................11

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

Capitolo 5. Il database e i grafici..............................................................................19


5.1. Struttura del file di riepilogo...................................................................................................19
5.2. I grafici....................................................................................................................................19

Capitolo 6. Il plugin Straus7.....................................................................................22


6.1. Descrizione.............................................................................................................................22
6.2. Sintassi dei comandi...............................................................................................................22

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

Capitolo 1. Cos' T.O.S.C.A.


1.1.

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

crossover (ossia probabilit di un individuo di essere accoppiato ad un altro) valori


indicativi possono essere 80-100%.
Le possibilit offerte da TOSCA per i parametri anzidetti saranno mostrate nei prossimi
capitoli.

1.3.

Principi di funzionamento

Come detto al paragrafo 1.2. , il processo di ottimizzazione mediante algoritmi genetici un


processo iterativo che pu essere descritto dalla Figura 1.1.

Scelta dei parametri dell'algoritmo,


dei range per le variabili di input,
dei vincoli e della funzione obiettivo

Inizio

Generazione della popolazione


iniziale;
Contatore individuo i=0

Applicazione del cromosoma


all'i-esimo individuo

Valutazione della
funzione obiettivo, dei
vincoli e quindi del fitness
per l'individuo i-esimo

L'individuo l'ultimo della


popolazione?

Fine

i++

no

L'obiettivo stato raggiunto?

no
Valutazione, selezione,
Crossover, mutazione,
sostituzione

Creazione di una
nuova popolazione;
Contatore individuo i=0

Figura 1.1: Schema di funzionamento di TOSCA


Il passo iniziale consiste nella scelta da parte dell'utente dei parametri di input, dei parametri
di output (funzione obiettivo, vincoli) e dei parametri propri dell'algoritmo genetico. Ad ognuno di
questi parametri dedicato un capitolo nel seguito.
A questo punto viene generata la popolazione iniziale, ed ogni individuo di essa viene
analizzato, calcolando il valore assunto dall'obiettivo e dai vincoli. La combinazione di tali valori
(tramite la cosiddetta funzione di penalizzazione) fornisce il fitness dell'individuo, che tanto
migliore quanto pi alto (nel caso di massimizzazione) o pi basso (nel caso di minimizzazione) il
4

valore assunto dall'obiettivo e quanto pi i vincoli risultano soddisfatti.


Completata la generazione iniziale, agli individui calcolati sono applicati i veri e propri
algoritmi genetici, ossia selezione, mutazione, crossover e sostituzione, e viene generata la
successiva popolazione.
Il processo si completa quando il numero di generazioni calcolate raggiunge il valore imposto
in fase di input dall'utente.
Tutti i dati richiesti all'utente e quelli generati dal programma saranno presenti in una cartella
NomeCartella che viene richiesta come input dal programma. Essa pu essere fornita
interattivamente (tramite l'interfaccia che si apre quando si clicca sull'icona dell'eseguibile) o via
riga di comando. In tal caso, da un prompt possibile digitare il nome dell'eseguibile e il nome
cartella come mostrato in Figura 1.2.

Figura 1.2: Prompt di lancio


I file necessariamente presenti in NomeCartella sono:

Files relativi all'algoritmo: GA_Parameters.txt, script di lancio per la valutazione del


singolo individuo (definito in GA_Parameters.txt) (Capitolo 2. );

Files relativi all'input: InputVariables.txt,


GA_Parameters.txt) (Capitolo 3. );

Files relativi all'output: OutputVariables.txt, template di output (definito in


GA_Parameters.txt) (Capitolo 4. ).

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).

Capitolo 2. L'algoritmo di analisi


2.1.

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, ]

ValoreParametro1 pu essere di tipo numerico o testuale, a seconda di NomeParametro. In


taluni casi pu essere necessario inserire pi di un parametro: in tal caso saranno separati da una
virgola. Quando ci non previsto, indipendentemente dal numero di parametri inseriti separati da
virgola, solo il primo verr preso in considerazione.
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.
Se un parametro obbligatorio non riportato nel file, di esso verr assunto il valore di default.

2.2.

Lista dei comandi

2.2.1.

Comandi relativi alla gestione dei files

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

Nome del file di input


che sar creato da
TOSCA
prima
dell'analisi del singolo
individuo. Tale file
avr
la
struttura
definita
in
inputTemplate
e
conterr i dati di input
(cromosoma)
dell'individuo stesso.

outputFile

testuale

qualsiasi

output.txt

Nome del file di input


che sar letto da
TOSCA al termine
dell'analisi del singolo
individuo. Esso avr
la struttura definita in
outputTemplate
e
conterr i dati di
output che servono a
valutare
l'individuo
stesso.

inputTemplate

testuale

qualsiasi

inputTempl.txt

Nome del file di


template per l'input,
contenente lo schema
che
permette
a
TOSCA di trascrivere
il
cromosoma
dell'individuo in un
formato processabile
da script (cfr. 3.2. ).
Tale file deve essere
presente nella cartella
di lavoro.

outputTemplate

testuale

qualsiasi

outputTempl.txt

Nome del file di


template per l'output,
contenente lo schema
che
permette
a
TOSCA di leggere i
risultati
dell'analisi
sulll'individuo
in
modo da calcolare la
funzione obiettivo e i
vincoli (cfr. 4.2. ).
Tale file deve essere
presente nella cartella
di lavoro.

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.

Il processo di analisi del singolo individuo si articola nei seguenti passi:


1. Creazione della sottocartella il cui nome corrisponde all'ID (numero identificativo)
dell'individuo, all'interno della cartella il cui nome corrisponde al numero della
generazione. Esempio: se sono stati definiti 200 individui per la popolazione iniziale,
l'ottavo individuo della prima generazione (seconda popolazione) si trover in
NomeCartella\projectLabel\0001\0208\, con NomeCartella=nome fornito in fase di
lancio di TOSCA (cfr. 1.3. ).
2. Copia di script da NomeCartella alla sottocartella di cui al punto precedente.
3. Creazione di inputFile secondo lo schema definito in inputTemplate.
4. Lancio di script.
5. Lettura di outputFile (creato da script) secondo lo schema definito in outputTemplate.
6. Valutazione dell'individuo.
La definizione degli schemi per gli input e per gli output verr spiegato rispettivamente ai
paragrafi 3.2. e 4.2. .

2.2.2.

Comandi relativi agli Algoritmi Genetici

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

Compreso fra 0 e 1 0.4


se
Scaling:
Normalizing/Expone
ntialRank
Compreso fra 1 e 2
se
Scaling:
LinearRank

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

Numero di figli per


crossover; utilizzato
solo
quando
CrossOver: Discrete

crossoverPoints

numerico

Compreso fra 1 e 3
(offspringPopSize-1)

Numero di punti di
rottura; utilizzato solo
quando
CrossOver:
MultiPoint

intervalModifier

numerico

>0

0.2

Rapporto fra lo spazio


possibile
per
la
creazione dei figli e
distanza fra i genitori;
utilizzato solo quando
CrossOver:
ProbArithmetic
|
Mixed

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

Se true, alla fine


dell'analisi
viene
generato un file di
restart
projectLabel.doe.txt,
che
pu
essere
utilizzato come DOE
di partenza per una
successiva analisi (cfr.
DOE)

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

Frazione iniziale del


raggio
delle
sottopopolazioni

maxSubPopRadiusRatio numerico

Compreso fra 0 e 1

1.0

Frazione finale del


raggio
delle
sottopopolazioni

limitFeasableRatio

numerico

>1

1.0

Rapporto fra fitness e


funzione obiettivo tale
per cui un individuo
pu essere considerato
ammissibile
(feasable); utilizzato
unicamente per la
creazione dei due
diagrammi al termine
dell'analisi

randomSeed

numerico

>0

Seme per l'algoritmo


di scelta casuale.
Uguali
semi
permettono
di
replicare le analisi.

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

In esso viene lanciato un eseguibile NomeEXE.exe i cui argomenti sono Argument1


Argument2 ArgumentN. inteso che alla fine dell'esecuzione dello script, nella cartella dovr
essere presente un file outputFile da cui l'ottimizzatore possa leggere il valore delle variabili di
output calcolate.
Esempi di script saranno presentati al Capitolo 7. .

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;

Parametri variabili in un intervallo;

Parametri variabili secondo una tabella;

Parametri ottenuti per combinazione dei precedenti.

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.

Parametri variabili in un intervallo

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.

Parametri variabili secondo una tabella

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:

La prima riga rappresenta l'intestazione della tabella;

13

Ogni colonna, sia dell'intestazione che del corpo della tabella separata dalle altre
mediante virgola;

il simbolo // rappresenta un commento e tutto ci che si trova a destra di esso non


viene letto;

Un esempio viene riportato nel seguito:


//Tabella delle dimensioni degli angolari a lati uguali
//UNI 5783-73
//I dati sono in mm
D1,D2,T1,T2
45,45,5,5
50,50,5,5
60,60,6,6
70,70,7,7
80,80,8,8
90,90,9,9
100,100,10,10
110,110,10,10
120,120,10,10
120,120,15,15
150,150,15,15
180,180,15,15
200,200,20,20

Testo 2: Esempio di tabella per variabili di input


Supponiamo che NomeParametro (definito in InputVariables.txt) sia Ang. TOSCA sceglier,
come variabile di input per l'individuo, una delle possibilit offerte dalla tabella: poich le colonne
sono quattro, sono ora disponibili quattro variabili di input, denominate Ang_D1, Ang_D2, Ang_T1,
Ang_T2, legate fra loro dal fatto che sulla tabella si trovano sulla stessa riga. Di conseguenza,
sempre con riferimento a Testo 2, non possibile che se Ang_D1 assume il valore 100, Ang_T2 sia
pari a 7, ma invece dovr essere pari a 10.
Questa opzione d la possibilit di collegare fra loro variabili che non sono completamente
libere, quali per esempio le dimensioni di profilati industriali. possibile anche definire parametri i
cui range di variabilit non possono essere definiti in maniera semplice come in 3.1.2. , come per
esempio i tondini per c.a. (in tal caso la tabella conterr una sola colonna).

3.1.4.

Parametri ottenuti per combinazione

La sintassi la seguente:
NomeParametro: Espressione

Espressione un'espressione matematica nella quale possono essere contenuti parametri


definiti come in precedenza. Sono ad oggi disponibili le seguenti costanti e funzioni:

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

Funzioni unarie Log, Abs;

Funzioni binarie Min, Max;

Funzione ternaria If.

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))

Testo 3: Esempio di istruzione If nidificata


Nell'esempio riportato la variabile x assumer il valore 7.

3.2.

Redazione dello schema (template) di input

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!>

Testo 4: Esempio di file di template per l'input


Se l'individuo caratterizzato da i parametri di input a=3.5, b=10, c=1.7, TOSCA creer un
file di input:
La prima variabile vale 3.5;
Se la seconda variabile vale 10, allora dobbiamo avere che c=1.7

Testo 5: File di input creato a partire dall'esempio


E' chiaro che avendo un template corretto, possibile scrivere un file di input di qualunque
formato (purch sia testuale), lasciando la massima libert all'utente.
Nel template, uno stesso parametro di input pu essere scritto anche pi di una volta.

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 ottenuti dal file di output;

Parametri costanti;

Parametri ottenuti per combinazione dei precedenti;

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.

Parametri ottenuti dal file di output

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.

Parametri costanti e ottenuti per combinazione

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

impossibile da rappresentare in TOSCA).

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.

Redazione dello schema (template) di output

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!>

Testo 6: Esempio di output template


Esso permette di estrarre le variabili Smax e Uz, cercando rispettivamente nel file di output i
riferimenti Rif1 e Rif2.
Se il file di output si presenta come in Testo 7, TOSCA otterr
Uz=5.489 .
X
1.00000E+000
2.00000E+000

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

Testo 7: Primo esempio di file di output


Questa soluzione permette di fornire grande libert nella creazione del file di output da parte
dello script, in quanto le variabili di interesse sono ancorate ad un blocco di file (il riferimento) la
cui posizione non deve essere nota a priori. Infatti, l'estrazione sarebbe andata a buon fine anche in
presenza di un file come in Testo 8.
Altro testo
precedente
X

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

Testo 8: Secondo esempio di file di output

18

Capitolo 5. Il database e i grafici


5.1.

Struttura del file di riepilogo

Il file di riepilogo, o database, il file projectLabel.txt. Esso strutturato in forma tabellare


(con colonne separate da virgole), e contiene le informazioni relative a tutti gli individui analizzati
da TOSCA. Il file viene aggiornato costantemente, e ci permette di controllare l'analisi nel corso
del suo sviluppo.
Le colonne della tabella sono:

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.

Time. Tempo progressivo di fine analisi dell'individuo, a partire dal lancio


dell'ottimizzazione.

I grafici

Al termine dell'analisi di ottimizzazione sono creati i file projectLabel_complete.jpg e


projectLabel_feasable.jpg, i quali contengono i grafici riepilogativi. Essi hanno in ascissa l'ID
dell'individuo, in ordinata il valore della funzione obiettivo e contengono rispettivamente tutti gli
individui analizzati e solo quelli ammissibili.
Di default, per ammissibili si intendono quelli che presentano un rapporto fitness/obiettivo
pari all'unit, ossia hanno tutti i vincoli rispettati. possibile cambiare questo vincolo modificando
il parametro limitFeasableRatio nel file GA_Parameters.txt (cfr. 2.2.2. ).
I grafici riportano anche il miglior individuo finora trovato, in termini di fitness, riportando ID
e obiettivo.

19

Figura 5.1: Esempio di grafico contenente tutti gli individui

Figura 5.2: Esempio di grafico contenente solo gli individui


ammissibili
Nel pacchetto di TOSCA presente anche l'eseguibile History_plot.exe, che quello che si
occupa effettivamente di creare i file grafici. Esso pu essere lanciato manualmente dall'utente con
analisi in corso da prompt tramite la seguente sintassi:
History_plot.exe limitFeasableRatio typeObjective Database

dove limitFeasableRatio ha il significato spiegato in 2.2.2. , typeObjective assume il valore


minimize o maximize a seconda del tipo di obiettivo e Database il file descritto in 5.1. .
Con i valori di default limitFeasableRatio=1.0, typeObjective=minimize, History_plot.exe
20

pu essere lanciato anche in modalit grafica (cliccando sull'icona) e verr chiesto di selezionare il
file Database.

21

Capitolo 6. Il plugin Straus7


6.1.

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.

Sintassi dei comandi


Le variabili riconosciute da TOSCA hanno la struttura seguente:
COMMAND_LABEL[_LOADCASE|ATTRIBUTE][_POSITIONRATIO]

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

Numero load case


o
combinazione

Modifica o ottiene la
forza concentrata in
direzione x del nodo
LABEL
nel
load
case/combo
LOADCASE

FY

Numero nodo

Numero load case


o
combinazione

Modifica o ottiene la
forza concentrata in
direzione y del nodo
LABEL
nel
load
case/combo
LOADCASE

FZ

Numero nodo

Numero load case


o
combinazione

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

Numero load case


o
combinazione

Modifica o ottiene il
momento concentrato
di asse x del nodo
LABEL
nel
load
case/combo
LOADCASE

MY

Numero nodo

Numero load case


o
combinazione

Modifica o ottiene il
momento concentrato
di asse y del nodo
LABEL
nel
load
case/combo
LOADCASE

MZ

Numero nodo

Numero load case


o
combinazione

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

Numero load case


o
combinazione

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

Numero load case


o
combinazione

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

Numero load case


o
combinazione

Modifica o ottiene il
valore del pre-stress
nella direzione locale
3 sull'elemento solido
LABEL
nel
load
case/combo
LOADCASE

DX

Numero nodo

Numero load case


o
combinazione

Ottiene il valore dello


spostamento lungo x
sul nodo LABEL nel
load
case/combo
LOADCASE

DY

Numero nodo

Numero load case


o
combinazione

Ottiene il valore dello


spostamento lungo y
sul nodo LABEL nel
load
case/combo
LOADCASE

DZ

Numero nodo

Numero load case


o
combinazione

Ottiene il valore dello


spostamento lungo z
sul nodo LABEL nel
load
case/combo
LOADCASE

RX

Numero nodo

Numero load case


o
combinazione

Ottiene il valore della


rotazione attorno a x
sul nodo LABEL nel
load
case/combo
LOADCASE

RY

Numero nodo

Numero load case


o
combinazione

Ottiene il valore della


rotazione attorno a y
sul nodo LABEL nel
load
case/combo
LOADCASE

RZ

Numero nodo

Numero load case


o
combinazione

Ottiene il valore della


rotazione attorno a z
sul nodo LABEL nel
load
case/combo
LOADCASE

SF1

Numero
Numero load elemento beam case
o
combinazione

Ottiene il valore dello


sforzo di taglio in
direzione
1
alla
posizione
POSITIONRATIO
sulla beam LABEL nel
load
case/combo
LOADCASE

SF2

Numero
Numero load elemento beam case
o
combinazione

Ottiene il valore dello


sforzo di taglio in
direzione
2
alla
posizione
POSITIONRATIO
sulla beam LABEL nel
load
case/combo
LOADCASE

26

COMMAND

LABEL

LOADCASE

ATTRIBUTE

Descrizione

BM1

Numero
Numero load elemento beam case
o
combinazione

Ottiene il valore dello


momento
flettente
lungo l'asse 1 alla
posizione
POSITIONRATIO
sulla beam LABEL nel
load
case/combo
LOADCASE

BM2

Numero
Numero load elemento beam case
o
combinazione

Ottiene il valore dello


momento
flettente
lungo l'asse 2 alla
posizione
POSITIONRATIO
sulla beam LABEL nel
load
case/combo
LOADCASE

AX

Numero
Numero load elemento beam case
o
combinazione

Ottiene il valore dello


sforzo assiale alla
posizione
POSITIONRATIO
sulla beam LABEL nel
load
case/combo
LOADCASE

TQ

Numero
Numero load elemento beam case
o
combinazione

Ottiene il valore del


momento torcente alla
posizione
POSITIONRATIO
sulla beam LABEL nel
load
case/combo
LOADCASE

FXX

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore dello


sforzo
assiale
in
direzione x locale al
centroide della plate
LABEL
nel
load
case/combo
LOADCASE

FYY

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore dello


sforzo
assiale
in
direzione y locale al
centroide della plate
LABEL
nel
load
case/combo
LOADCASE

FXY

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore dello


sforzo di taglio xy
secondo il riferimento
locale al centroide
della plate LABEL nel
load
case/combo
LOADCASE

27

COMMAND

LABEL

LOADCASE

ATTRIBUTE

Descrizione

FYZ

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore dello


sforzo di taglio yz
secondo il riferimento
locale al centroide
della plate LABEL nel
load
case/combo
LOADCASE

FXZ

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore dello


sforzo di taglio xz
secondo il riferimento
locale al centroide
della plate LABEL nel
load
case/combo
LOADCASE

MXX

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore del


momento
flettente
attorno all'asse x
locale al centroide
della plate LABEL nel
load
case/combo
LOADCASE

MYY

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore del


momento
flettente
attorno all'asse y
locale al centroide
della plate LABEL nel
load
case/combo
LOADCASE

MXY

Numero
Numero load elemento plate case
o
combinazione

Ottiene il valore del


momento torcente xy
secondo il riferimento
locale al centroide
della plate LABEL nel
load
case/combo
LOADCASE

SXX

Numero
elemento
solido

Numero load case


o
combinazione

Ottiene il valore della


tensione xx secondo il
riferimento locale al
centroide
dell'elemento solido
LABEL
nel
load
case/combo
LOADCASE

SYY

Numero
elemento
solido

Numero load case


o
combinazione

Ottiene il valore della


tensione yy secondo il
riferimento locale al
centroide
dell'elemento solido
LABEL
nel
load
case/combo
LOADCASE

28

COMMAND

LABEL

LOADCASE

ATTRIBUTE

Descrizione

SZZ

Numero
elemento
solido

Numero load case


o
combinazione

Ottiene il valore della


tensione zz secondo il
riferimento locale al
centroide
dell'elemento solido
LABEL
nel
load
case/combo
LOADCASE

SXY

Numero
elemento
solido

Numero load case


o
combinazione

Ottiene il valore della


tensione xy secondo il
riferimento locale al
centroide
dell'elemento solido
LABEL
nel
load
case/combo
LOADCASE

SYZ

Numero
elemento
solido

Numero load case


o
combinazione

Ottiene il valore della


tensione yz secondo il
riferimento locale al
centroide
dell'elemento solido
LABEL
nel
load
case/combo
LOADCASE

SXZ

Numero
elemento
solido

Numero load case


o
combinazione

Ottiene il valore della


tensione xz secondo il
riferimento locale al
centroide
dell'elemento solido
LABEL
nel
load
case/combo
LOADCASE

6.3.

Il pre-processing
Utilizzando il comando:
TOSCA.exe FileStraus.st7

con FileStraus.st7 nome di un file Straus7 contenente un modello, possibile effettuare un


preprocessing del modello stesso. L'operazione genera un file InputVariables.txt di esempio, in cui
le propriet degli elementi beam, plate e solidi sono descritti come costanti secondo la sintassi
definita in 6.2. .

29

Capitolo 7. Esempi
7.1.

La funzione di Himmelblau: prima opzione

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.

//expression,weight, min, max

OutputTemplate,txt

Questo e' un file di outputfile


Per prima mettiamo il risultato del calcolo:
<!ref1!b>Risultato: <!ref1!e><!result!ref1!>
Ora mettiamo i vincoli
<!ref2!b>Constraint 1= <!ref2!e>
<!constr1!ref2!>
Constraint 2=
<!constr2!ref2!>
Constraint 3=
<!constr3!ref2!>

7.1.6.

Script.bat

copy "C:\Documents and Settings\s116917\My Documents\Corrado\DicaOptim\himmelblau.py"


START /WAIT /B C:\Python25\python.exe himmelblau.py
EXIT /b 0

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.

La funzione di Himmelblau: seconda opzione

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

//Variabili di output da ottenere

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

copy input.txt output.txt


EXIT /b 0

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

You might also like