Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Grégoire Grzeczkowicz
sho
Commits
61a8d4e5
Commit
61a8d4e5
authored
Nov 02, 2020
by
Grégoire Grzeczkowicz
Browse files
Bit genetic with split
parent
df3986f5
Changes
3
Hide whitespace changes
Inline
Side-by-side
sho/bit.py
View file @
61a8d4e5
...
...
@@ -140,7 +140,7 @@ def neighb_square(sol, scale, domain_width):
# Crossover
########################################################################
def
crossover
(
sol1
,
sol2
):
def
rand_
crossover
(
sol1
,
sol2
):
x
=
[]
y
=
[]
sol
=
sol1
+
sol2
...
...
@@ -157,3 +157,37 @@ def crossover(sol1, sol2):
domain
[
y
[
i
]][
x
[
i
]]
=
1
return
domain
def
split_crossover
(
sol1
,
sol2
):
p1
=
np
.
array
(
to_sensors
(
sol1
))
p2
=
np
.
array
(
to_sensors
(
sol2
))
sol
=
np
.
concatenate
((
p1
,
p2
))
x
=
sol
[::
2
]
m
=
np
.
median
(
x
)
r
=
[]
for
p
in
p1
:
if
p
[
0
]
<=
m
:
r
.
append
(
p
)
for
p
in
p2
:
if
p
[
0
]
>
m
:
r
.
append
(
p
)
if
len
(
r
)
<
len
(
p1
):
q
=
[]
for
p
in
p1
:
if
p
[
0
]
>
m
:
q
.
append
(
p
)
for
p
in
p2
:
if
p
[
0
]
<=
m
:
q
.
append
(
p
)
for
i
in
np
.
random
.
randint
(
0
,
len
(
p
),(
len
(
p1
)
-
len
(
r
))):
r
.
append
(
q
[
i
])
while
len
(
r
)
>
len
(
p1
):
r
.
pop
(
np
.
random
.
randint
(
0
,
len
(
r
)))
rmatrix
=
np
.
zeros
((
len
(
sol1
),
len
(
sol1
)))
for
p
in
r
:
rmatrix
[
p
[
0
],
p
[
1
]]
=
1
return
rmatrix
sho/num.py
View file @
61a8d4e5
...
...
@@ -148,18 +148,23 @@ def split_crossover(sol1, sol2):
r
.
append
(
sol2
[
2
*
i
+
1
])
if
len
(
r
)
<
len
(
sol1
):
p
=
[]
q
=
[]
for
i
in
range
(
len
(
sol1
)
//
2
):
if
sol1
[
2
*
i
]
>
m
:
p
.
append
(
sol1
[
2
*
i
])
p
.
append
(
sol1
[
2
*
i
+
1
])
q
.
append
(
sol1
[
2
*
i
])
q
.
append
(
sol1
[
2
*
i
+
1
])
for
i
in
range
(
len
(
sol2
)
//
2
):
if
sol2
[
2
*
i
]
<=
m
:
p
.
append
(
sol2
[
2
*
i
])
p
.
append
(
sol2
[
2
*
i
+
1
])
for
i
in
np
.
random
.
randint
(
0
,
len
(
p
)
//
2
,(
len
(
sol1
)
-
len
(
r
))
//
2
):
r
.
append
(
p
[
2
*
i
])
r
.
append
(
p
[
2
*
i
+
1
])
q
.
append
(
sol2
[
2
*
i
])
q
.
append
(
sol2
[
2
*
i
+
1
])
for
i
in
np
.
random
.
randint
(
0
,
len
(
q
)
//
2
,(
len
(
sol1
)
-
len
(
r
))
//
2
):
r
.
append
(
q
[
2
*
i
])
r
.
append
(
q
[
2
*
i
+
1
])
while
len
(
r
)
>
len
(
sol1
):
i
=
np
.
random
.
randint
(
0
,
len
(
r
)
//
2
)
r
.
pop
(
2
*
i
)
r
.
pop
(
2
*
i
)
return
r
snp.py
View file @
61a8d4e5
...
...
@@ -195,7 +195,7 @@ if __name__=="__main__":
make
.
init
(
bit
.
unif
,
domain_width
=
the
.
domain_width
,
nb_sensors
=
the
.
nb_sensors
),
bit
.
crossover
,
bit
.
split_
crossover
,
make
.
neig
(
bit
.
neighb_square
,
scale
=
the
.
variation_scale
,
domain_width
=
the
.
domain_width
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment