Matlab - Iteraciones de un programa

 
Vista:
sin imagen de perfil

Iteraciones de un programa

Publicado por Marco Antonio (61 intervenciones) el 10/10/2017 19:52:11
tengo un programa el cual es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
clear
clc
format long
 
% Rango de x1 [-8 8] length 16
% rango de x2 [-8 8] length 16
% Debe ser dividido en 16*100000
% El total de de length del cromosoma es 32
N=input('Tamaño de la poblacion: ')%pregunta al usuario por el tamaño de la poblacio
m=input('Seleccione 1 para minimizar o 2 para maximizar: ')
numerodeiteraciones=input('Numero de iteraciones: ')
aj1=-8% Añade el valor 0 a aj, limite inferior del rango de la poblacion
bj1=8% Asigna el valor 10 a bj, limite superior del rango de la poblacion
n1=5% Asigna el valor 1 a n, numero de digitos despues del punto decimal
a1=(log((bj1-aj1)*(10^n1)+1))/log(2)% Calcula el Numero de bits requeridos
Number_of_bits1 = ceil(a1)% Redondea mj al prximo numero superior
aj2=-8% Añade el valor 0 a aj, limite inferior del rango de la poblacion
bj2=8% Asigna el valor 10 a bj, limite superior del rango de la poblacion
n2=5% Asigna el valor 1 a n, numero de digitos despues del punto decimal
a2=(log((bj1-aj1)*(10^n2)+1))/log(2)% Calcula el Numero de bits requeridos
Number_of_bits2 = ceil(a2)% Redondea mj al prximo numero superior
Max_Number_of_Bits=Number_of_bits1+Number_of_bits2% Suma numero de bit 1 y 2 para tener el total de bits
P1=randi([0 (2^Max_Number_of_Bits-1)],N,1)%Asigna valore decimales de forma aleatoria a P1 
%calcular decimales separado 
Mas1=(2^Number_of_bits1)-1%Crea una Mascara  
Mas2=2^Max_Number_of_Bits-(2^(Number_of_bits1)-1)-1%Crea una Mascara 
 
% for k=1:numerodeiteraciones
 
 
%Crea un lazo que hace el bitand y bitshift y lo guarda en P11
for n = 1:size(P1)
x3(n,1)=bitand(Mas2,P1(n))
P11(n)=bitshift(x3(n,1),-Number_of_bits2);  %X
end
P2=(P11*(bj1-aj1)+aj1)'%Escala los valores decimales a el rango
%Crea un lazo que hace el bitand y bitshift y lo guarda en P11
for n = 1:size(P1)
x4(n,1)=bitand(Mas1,P1(n)) %Y
end
P3=x4*(bj2-aj2)+aj2%Escala los valores decimales a el rango
%Calculando fitness
for n=1:size(P1)                                                                % Calcula el valor de x1 para calcular fitness
    x5(n,1)=aj1+(P2(n,1)*((bj1-aj1)/(2^Number_of_bits1-1)))
end
for n=1:size(P1)                                                                     % Calcula el valor de x3 para calcular fitness
    x5(n,2)=aj2+(P3(n,1)*((bj2-aj2)/(2^Number_of_bits2-1)))
end
for n1=1:size(P1)
    for n2=1:size(P1)
        if m==1
            fx1(n1,1)=1/(500+(21.5 + x5(n1,1) * sin(4*pi*x5(n1,1)) + x5(n1,2) * sin(20*pi*x5(n1,2))))
                else m==2
                    fx1(n2,1)=(1+(21.5 + x5(n2,1) * sin(4*pi*x5(n2,1)) + x5(n2,2) * sin(20*pi*x5(n2,2))))+500
        end
    end
end
% Calculando el Fitness Promedio
fxt=sum(fx1)                                               
% Calculando el Ti
for n=1:size(P1)
    x6(n,1) = fx1(n,1)/fxt
end
x7 = sum(x6)
% CAlculando qi
x9(1,1) = x6(1,1)
for i=2:length(x6);
  x9(i,1) = x9(i-1,1)+x6(i,1)
end
x9
x10=rand(size(P1))
% Ruleta
for n=1:size(P1)
PDEC(n,1)=P1(n,1)
end
x11(1)=0;
for i=1:size(x10,1)
    for j=1:size(x10,1)
        if x10(i,1)<=x9(j,1)
            x11(i,1)=PDEC(j,1);
            break
        end
    end
end
x11
%Cruce
j=1
while j<length(P1)
    macho=PDEC(j)
    hembra=PDEC(j+1)
    r=rand(1)
    if r<=0.8
    ptocruce=randi([1,42],1)
    Mas1=2^ptocruce-1
    mane1=(2^Max_Number_of_Bits)-Mas1
    a=bitand(round(hembra),round(mane1))
    b=bitand(round(macho),round(mane1))
    c=bitand(round(hembra),round(Mas1))
    d=bitand(round(macho),round(Mas1))
    w1=bitor(d,a)
    w2=bitor(c,a)
    else
    w1=x11(j)
    w2=x11(j+1)
    end
    x12(j)=w1
    x12(j+1)=w2
    j=j+2
end
x13=x12'
%Mutacion
u=dec2bin(x13); %cambia los numeros decimales de x13 a binarios
%combierte u en una cell array
for i=1:size(x13,1)
    A{i}=u(i,:);
end
%Guarda los valores de A en P3 los une en una sola matris de 1xn
P3=[];
for i=1:length(A)
    P3=[P3,A{i}];
end
P3
%Compara los bits de P3 con un numero aleatorio r < 0.05 y si es menor lo
%cambia de 0 a 1 0 de 1 a 0
for i=1:length(P3)
    b=str2double(P3(i));
    r=rand;
    if r<0.05;
        P3(i)=num2str(~b);
    end
end
P3mutada=P3
 
A2=reshape(P3mutada,Max_Number_of_Bits,length(P1))
A3=A2'
Poblacionnueva=bin2dec(A3)

ahora tengo que hacer un loop de iteraciones correrlo a un maximo de 100 veces y guardar la poblacion nueva en una matriz y guardar fx1 en otra matriz y depues graficar todos los resultados en una grafica la poblacion se recomienda que no pase de 100 individuos

Atentamente
Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder