Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGioacchino Bonetti Modificato 8 anni fa
1
ESERCITAZIONE DUE Parte III – Dimensionamento rete di distribuzione Si dimensioni la rete di distribuzione idrica schematizzata in figura al fine di minimizzare i costi garantendo un carico minimo di 25 m in tutti i nodi. A tal fine si implementi in ambiente Matlab un codice per il progetto ottimale a minimo costo con vincolo sul rispetto dei carichi minimi nodali basato sull’accoppiamento di un algoritmo genetico con il metodo del gradiente implementato nell’ambito della Parte II della Esercitazione 2. Si riporti: il codice l’andamento della funzione obiettivo i diametri di progetto i carichi in tutti i nodi ottenuti utilizzando i diametri di progetto
2
La rete è alimentata da un serbatoio (Serb) a carico imposto pari a 30 m. Le caratteristiche della rete, quote e richieste idriche dei nodi a carico incognito e lunghezze e scabrezze delle condotte sono riportate nel file Dati_rete_dimensionamento.xlsx I diametri utilizzabili e i relativi costi sono D [mm]75100150200250300350400500600 Costo [€/m]227231272299328360399439503581
3
Programma main clear all close all clc global NT NN q H0 A10 A12 A21 L ks N n global costi Hmin Dprog global H Q %-------------------------------------------------------------------------% %Dati Dprog=[75 100 150 200 250 300 350 400 500 600]; nDprog=length(Dprog); %costi al m in € %Dprog=[ 75 100 150 200 250 300 350 400 500 600]; costi= [227 231 272 299 328 360 399 439 503 581]; Hmin=25; load tronchi.txt load nodi.txt %-------------------------------------------------------------------------% %ricostruisco la matrice topologica della rete …. %-------------------------------------------------------------------------% %Parametri Algoritmo genetico nind=200; ngen=500; npar=NT; Pmut=0.05; % prob del 5% %-------------------------------------------------------------------------% %Range parametri par_min=ones(1,NT); par_max=ones(1,NT)*nDprog; %-------------------------------------------------------------------------%
4
%Popolazione iniziale for i=1:nind for j=1:npar Chrom(i,j)=round(par_min(j)+rand*(par_max(j)-par_min(j))); end %Valuto ciascun individuo della popolazione iniziale for i=1:nind ValFO(i)=FO(Chrom(i,:)); end ChromFO=[Chrom, ValFO']; %-------------------------------------------------------------------------% for g=1:ngen %associo a ciascun individuo fitness=1/FO FIT=1./ChromFO(:,npar+1); ChromFO(:,npar+2)=FIT; %associo a ciascun individuo una probabilità P ChromFO=sortrows(ChromFO, npar+2); %riordina le righe in base alla colonna npar+2 (fitness) in senso crescente Prob=2/nind*([1:nind]-1)/(nind-1); Probcum=[cumsum(Prob)]; %Genero la nuova popolazione ChromNEW=[];
5
for i=1:(nind/2); %seleziono una coppia di genitori x1=rand; posg1=max(find(Probcum<x1)); g1=ChromFO(posg1,1:npar); x2=rand; … %Cross-over … %Mutazione … end %Chiusura ciclo generazione nuova popolazione %Valuto ciascun individuo della nuova popolazione for i=1:nind ValFO(i)=FO(ChromNEW(i,:)); end ChromNEWFO=[ChromNEW, ValFO']; %Elitismo … ChromFO=ChromNEWFO; bestFO(g)=min(ChromNEWFO(:,npar+1)); end %Chiusura ciclo sulle generazioni [val,pos_migl]=min(ChromFO(:,npar+1)); par_ott=ChromFO(pos_migl,1:npar) %-------------------------------------------------------------------------% %Simulazioni di verifica CostoBest=FO(par_ott); %-------------------------------------------------------------------------% figure(1) plot(bestFO)
6
function costTot=FO(xD) global NT NN q H0 A10 A12 A21 L ks N n global costi Hmin Dprog global H Q D(:,1)=Dprog(xD)/1000; costo=sum(costi(xD).*L'); %-------------------------------------------------------------------------% %metodo gradiente ….. %-------------------------------------------------------------------------% violazioni=find(H<Hmin); violTot=sum(Hmin-H(violazioni)); costTot=costo*(1+violTot);
7
costo generazione
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.