24
Lez. 11 1 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per la progettazione di algoritmi: semplificazione e trasformazione algebrica, tecniche di Montecarlo Horner's rule simulated annealing Copyright © 2006-2009 by Claudio Salati.

Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

Embed Size (px)

Citation preview

Page 1: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

Lez. 11 1

Universita' di FerraraFacolta' di Scienze Matematiche, Fisiche e Naturali

Laurea Specialistica in Informatica

Algoritmi Avanzati

Strategie per la progettazione di algoritmi:semplificazione e trasformazione algebrica,

tecniche di Montecarlo

• Horner's rule• simulated annealing

Copyright © 2006-2009 by Claudio Salati.

Page 2: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

2

SEMPLIFICAZIONE ALGEBRICA

Strategia: una formula di calcolo e' espressa in forma diversa per ridurre (minimizzare) il numero di operazioni necessarie per calcolarla. 

• Esempio:

• abbiamo un polinomio P(x) di grado n rappresentato come vettore dei suoi coefficienti.

(compresi quelli di valore 0.0!)

• vogliamo valutarlo in un punto x

• Una prima maniera di scrivere il polinomio e' la seguente:

P(x) = pn * xn + pn-1 * xn-1 + … +p1 * x + p0

• che puo' ovviamente essere immediatamente utilizzata per realizzare la funzione desiderata.

Page 3: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

3

SEMPLIFICAZIONE ALGEBRICA

float evalP(int n, float P[], float x) {

// n e' il grado del polinomio P(x)

float y = P[0];

for (int i = 1; i <= n; i += 1)

y = y + P[i] * pow(x, i);

// end for

return (y);

}

• questa procedura si basa sull'utilizzo della funzione della libreria standard C

#include <math.h>

float pow(float x, float y);

che ritorna il valore xy

Page 4: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

4

SEMPLIFICAZIONE ALGEBRICA

• Il polinomio P(x) puo' pero' anche essere scritto come: 

P(x) = (…(pn * x + pn-1) * x + pn-2) * x +… +p1) * x + p0

secondo la regola di Horner.

• A partire da questa riscrittura possiamo scrivere una nuova funzione per il calcolo di P(x):

float hornerP(int n, float P[], float x) {

// n e' il grado del polinomio P(x)

float y = P[n];

for (int i = n-1; i >= 0; i -= 1)

y = y * x + P[i];

// end for

return (y);

}

Page 5: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

5

SEMPLIFICAZIONE ALGEBRICA

• Le due funzioni hanno lo stesso ordine di complessita'

ma solo a condizione che il calcolo di pow(x, i) avvenga in tempo costante!

• In ogni caso

• il calcolo di una potenza e' ovviamente molto piu' complesso del calcolo di un semplice prodotto;

• l'algoritmo evalP() richiede comunque anche il calcolo di un prodotto

(un prodotto e una potenza contro un prodotto e basta)

• N.B.: in effetti, nel calcolo secondo la regola di Horner, sarebbe stato piu’ conveniente memorizzare i coefficienti nel vettore in ordine di potenza decrescente (most significant digit first, o big endian, che e’ anche l’ordine di scrittura fisiologico), a differenza di quello che si e’ fatto nell’altro caso.

• N.B.: un numero in notazione posizionale puo’ essere visto come un polinomio valutato nella sua base, ma in questo caso le potenze sono decrescenti da sinistra a destra (la notazione e’ big endian)!

Page 6: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

6

SEMPLIFICAZIONE ALGEBRICA

Esercizio: la funzione della libreria standard (modulo stdlib)

int atoi(const char *s);

che converte in un intero la stringa numerica s (che noi assumiamo non negativa), puo' essere realizzata efficientemente utilizzando la Horner's rule:

la stringa s viene scandita• una sola volta• da sinistra (inizio, digit piu' pesante) a destra (fine, digit piu' leggero).

si considera sostanzialmente che la stringa • rappresenti un polinomio P(x) di grado strlen(s)-1, • in cui il k-esimo carattere della stringa (k numerato a partire da 0)

rappresenti il coefficiente del termine di grado strlen(s)-1-k• e con x==10

Notare che la lunghezza di s non e' nota (a priori), e non puo' essere calcolata da atoi() tramite strlen(), perche' cio' vorrebbe dire scandire tutta s.

Scrivere in C la funzione atoi().

Page 7: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

7

Horner’s rule: un’altra prospettiva

Prologo, da A. Natali:

"Come esempio di linguaggio, consideriamo la notazione posizionale dei numeri interi, che siamo cosi' abituati ad usare da confonderla spesso con il concetto di numero.

Se scriviamo la seguente configurazione di segni:

135

la maggior parte delle persone la leggera' pronunciando la parola centotrentacinque, modo sintetico per esprimere il significato inteso, cioe' il numero uno*cento+tre*dieci+cinque*uno.

Un numero costituisce pero' una astrazione che non va assolutamente confusa con la notazione che si usa per esprimerla. Ed infatti vi sono molteplici modi per denotare lo stesso numero."

Cosi' come ci sono diversi modi di leggere la stringa 135 (pur sempre vista come stringa in notazione posizionale in base 10) per arrivare ad assegnarle il significato centotrentacinque.

Page 8: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

8

Horner’s rule: un’altra prospettiva

• distinzione tra astrazione numero (di seguito espressa, come nelle righe precedenti, scrivendo il numero in linguaggio naturale) e notazione utilizzata per rappresentarlo

• ci si limita a considerare la notazione posizionale

• base B B simboli diversi nell'alfabeto

B = otto, A = {0, 1, 2, 3, 4, 5, 6, 7}

B = sedici, A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f}

B = due, A = {0, 1} o anche {-, |}

1310 = tredici, 138 = undici, 1316 = diciannove, 132 = errore

10112 = undici, |-|| = undici

• la frase an an-1 ... a1 a0 ha il seguente significato

an * Bn + an-1 * Bn-1 + ... + a1 * B1 + a0 * B0

ak e' una cifra B-esimale da zero a B-1

• il linguaggio dei numeri naturali espressi in notazione posizionale in base B coincide con A+

Page 9: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

9

Horner’s rule: un’altra prospettiva

• lo stesso linguaggio puo' essere descritto in forma costruttiva tramite una sua grammatica.

• esempio, per B = due

• grammatica 1 (regolare)

VT = {0, 1}

VN = {N}

S = N

P = { N ::= N 0 | N 1 | 0 | 1 }

• grammatica 2 (context-free)

VT = {0, 1}

VN = {N, C}

S = N

P = { N ::= N C | C

C ::= 0 | 1 }

Page 10: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

10

Horner’s rule: un’altra prospettiva

• l'albero di derivazione di una espressione ci fornisce informazioni addizionali sulla struttura reale dell'espressione (e.g. quali operatori sono operandi-sottoespressioni di quali altri operatori)

• l'albero di derivazione di una frase del nostro linguaggio ci puo' cioe' aiutare a interpretare la frase (ad assegnarle il significato)

  N / \ N C / \ | N C 1 / \ |N C 1| |C 0|1

Page 11: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

11

Horner’s rule: un’altra prospettiva

• in maniera alternativa all'interpretazione basata sulla notazione posizionale che leggerebbe la frase come

uno*duetre + zero*duedue + uno*dueuno + uno*duezero = undici

qui si vuole definire una diversa regola di lettura semantica basata sulla struttura sintattica della frase

• un numero N e' composto da una parte N e da una parte C, e cosi' ricorsivamente

N = 1011

N = N0(=101) C(1)

N = N0(=N1(=10) C(1)) C(1)

...

• A. Natali:

"Per stabilire il significato delle frasi di L(G), occorre fissare una corrispondenza tra ciascuna frase e uno specifico dominio di interpretazione, che in questo caso e' evidentemente il dominio NAT dei numeri naturali."

Page 12: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

12

Horner’s rule: un’altra prospettiva

• A. Natali: “Seguendo un approccio di tipo denotazionale, il significato delle frasi di L(G) puo' essere stabilito introducendo opportune funzioni di interpretazione per stabilire la corrispondenza tra ogni categoria sintattica (simbolo non terminale) e i numeri naturali."

• Cioe’ tra ogni produzione di ogni simbolo non terminale e i numeri naturali: cio' porta ad assegnare anche un significato ai simboli terminali.

• L(G) semantica denotazionale NAT

• C2NAT: C NAT

• C2NAT( 0 ) = zero

• C2NAT( 1 ) = uno

• N2NAT: N NAT

• N2NAT( C ) = C2NAT( C )

• N2NAT( N C ) = due * N2NAT( N ) + C2NAT( C )

• in grassetto sono indicati gli elementi del dominio di interpretazione, valori (zero, uno, due) e funzioni semantiche (* e +)

Page 13: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

13

Horner’s rule: un’altra prospettiva

• A. Natali: “Se la frase generata da N e' derivabile con la produzione N ::= C, il suo significato e' ricondotto alla funzione C2NAT.

• Se la frase generata da N e' derivabile con la produzione N ::= N C, il significato e' ricondotto alla struttura della frase moltiplicando per due il significato denotato dalla parte N e sommando il valore (significato) della parte C."

• N2NAT(1011) =

N2NAT(101) * due + C2NAT(1) =

(N2NAT(10) * due + C2NAT(1)) * due + uno =

((N2NAT(1) * due + C2NAT(0)) * due + uno) * due + uno =

((C2NAT(1) * due + zero) * due + uno) * due + uno =

((uno * due + zero) * due + uno) * due + uno =

(due * due + uno) * due + uno =

cinque * due + uno = undici

Page 14: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

14

Semantica di un linguaggio: descrizione formale

• non solo la sintassi di un linguaggio di programmazione puo' essere specificata in modo formale, ma anche la sua semantica

• tre metodi per specificare in modo formale la semantica di un linguaggio

• semantica interpretativa

• si da' un interprete modello (il metodo del metro campione dell'istituto Galileo Ferraris)

• semantica denotazionale• si associa una funzione di interpretazione ad ogni simbolo non

terminale della grammatica• semantica assiomatica

Page 15: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

15

Semantica delle espressioni

• grammatica per espressioni aritmetiche su numeri interi

E ::= E + T | T

T ::= T * F | F

F ::= ( E ) | N

• in grassetto sono segnati i simboli terminali

• questa grammatica si collega a quella che descrive il linguaggio dei numeri naturali (simbolo non terminale N)

• il dominio di interpretazione dei numeri naturali (in realta' interi) e' ovviamente anche il dominio di interpretazione per le espressioni aritmetiche qui considerate• E2NAT( E + T ) = E2NAT( E ) + T2NAT( T )• E2NAT( T ) = T2NAT( T )• T2NAT( T * F ) = T2NAT( T ) * F2NAT( F )• T2NAT( F ) = F2NAT( F )• F2NAT( ( E ) ) = E2NAT( E )• F2NAT( N ) = N2NAT( N )

Page 16: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

16

TRASFORMAZIONE ALGEBRICA

Strategia: per risolvere un problema A lo si trasforma in un problema correlato B, si risolve B, e si opera la trasformazione inversa del risultato. 

• Tutto dipende ovviamente dal costo relativo delle trasformazioni diretta e inversa, e dal costo del calcolo della soluzione per il problema trasformato B:

• esempio banale:

OPERAZIONI ARITMETICHE SU STRINGHE DI DIGIT CHE RAPPRESENTANO NUMERI INTERI O REALI ATTRAVERSO LA TRASFORMAZIONE IN RAPPRESENTAZIONE BINARIA O FLOATING-POINT

• esempio complesso (e importantissimo):

TRASFORMATA DI FOURIER

Page 17: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

17

TECNICHE DI MONTECARLO

Strategia: BASATE SULLA GENERAZIONE E L'UTILIZZO DI NUMERI RANDOM, POSSIBILMENTE CON DIVERSE DISTRIBUZIONI.

• PER SIMULAZIONI

• PER ALTRI TIPI DI PROBLEMI

Page 18: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

18

TECNICHE DI MONTECARLO

ESEMPIO 1: CALCOLARE LA MEDIA DI n NUMERI, CON n MOLTO GRANDE.

• L'ALGORITMO OVVIO E' O(n), PERCHE' DEVO CONSIDERARE TUTTI I NUMERI DELLA SEQUENZA

• MA SI PUO' FARE IN O(1) !

• SCELGO m << n (m FISSO, INDIPENDENTE DA n) NUMERI A CASO NELLA SEQUENZA, E FACCIO LA LORO MEDIA.

• OVVIAMENTE HO SOLO UN VALORE APPROSSIMATO, MA QUANTO VICINO AL VALORE MEDIO VERO?

• LA MEDIA ARITMETICA MA SU m VALORI E' UNA STIMA

• CORRETTA (MEDIA DELLE MA = VALOR MEDIO)

• CONSISTENTE (lim (MA) = VALOR MEDIO)

• EFFICIENTE (CONVERGE IN FRETTA)

mn

Page 19: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

19

MONTECARLO - SIMULATED ANNEALING

CONSIDERIAMO DI DOVERE POSIZIONARE DEI CHIP SU UNA SCHEDA O DELLE MACROFUNZIONI IN UN CHIP

• I SOTTOCIRCUITI DEBBONO ESSERE CONNESSI TRA LORO IN MODO NOTO, E

• LA DISTANZA RECIPROCA E' CONDIZIONATA DAL NUMERO DI INTERCONNESSIONI RECIPROCHE

• IL POSIZIONAMENTO DEVE TENERE CONTO DI VINCOLI QUALI

• VELOCITA'

• AREA PER DRIVER DELLE LINEE

• OCCUPAZIONE DI AREA DELLE CONNESSIONI

• IL NUMERO DI INCROCI DEVE ESSERE MINIMIZZATO

Page 20: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

20

MONTECARLO - SIMULATED ANNEALING

• SI DEVE MINIMIZZARE UNA FUNZIONE COSTO DEFINITA SU UN DOMINIO MULTIDIMENSIONALE (POSIZIONE DI TUTTI I SOTTOCIRCUITI).

• NON SOLO IL PROBLEMA E' OGGI INTRATTABILE,

• RISULTA FACILE CON LE EURISTICHE NOTE FARSI INTRAPPOLARE IN MINIMI LOCALI

(E' OVVIO CHE CIO' ACCADE CON UNA STRATEGIA GREEDY!)

la soluzione e': SIMULATED ANNEALING

(to anneal = temprare)

O CRISTALLIZZAZIONE SIMULATA

• ovvero, COME E' CHE SI FORMANO (mono-)CRISTALLI ANZICHE' SOLIDI AMORFI (o poli-cristalli)?

Page 21: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

21

MONTECARLO - SIMULATED ANNEALING

stato simulatedAnnealing(stato x, float temp) { // x : configurazione considerata nel dominio // degli stati possibili // temp : temperatura simulata del processo // y : configurazione verso la quale si // ipotizza di muoversi stato y; while (!acceptable(x)) { while (stabile(temp)) { y = nuovoStato(x); if (siAccetta(costo(y), costo(x), temp)) x = y; // end if } temp = decrementa(temp); } return (x);}

Page 22: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

22

MONTECARLO - SIMULATED ANNEALING

int siAccetta(float oldCost x, float newCost, float temp) { float delta = newCost - oldCost; if (delta<0.0) return (1); //1==true else { float probabilita = exp(-delta/temp); return ((float)rand()/(float)RAND_MAX) < probabilita)); }}

• una nuova configurazione e' sempre accettabile se il suo costo e' minore di quello della configurazione precedente

• una nuova configurazione puo' essere accettata anche se il suo costo e' maggiore o uguale del costo della configurazione precedente: ma cio' e' tanto meno probabile quanto piu' la temperatura si avvicina allo 0.

• cio' consente, all'inizio del processo di cristallizzazione, di allontanarsi da minimi locali

Page 23: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

23

MONTECARLO - SIMULATED ANNEALING

• IL CRITERIO DI RAFFREDDAMENTO E' REALIZZATO DALLE

PROCEDURE stabile() E decrementa():

• stabile() DETERMINA LA FREQUENZA DI

RAFFREDDAMENTO,

• decrementa() STABILISCE DI QUANTO SI ABBASSA

LA TEMPERATURA

• PIU' SI MANTIENE ELEVATA temp E PIU' SI DA' SPAZIO AL

SISTEMA DI RAGGIUNGERE LA CONFIGURAZIONE PIU'

PROBABILE, CHE E' QUELLA CON costo() MINIMO

• PER NUMERO DI PASSI INFINITO LA PROBABILITA' DI COVERGERE ALLA CONFIGURAZIONE DI COSTO MINIMO E' COMUNQUE 1

Page 24: Lez. 111 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Strategie per

24

MONTECARLO - SIMULATED ANNEALING

• PIU' ALTA E' LA TEMPERATURA INIZIALE E PIU' IN FRETTA SI RAGGIUNGE LA CONDIZIONE PIU' PROBABILE

• PER GARANTIRE LA CONVERGENZA IN NUMERO FINITO

DI PASSI LA POLITICA DI stabile()/decrementa()

DEVE ESSERE OPPORTUNA, CIOE' IL RAFFREDDAMNETO NON DEVE ESSERE TROPPO RAPIDO

• SE SI FA UNA SOLA MOSSA AD OGNI LIVELLO DI

TEMPERATURA (temp E' decrementa()-TO IN

CONTINUAZIONE) ALLORA decrementa() DEVE CALARE

DI POCO