4 minute read

A2.2 Codice per l’ottimizzazione della relazione matematica

clc %Definizione della matrice di partenza, in cui si sono affidati dei pesi a ciascun parametro andando a fare un confronto a coppie tra i parametri stessi : A=[1 3 5 2 2.5 4; 1/3 1 4 1/2.5 1/2 2.5; 1/5 1/4 1 1/3.5 1/3 1/2; 1/2 2.5 3.5 1 1.5 3; 1/2.5 2.5 3 1/1.5 1 3; 1/4 1/2.5 2 1/3 1/3 1];

%Tramite il ciclo for andiamo ad applicare il metodo matematico previsto dal processo AHP secondo la procedura “esatta” for c=1:8 N=A^2; A=N; M=sum(N'); Y=M./sum(M); W(:,c)=Y';

end

G=[W(:,1) W(:,5) W(:,7) W(:,8) W(:,7)-W(:,8)]

%Questo è l'autovettore che contiene il valore dei pesi trovati tramite il metodo 'esatto'. Autovettore_esatto= W(:,8)

%questa operazione mi permette di comprendere se la somma degli elementi dell'autovettore dia il valore atteso pari a 1. sum(Autovettore_esatto)

A2.2 Codice per l’ottimizzazione della relazione matematica

Con il codice che segue è possibile fare l’ottimizzazione della relazione matematica che caratterizza il modello presentato in questo lavoro. Infatti, dopo aver definito la relazione analitica, accompagnando ciascun parametro con il proprio peso, nel tempo si potrebbe avere bisogno di modificare il peso di un dato parametro, per esempio si potrebbe aumentare, diminuire il suo valore, o addirittura decidere di silenziarlo completamente. Variando il valore di un peso è necessario andare a ritoccare il valore di tutti gli altri per poter mantenere l’equilibrio del sistema. Pertanto, si è deciso di sviluppare un codice che aiutasse la modifica del peso di un generico parametro senza avere troppe problematiche nella ridefinizione di tutti gli altri pesi restanti. Il codice che snellisce questa attività viene presentato di seguito:

%Codice unico clc clear all

%Con le due variabili che seguono si decide se usare il cosice per Aumentare il valore di un dato peso, oppure se Silenziarlo/Ridurlo. Se vogliamo Silenziare/Ridurre dobbiamo mettere la variabile “Silenziare_Ridurre” uguale a uno, mentre la Variabile “Aumentare” pari a zero. Viceversa, ponendo la variabile “Silenziare_Ridurre” pari a zero e l’altra pari a uno allora il codice permetterà di aumentare il valore di un dato peso. Se entrambe le variabili sono uguali a zero o a uno allora il codice non produce nessuna informazione utile. Questa logica è stato possibile usarla sfruttando un doppio if. Silenziare_Ridurre=1; Aumentare=1;

vettore_pesi=[0.25 0.25 0.25 0.25]; % In questo vettore vanno messi i pesi che caratterizzano l’IPS; i valori numerici che troviamo scritti sono solo a titolo di esempio.

vettore_parametri=[2 1 2 1]; % In questo vettore invece vanno messi i valori assunti da ciascun parametro che caratterizza l’IPS in base alle condizioni al contorno che caratterizzano il case study in esame; i valori numerici che troviamo scritti sono solo a titolo di esempio.

Percent1=20; % In questa riga l’utente inserisce, in valore percentuale, di quanto vuole abbassare/aumentare il peso del parametro preso in considerazione. Chiaramente se uno vuole silenziare il parametro allora bisogna scegliere un valore percentuale pari a 100; i valori numerici che troviamo scritti sono solo a titolo di esempio.

Posizione_peso=1; % Con questa variabile l’utente sceglie quale parametro silenziare/Abbassare/Silenziare, per cui indica con un valore numerico intero consono la posizione del peso (che si desidera Alzare, Abbassare o Silenziare) all’interno del vettore contenuto nella variabile “vettore_pesi”; i valori numerici che troviamo scritti sono solo a titolo di esempio.

% Con le due righe che seguono si estrae il numero degli elementi che caratterizzano il vettore “vettore_pesi”. Questo valore assunto da n deve essere sempre uguale al numero degli elementi che caratterizzano il vettore “vettore_parametri”. n=size(vettore_pesi); n=n(:,2);

appog1=vettore_pesi(:,Posizione_peso); % In questa riga facciamo di modo che la variabile “appog1” contenga al suo interno il valore del peso contenuto nell’elemento, del vettore “vettore_pesi”, scelto dall’utente tramite la variabile “Posizione_peso”.

% Con la righa che segue si fa il calcolo parziale della percentuale che nelle righe successive verrà sommata o sottratta.

Percent2=(appog1/100)*Percent1;

% Con i due “if” posti in cascata è possibile scegliere quale parte del codice far girare in base al valore che assumono le due variabili: “Silenziare_Ridurre” e “Aumentare”. Se “Silenziare_Ridurre” è uguale a uno e “Aumentare” è uguale a zero allora viene

eseguita solamente quella parte di codice che segue il primo “if”, mentre se “Silenziare_Ridurre” è uguale a zero e “Aumentare” è uguale a uno allora verrà eseguito solamente la parte di codice che segue il secondo “if”.

if Silenziare_Ridurre==1 && Aumentare==0

% Con questa riga si applica la percentuale che si vuole sottrarre al valore del peso che interessa l’utente.

Percent3=appog1-Percent2;

vettore_pesi2=vettore_pesi; % “vettore_pesi2” è un semplice vettore di appoggio.

% Le tre righe che seguono mi permettono di modificare i pesi in base alla variazione prevista dall’utente nelle righe precedenti. X=ones(1,n); X=X.*Percent2/(n-1); vettore_pesi2=vettore_pesi2+X;

vettore_pesi2(:,Posizione_peso)=Percent3 % Definiamo e stampiamo a video il vettore che contiene i nuovi pesi.

vettore_pesi % Stampiamo a video il contenuto del vecchio vettore dei pesi, in maniera tale da avere un confronto con quanto ottenuto nella riga precedente del codice, in cui invece si ha il nuovo vettore dei pesi.

Sum1=sum(vettore_pesi2) % Il risultato di questo comando permetterà d comprendere se le quattro righe precedenti sono in grado di ottimizzare in maniera corretta la variazione del valore dei pesi prevista dell’utente. Le righe precedenti sono corrette quando il risultato di questa operazione è pari a 1 (quindi la variabile Sum1 deve essere pari a uno). Infatti, la somma dei valori dei pesi deve sempre essere pari a uno.

IPS_finale1=vettore_pesi2.*vettore_parametri %Con questa riga si effettua il calcolo dell’IPS, per cui otteniamo un vettore in cui i nuovi pesi vengono moltiplicati per il valore del parametro corrispondente.

IPS=vettore_pesi.*vettore_parametri % Con questa riga mostriamo i valori assunti dagli elementi che caratterizzavano il vecchio IPS.

else if Silenziare_Ridurre==0 && Aumentare==1

% Con questa riga si applica la percentuale che si vuole sommare al valore del peso che interessa l’utente. Percent3=appog1+Percent2; vettore_pesi2=vettore_pesi;

This article is from: