Untitled
unknown
matlab
6 months ago
19 kB
1
Indexable
Never
%Desarrollado por Juan Andrés Betancourt – Universidad Nacional de Colombia %Ingeniería Química – Ingeniería de Procesos %Algoritmo Genético de Optimización %3 variables de optimización %Cruce, mutación y selección elitista %Tamaño de población n = 80; %Probabilidad operadores cru = 0.9; mut = 0.1; %Generaciones gen = 20; %Rangos de variables xinf = 0.29; xsup = 0.33; yinf = 0.05; ysup = 0.15; zinf = 25; zsup = 35; %Abrir Aspen Plus V10 Aspen = actxserver('Apwn.Document.36.0'); [stat,mess]=fileattrib; Simulation_Name = 'OPT'; Aspen.invoke('InitFromArchive2',[mess.Name '\' Simulation_Name '.bkp']); Aspen.Visible = 0; Aspen.SuppressDialogs = 1; %Generar una población aleatoria de tamaño n N = cell(n,1); for k=1:length(N) %Generar una matriz aleatoria 3x3 %Donde cada entrada es un entero aleatorio del 0 al 9 I = zeros(3,3); for i=1:3 for j=1:3 I(i,j)=randi([0,9]); end end N{k}=I; end %Datos sobre unidades %F3,5,8,12,24 en kg/s %r3,4,5,12,14 en kg/m3 %QH1,2,3,4,5,6,7,REB,COND,WP1 en kW %T6,8,7,11,23,24,16,17,29,30,31,32,18,33 en °C %F28,22 en lb/h %r28,22 en lb/ft3 %F19 en lb/min %r19 en lb/gal %BR en kmol/h %F,F30CO2,NH3,F32CO2,NH3 en ton/h %WW en fracción másica %Inicio de algoritmo genético d = 1 best=zeros(gen,1); bestind=cell(gen,1); while d<=gen %Realizar Cruce %Crear la población de hijos Nh = cell(n,1); for k=1:cru*n/2 %Escoger dos individuos al azar: tag_I1 = randi([1,n]); tag_I2 = randi([1,n]); while tag_I1 == tag_I2 tag_I2 = randi([1,n]); end I1 = N{tag_I1}; I2 = N{tag_I2}; %Escoger variable a cruzar col = randi([1,3]); %Escoger punto de cruce fil = randi([1,2]); %Cruzar I1 con I2 I12 = I1; I12(fil+1:size(I12),col)=I2(fil+1:size(I12),col); I21 = I2; I21(fil+1:size(I21),col)=I1(fil+1:size(I21),col); %Agregar a población de hijos Nh{k}=I12; Nh{k+cru*n/2}=I21; end %Realizar Mutación for k=1:mut*n %Escoger individuo al azar tag_I1 = randi([1,n]); I1 = N{tag_I1}; %Escoger punto de mutación col = randi([1,3]); I11 = I1; if I11(size(I11,1),col)~=9 I11(size(I11,1),col)=I11(size(I11,1),col)+1; else I11(size(I11,1),col)=0; end %Agregar a población de hijos Nh{k+cru*n}=I11; end %Evaluar la aptitud de padres e hijos M_APT = zeros(2*n,1); for k=1:n %Aptitud Padres x_=(N{k}(1,1)*100+N{k}(2,1)*10+N{k}(3,1))/1000; y_=(N{k}(1,2)*100+N{k}(2,2)*10+N{k}(3,2))/1000; z_=(N{k}(1,3)*100+N{k}(2,3)*10+N{k}(3,3))/1000; x = xinf+x_*(xsup-xinf); y = yinf+y_*(ysup-yinf); z = zinf+z_*(zsup-zinf); %Aspen.Reinit Aspen.Application.Tree.FindNode('\Data\Blocks\R-101\Input\CONV\2').value=x; Aspen.Application.Tree.FindNode('\Data\Blocks\S1\Input\FRAC\21').value=y; Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Input\T1').value=z; Run2(Aspen.Engine); F3=Aspen.Application.Tree.FindNode('\Data\Streams\3\Output\MASSFLMX\MIXED').value/3600; F5=Aspen.Application.Tree.FindNode('\Data\Streams\5\Output\MASSFLMX\MIXED').value/3600; F8=Aspen.Application.Tree.FindNode('\Data\Streams\8\Output\MASSFLMX\MIXED').value/3600; F12=Aspen.Application.Tree.FindNode('\Data\Streams\12\Output\MASSFLMX\MIXED').value/3600; F24=Aspen.Application.Tree.FindNode('\Data\Streams\24\Output\MASSFLMX\MIXED').value/3600; F28=Aspen.Application.Tree.FindNode('\Data\Streams\28\Output\MASSFLMX\MIXED').value*2.2046; F22=Aspen.Application.Tree.FindNode('\Data\Streams\22\Output\MASSFLMX\MIXED').value*2.2046; F19=Aspen.Application.Tree.FindNode('\Data\Streams\19\Output\MASSFLMX\MIXED').value*2.2046/60; r3=Aspen.Application.Tree.FindNode('\Data\Streams\3\Output\RHOMX_MASS\MIXED').value; r5=Aspen.Application.Tree.FindNode('\Data\Streams\5\Output\RHOMX_MASS\MIXED').value; r8=Aspen.Application.Tree.FindNode('\Data\Streams\8\Output\RHOMX_MASS\MIXED').value; r12=Aspen.Application.Tree.FindNode('\Data\Streams\12\Output\RHOMX_MASS\MIXED').value; r24=Aspen.Application.Tree.FindNode('\Data\Streams\24\Output\RHOMX_MASS\MIXED').value; r28=Aspen.Application.Tree.FindNode('\Data\Streams\28\Output\RHOMX_MASS\MIXED').value*2.2046/35.3147; r22=Aspen.Application.Tree.FindNode('\Data\Streams\22\Output\RHOMX_MASS\MIXED').value*2.2046/35.3147; r19=Aspen.Application.Tree.FindNode('\Data\Streams\19\Output\RHOMX_MASS\MIXED').value*2.2046/264.1720; QH1=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-101\Output\QCALC').value*4.184*10^6/3600; QH2=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-102\Output\QCALC').value*4.184*10^6/3600; QH3=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-103\Output\QCALC').value*4.184*10^6/3600; QH4=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-104\Output\QCALC').value*4.184*10^6/3600; QH5=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-105\Output\QCALC').value*4.184*10^6/3600; QH6=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-106\Output\QCALC').value*4.184*10^6/3600; QH7=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-107\Output\QCALC').value*4.184*10^6/3600; QREB=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\REB_DUTY').value*4.184*10^6/3600; QCOND=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\COND_DUTY').value*4.184*10^6/3600; WP1=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\COND_DUTY').value; BR=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\BOT_VFLOW').value; F=Aspen.Application.Tree.FindNode('\Data\Streams\27\Output\MASSFLOW\MIXED\UREA').value/1000; T6 = Aspen.Application.Tree.FindNode('\Data\Streams\6\Output\TEMP_OUT\MIXED').value; T8 = Aspen.Application.Tree.FindNode('\Data\Streams\8\Output\TEMP_OUT\MIXED').value; T7 = Aspen.Application.Tree.FindNode('\Data\Streams\7\Output\TEMP_OUT\MIXED').value; T11 = Aspen.Application.Tree.FindNode('\Data\Streams\11\Output\TEMP_OUT\MIXED').value; T23 = Aspen.Application.Tree.FindNode('\Data\Streams\23\Output\TEMP_OUT\MIXED').value; T24 = Aspen.Application.Tree.FindNode('\Data\Streams\24\Output\TEMP_OUT\MIXED').value; T16 = Aspen.Application.Tree.FindNode('\Data\Streams\16\Output\TEMP_OUT\MIXED').value; T17 = Aspen.Application.Tree.FindNode('\Data\Streams\17\Output\TEMP_OUT\MIXED').value; T29 = Aspen.Application.Tree.FindNode('\Data\Streams\29\Output\TEMP_OUT\MIXED').value; T30 = Aspen.Application.Tree.FindNode('\Data\Streams\30\Output\TEMP_OUT\MIXED').value; T31 = Aspen.Application.Tree.FindNode('\Data\Streams\31\Output\TEMP_OUT\MIXED').value; T32 = Aspen.Application.Tree.FindNode('\Data\Streams\32\Output\TEMP_OUT\MIXED').value; T18 = Aspen.Application.Tree.FindNode('\Data\Streams\18\Output\TEMP_OUT\MIXED').value; T33 = Aspen.Application.Tree.FindNode('\Data\Streams\33\Output\TEMP_OUT\MIXED').value; WW = Aspen.Application.Tree.FindNode('\Data\Streams\27\Output\MASSFRAC\MIXED\H2O').value; F30CO2 = Aspen.Application.Tree.FindNode('\Data\Streams\30\Output\MASSFLOW\MIXED\CO2').value/1000; F30NH3 = Aspen.Application.Tree.FindNode('\Data\Streams\30\Output\MASSFLOW\MIXED\NH3').value/1000; F32CO2 = Aspen.Application.Tree.FindNode('\Data\Streams\32\Output\MASSFLOW\MIXED\CO2').value/1000; F32NH3 = Aspen.Application.Tree.FindNode('\Data\Streams\32\Output\MASSFLOW\MIXED\NH3').value/1000; %Costos de Operación (USD/año) COHE1 = -6.69*QH1; COHE2 = 78.84*QH2; COHE3 = -6.69*QH3; COHE4 = 78.84*QH4; COHE5 = 78.84*QH5; COHE6 = 78.84*QH6; COHE7 = -6.69*QH7; COREB = 78.84*QREB; COCOND = -6.69*QCOND; COC1 = 0.034056*441.23*F28/r28; COC2 = 0.013651*441.23*F22/r22; COP1 = 678.9*WP1; CO = COHE1+COHE2+COHE3+COHE4+COHE5+COHE6+... COHE7+COREB+COCOND+COC1+COC2+COP1; %Costos de Capital (USD/año) CCR1 = 7474.576*(0.82*8*(4*((60*(-106.1921... *x^2+167.7313*x+9.2439))*F3/r3)/pi/8)... ^(1/3))^0.81*(1.093*(4*((60*(-106.1921*... x^2+167.7313*x+9.2439))*F3/r3)/pi/8)^... (1/3))^1.05; CCV1 = 7474.576*(0.82*2.5*(4*(300*F5/r5)/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*F5/r5)/pi/2.5)^... (1/3))^1.05; CCV2 = 7474.576*(0.82*2.5*(4*(300*F8/r8)/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*F8/r8)/pi/2.5)^... (1/3))^1.05; CCV3 = 7474.576*(0.82*2.5*(4*(300*F12/r12)/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*F12/r12)/pi/2.5)^... (1/3))^1.05; CCD1 = 7474.576*(0.82*2.5*(4*(300*(F24/r24+400.15))/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*(F24/r24+400.15))/pi/2.5)^... (1/3))^1.05; CCHE1 = 1387.1*(QH1/(2.555*(T8-T6))*10.7639)^0.65/5; CCHE2 = 1387.1*(QH2/(2.555*(T11-T7))*10.7639)^0.65/5; CCHE3 = 1007.1*(QH3/(2.555*(T24-T23))*10.7639)^0.65/5; CCHE4 = 1076.7*(QH4/(2.555*(T17-T16))*10.7639)^0.65/5; CCHE5 = 1663.1*(QH5/(2.555*(T30-T29))*10.7639)^0.65/5; CCHE6 = 1663.1*(QH6/(2.555*(T32-T31))*10.7639)^0.65/5; CCHE7 = 1076.7*(QH7/(2.555*(T33-T18))*10.7639)^0.65/5; CCREB = 1076.7*(QREB/(2.555*(250-T18))*10.7639)^0.65/5; CCCOND = 1076.7*(QCOND/(2.555*(-15))*10.7639)^0.65/5; CCC1 = 971.02*(0.034056*F28/r28)^0.82; CCC2 = 971.02*(0.013651*F22/r22)^0.82; CCP1 = (F19/r19)^0.64*549.705; CCT1 = 69313*(1.64*(BR*0.0001136+1.9597327))^1.45; CC = CCHE1+CCHE2+CCHE3+CCHE4+CCHE5+CCHE6+... CCHE7+CCREB+CCCOND+CCC1+CCC2+CCP1+CCT1+... CCR1+CCV1+CCV2+CCV3+CCD1; %Costos de MP CMPCO2 = (757.024-F30CO2-F32CO2)*24*365*176.6/0.975; CMPNH3 = (878.841-F30NH3-F32NH3)*24*365*262.5/0.995; CMP = CMPCO2+CMPNH3; %Ingresos por venta de urea (USD/año) Iv = F*477.5*24*365; %F. O. (MUSD/año) FO = (Iv-CC-CO-CMP)/10^6; rest = 0.005-WW; if rest >= 0 APT = FO; else APT = FO*0.8; end M_APT(k,1)=APT; %Aptitud Hijos x_=(Nh{k}(1,1)*100+Nh{k}(2,1)*10+Nh{k}(3,1))/1000; y_=(Nh{k}(1,2)*100+Nh{k}(2,2)*10+Nh{k}(3,2))/1000; z_=(Nh{k}(1,3)*100+Nh{k}(2,3)*10+Nh{k}(3,3))/1000; x = xinf+x_*(xsup-xinf); y = yinf+y_*(ysup-yinf); z = zinf+z_*(zsup-zinf); %Aspen.Reinit Aspen.Application.Tree.FindNode('\Data\Blocks\R-101\Input\CONV\2').value=x; Aspen.Application.Tree.FindNode('\Data\Blocks\S1\Input\FRAC\21').value=y; Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Input\T1').value=z; Run2(Aspen.Engine); F3=Aspen.Application.Tree.FindNode('\Data\Streams\3\Output\MASSFLMX\MIXED').value/3600; F5=Aspen.Application.Tree.FindNode('\Data\Streams\5\Output\MASSFLMX\MIXED').value/3600; F8=Aspen.Application.Tree.FindNode('\Data\Streams\8\Output\MASSFLMX\MIXED').value/3600; F12=Aspen.Application.Tree.FindNode('\Data\Streams\12\Output\MASSFLMX\MIXED').value/3600; F24=Aspen.Application.Tree.FindNode('\Data\Streams\24\Output\MASSFLMX\MIXED').value/3600; F28=Aspen.Application.Tree.FindNode('\Data\Streams\28\Output\MASSFLMX\MIXED').value*2.2046; F22=Aspen.Application.Tree.FindNode('\Data\Streams\22\Output\MASSFLMX\MIXED').value*2.2046; F19=Aspen.Application.Tree.FindNode('\Data\Streams\19\Output\MASSFLMX\MIXED').value*2.2046/60; r3=Aspen.Application.Tree.FindNode('\Data\Streams\3\Output\RHOMX_MASS\MIXED').value; r5=Aspen.Application.Tree.FindNode('\Data\Streams\5\Output\RHOMX_MASS\MIXED').value; r8=Aspen.Application.Tree.FindNode('\Data\Streams\8\Output\RHOMX_MASS\MIXED').value; r12=Aspen.Application.Tree.FindNode('\Data\Streams\12\Output\RHOMX_MASS\MIXED').value; r24=Aspen.Application.Tree.FindNode('\Data\Streams\24\Output\RHOMX_MASS\MIXED').value; r28=Aspen.Application.Tree.FindNode('\Data\Streams\28\Output\RHOMX_MASS\MIXED').value*2.2046/35.3147; r22=Aspen.Application.Tree.FindNode('\Data\Streams\22\Output\RHOMX_MASS\MIXED').value*2.2046/35.3147; r19=Aspen.Application.Tree.FindNode('\Data\Streams\19\Output\RHOMX_MASS\MIXED').value*2.2046/264.1720; QH1=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-101\Output\QCALC').value*4.184*10^6/3600; QH2=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-102\Output\QCALC').value*4.184*10^6/3600; QH3=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-103\Output\QCALC').value*4.184*10^6/3600; QH4=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-104\Output\QCALC').value*4.184*10^6/3600; QH5=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-105\Output\QCALC').value*4.184*10^6/3600; QH6=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-106\Output\QCALC').value*4.184*10^6/3600; QH7=Aspen.Application.Tree.FindNode('\Data\Blocks\HE-107\Output\QCALC').value*4.184*10^6/3600; QREB=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\REB_DUTY').value*4.184*10^6/3600; QCOND=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\COND_DUTY').value*4.184*10^6/3600; WP1=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\COND_DUTY').value; BR=Aspen.Application.Tree.FindNode('\Data\Blocks\T-101\Output\BOT_VFLOW').value; F=Aspen.Application.Tree.FindNode('\Data\Streams\27\Output\MASSFLOW\MIXED\UREA').value/1000; T6 = Aspen.Application.Tree.FindNode('\Data\Streams\6\Output\TEMP_OUT\MIXED').value; T8 = Aspen.Application.Tree.FindNode('\Data\Streams\8\Output\TEMP_OUT\MIXED').value; T7 = Aspen.Application.Tree.FindNode('\Data\Streams\7\Output\TEMP_OUT\MIXED').value; T11 = Aspen.Application.Tree.FindNode('\Data\Streams\11\Output\TEMP_OUT\MIXED').value; T23 = Aspen.Application.Tree.FindNode('\Data\Streams\23\Output\TEMP_OUT\MIXED').value; T24 = Aspen.Application.Tree.FindNode('\Data\Streams\24\Output\TEMP_OUT\MIXED').value; T16 = Aspen.Application.Tree.FindNode('\Data\Streams\16\Output\TEMP_OUT\MIXED').value; T17 = Aspen.Application.Tree.FindNode('\Data\Streams\17\Output\TEMP_OUT\MIXED').value; T29 = Aspen.Application.Tree.FindNode('\Data\Streams\29\Output\TEMP_OUT\MIXED').value; T30 = Aspen.Application.Tree.FindNode('\Data\Streams\30\Output\TEMP_OUT\MIXED').value; T31 = Aspen.Application.Tree.FindNode('\Data\Streams\31\Output\TEMP_OUT\MIXED').value; T32 = Aspen.Application.Tree.FindNode('\Data\Streams\32\Output\TEMP_OUT\MIXED').value; T18 = Aspen.Application.Tree.FindNode('\Data\Streams\18\Output\TEMP_OUT\MIXED').value; T33 = Aspen.Application.Tree.FindNode('\Data\Streams\33\Output\TEMP_OUT\MIXED').value; WW = Aspen.Application.Tree.FindNode('\Data\Streams\27\Output\MASSFRAC\MIXED\H2O').value; F30CO2 = Aspen.Application.Tree.FindNode('\Data\Streams\30\Output\MASSFLOW\MIXED\CO2').value/1000; F30NH3 = Aspen.Application.Tree.FindNode('\Data\Streams\30\Output\MASSFLOW\MIXED\NH3').value/1000; F32CO2 = Aspen.Application.Tree.FindNode('\Data\Streams\32\Output\MASSFLOW\MIXED\CO2').value/1000; F32NH3 = Aspen.Application.Tree.FindNode('\Data\Streams\32\Output\MASSFLOW\MIXED\NH3').value/1000; %Costos de Operación (USD/año) COHE1 = -6.69*QH1; COHE2 = 78.84*QH2; COHE3 = -6.69*QH3; COHE4 = 78.84*QH4; COHE5 = 78.84*QH5; COHE6 = 78.84*QH6; COHE7 = -6.69*QH7; COREB = 78.84*QREB; COCOND = -6.69*QCOND; COC1 = 0.034056*441.23*F28/r28; COC2 = 0.013651*441.23*F22/r22; COP1 = 678.9*WP1; CO = COHE1+COHE2+COHE3+COHE4+COHE5+COHE6+... COHE7+COREB+COCOND+COC1+COC2+COP1; %Costos de Capital (USD/año) CCR1 = 7474.576*(0.82*8*(4*((60*(-106.1921... *x^2+167.7313*x+9.2439))*F3/r3)/pi/8)... ^(1/3))^0.81*(1.093*(4*((60*(-106.1921*... x^2+167.7313*x+9.2439))*F3/r3)/pi/8)^... (1/3))^1.05; CCV1 = 7474.576*(0.82*2.5*(4*(300*F5/r5)/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*F5/r5)/pi/2.5)^... (1/3))^1.05; CCV2 = 7474.576*(0.82*2.5*(4*(300*F8/r8)/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*F8/r8)/pi/2.5)^... (1/3))^1.05; CCV3 = 7474.576*(0.82*2.5*(4*(300*F12/r12)/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*F12/r12)/pi/2.5)^... (1/3))^1.05; CCD1 = 7474.576*(0.82*2.5*(4*(300*(F24/r24+400.15))/pi/2.5)... ^(1/3))^0.81*(1.093*(4*(300*(F24/r24+400.15))/pi/2.5)^... (1/3))^1.05; CCHE1 = 1387.1*(QH1/(2.555*(T8-T6))*10.7639)^0.65/5; CCHE2 = 1387.1*(QH2/(2.555*(T11-T7))*10.7639)^0.65/5; CCHE3 = 1007.1*(QH3/(2.555*(T24-T23))*10.7639)^0.65/5; CCHE4 = 1076.7*(QH4/(2.555*(T17-T16))*10.7639)^0.65/5; CCHE5 = 1663.1*(QH5/(2.555*(T30-T29))*10.7639)^0.65/5; CCHE6 = 1663.1*(QH6/(2.555*(T32-T31))*10.7639)^0.65/5; CCHE7 = 1076.7*(QH7/(2.555*(T33-T18))*10.7639)^0.65/5; CCREB = 1076.7*(QREB/(2.555*(250-T18))*10.7639)^0.65/5; CCCOND = 1076.7*(QCOND/(2.555*(-15))*10.7639)^0.65/5; CCC1 = 971.02*(0.034056*F28/r28)^0.82; CCC2 = 971.02*(0.013651*F22/r22)^0.82; CCP1 = (F19/r19)^0.64*549.705; CCT1 = 69313*(1.64*(BR*0.0001136+1.9597327))^1.45; CC = CCHE1+CCHE2+CCHE3+CCHE4+CCHE5+CCHE6+... CCHE7+CCREB+CCCOND+CCC1+CCC2+CCP1+CCT1+... CCR1+CCV1+CCV2+CCV3+CCD1; %Costos de MP CMPCO2 = (757.024-F30CO2-F32CO2)*24*365*176.6/0.975; CMPNH3 = (878.841-F30NH3-F32NH3)*24*365*262.5/0.995; CMP = CMPCO2+CMPNH3; %Ingresos por venta de urea (USD/año) Iv = F*477.5*24*365; %F. O. (MUSD/año) FO = (Iv-CC-CO-CMP)/10^6; rest = 0.005-WW; if rest >= 0 APT = FO; else APT = FO*0.8; end M_APT(k+n)=APT; end %Selección elitista %Ordenar aptitudes y conservar índice [Mcut,Index] = sort(M_APT); %Generar la nueva población de padres Nnew = cell(n,1); %Asignar los nuevos padres según aptitud l=1; for k=n+1:2*n Ind = Index(k); if Ind > n Nnew{l}=Nh{Ind-n}; else Nnew{l}=N{Ind}; end l=l+1; end best(d) = Mcut(2*n); Ibest = Index(2*n); if Ibest > n bestind{d}=Nh{Ibest-n}; else bestind{d}=N{Ibest}; end bestind{d} best(d) N = Nnew; d = d+1 end %Traducir los datos de la corrida individuos= zeros(gen,5); for k=1:gen x_=(bestind{k}(1,1)*100+bestind{k}(2,1)*10+bestind{k}(3,1))/1000; y_=(bestind{k}(1,2)*100+bestind{k}(2,2)*10+bestind{k}(3,2))/1000; z_=(bestind{k}(1,3)*100+bestind{k}(2,3)*10+bestind{k}(3,3))/1000; x = xinf+x_*(xsup-xinf); y = yinf+y_*(ysup-yinf); z = zinf+z_*(zsup-zinf); individuos(k,1)=k; individuos(k,2)=best(k); individuos(k,3)=x; individuos(k,4)=y; individuos(k,5)=z; end