Matlab - Cambiar un bit de 0 a 1 usando números digitales

 
Vista:
sin imagen de perfil

Cambiar un bit de 0 a 1 usando números digitales

Publicado por Marco Antonio (61 intervenciones) el 30/09/2017 14:45:24
Estoy haciendo un pequeño programa de algoritmos geneticos y estoy usando solo valores digitales el cruce ya lo tengo listo de esta forma

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
x10 =
 
   1.0e+12 *
 
   0.849712753174819
   4.219400418437600
   0.849712753174819
   0.849712753174819
   4.219400418437600
   4.155203938680990
   0.849712753174819
   4.155203938680990
   0.849712753174819
   0.849712753174819
 
 
Max_Number_of_Bits =
 
    42
 
Ptc = ceil(Max_Number_of_Bits*0.8)
 
Ma1 = 2^Ptc-1
Ma2 = 2^Max_Number_of_Bits-1-Ma1
for n=1:10
        x11=randsample(x10,2)
        k1 = bitand(Ma1,round(x11(1,1)))
        p1 = bitand(Ma2,round(x11(2,1)))
        Hijo(n,1) = bitor(k1,p1)
end

ahora al hijo necesito cambiarle un bit de 0 a 1 o de 1 a 0 de forma aleatoria ahora mis palabras son de 42 bits pongo un ejemplo de hijo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Hijo =
 
   1.0e+12 *
 
   0.849712753175000
   0.849712753175000
   4.216967113239000
   0.856669055353000
   0.849712753175000
   0.852146058374000
   4.150680941702000
   4.216967113239000
   0.849712753175000
   4.148247636503000

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
sin imagen de perfil

Cambiar un bit de 0 a 1 usando números digitales

Publicado por Marco Antonio (61 intervenciones) el 01/10/2017 00:51:46
Estoy haciedo un pequeño algoritmo genetico pero no estoy lidiando con numeros binarios solo decimales el cruce lo logre haciendo dos mascaras de la siguiente forma
1
2
3
4
Max_Number_of_Bits = 42
Punto de cruce = ceil(Max_Number_of_Bits*0.8)
Mascara1 = 2^Punto de cruce-1
Mascara2 = 2^Max_Number_of_Bits-1-Mascara1

despues que halle las mascaras todo con decimales solo hago

1
2
3
k1 = bitand(Ma1,round(x11(1,1)))
p1 = bitand(Ma2,round(x11(2,1)))
HijoG1(n,1) = bitor(k1,p1)

Ahora me propongo hacer la mutacion que es cambiar un bit de los 42 de 0 a 1 o de 1 a 0 pero no se como crear las mascaras o como modificar un bit dentro de la palabra usando decimales y el cambio tiene que ser aleatorio y se le hace solo al hijo ejemplo

tengo hijo 0 1 1 0 despues de mutacion hijo 1 1 1 0 pero eso es lo que tengo problemas como cambiar ese bit usando decimales y de forma aleatoria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Cambiar un bit de 0 a 1 usando números digitales

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 01/10/2017 01:09:47
tienes que colocar por ejemplo if rand<0.15 y en ese caso lo que harías es mutarlo con un 15% de probabilidad, puedes disminuir el nùmero, despuès de esto debes elegir la posición a mutar, con un randi lo puedes hacer : a=randi(length(hijo),1,1), luego tomar ese valor y modificarlo, serìa hijo(k,a)=-hijo(k,a)+1 , esto hace el cambio que deseas, k serìa el cambio para el hijo k, con eso puedes hacer la mutaciòn
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cambiar un bit de 0 a 1 usando números digitales

Publicado por Marco Antonio (61 intervenciones) el 01/10/2017 01:55:15
Alfinal solo ilustro lo que quiero hacer pero la mutacion debe hacerce con numeros decimales asi como hice el cruce
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cambiar un bit de 0 a 1 usando números digitales

Publicado por Marco Antonio (61 intervenciones) el 01/10/2017 12:14:28
Estoy haciedo un pequeño algoritmo genetico pero no estoy lidiando con numeros binarios solo decimales el cruce lo logre haciendo dos mascaras de la siguiente forma

1
2
3
4
Max_Number_of_Bits = 42
Punto de cruce = ceil(Max_Number_of_Bits*0.8)
Mascara1 = 2^Punto de cruce-1
Mascara2 = 2^Max_Number_of_Bits-1-Mascara1

despues que halle las mascaras todo con decimales solo hago

1
2
3
4
5
6
7
8
9
10
x11 =
 
   1.0e+18 *
 
   0.859320954289976
   4.413031813503131
 
k1 = bitand(Ma1,round(x11(1,1)))
p1 = bitand(Ma2,round(x11(2,1)))
HijoG1(n,1) = bitor(k1,p1)

Ahora me propongo hacer la mutacion que es cambiar un bit de los 42 de 0 a 1 o de 1 a 0 pero no se como crear las mascaras o como modificar un bit dentro de la palabra usando decimales y el cambio tiene que ser aleatorio y se le hace solo al hijo ejemplo

tengo hijo 0 1 1 0 despues de mutacion hijo 1 1 1 0 pero eso es lo que tengo problemas como cambiar ese bit usando decimales y de forma aleatoria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cambiar un bit de 0 a 1 usando números digitales

Publicado por Marco Antonio (61 intervenciones) el 01/10/2017 12:41:11
Decidi que lo voy hacer a tu manera podrias escribir el programa completo con el if yo escribi:
1
2
3
4
5
6
if rand<0.15
    a=x11(1,1)
    b=de2bi(a)
    c=randi(length(b),1,1)
    b(k,c)=-b(k,c)+1
end

pero no funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar