Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zsr6668
遗传算法
提交
42ed2f42
遗
遗传算法
项目概览
zsr6668
/
遗传算法
与 Fork 源项目一致
Fork自
inscode / Python
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
遗
遗传算法
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
42ed2f42
编写于
4月 26, 2023
作者:
6
644891d3f791091b8f7920d2
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Auto commit
上级
df352508
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
103 addition
and
1 deletion
+103
-1
main.py
main.py
+103
-1
未找到文件。
main.py
浏览文件 @
42ed2f42
print
(
'欢迎来到 InsCode'
)
import
random
\ No newline at end of file
# 求y =-(400-x)*(400-x)+160000的最大值
# 种群初始化
def
origin
(
number
,
size
):
population
=
[]
for
i
in
range
(
number
):
temp
=
[]
for
j
in
range
(
size
):
temp
.
append
(
random
.
randint
(
0
,
1
))
population
.
append
(
temp
)
return
population
# 评估适应度
def
fitness
(
body
,
size
):
ten_number
=
0
count
=
size
-
1
for
i
in
body
[
0
:
size
]:
ten_number
=
ten_number
+
i
*
pow
(
2
,
count
)
count
=
count
-
1
fit
=-
(
400
-
ten_number
)
*
(
400
-
ten_number
)
+
160000
return
fit
# 轮盘选择
def
Select
(
population
,
size
):
total
=
0
temp
=
0
select
=
[]
for
n
in
range
(
len
(
population
)):
select
.
append
([])
# select数组为二维数组,每一个数组中存放挑选的概率和选中的次数
for
i
in
range
(
len
(
population
)):
total
=
total
+
population
[
i
][
size
]
for
j
in
range
(
len
(
population
)):
temp
=
temp
+
population
[
j
][
size
]
/
total
select
[
j
].
append
(
temp
)
for
n
in
range
(
len
(
population
)):
select
[
n
].
append
(
0
)
#修改为A[ ,0]的形式
for
i
in
range
(
len
(
population
)):
#重复n次
x
=
random
.
random
()
for
z
in
range
(
len
(
select
)):
#修改选择的次数
if
x
<=
select
[
z
][
0
]:
select
[
z
][
1
]
=
select
[
z
][
1
]
+
1
break
min
=
max
=
select
[
0
][
1
]
min_num
=
max_num
=
0
for
i
in
range
(
len
(
select
)):
# 寻找最优个体位置
if
select
[
i
][
1
]
<
min
:
min
=
select
[
i
][
1
]
min_num
=
i
if
select
[
i
][
1
]
>
max
:
max
=
select
[
i
][
1
]
max_num
=
i
return
(
max_num
,
min_num
)
# 交配运算
def
crossover
(
population
,
size
,
max_mum
):
temp_list0
=
population
[
max_mum
]
for
i
in
range
(
len
(
population
)):
if
i
==
max_mum
:
population
[
i
].
pop
(
size
)
# 防止自己和自己交配
continue
seed
=
random
.
randint
(
0
,
size
-
1
)
tem_list
=
population
[
i
]
population
[
i
]
=
temp_list0
[
0
:
seed
]
+
tem_list
[
seed
:
size
]
# 都和最优个体交配
return
population
# 变异
def
change
(
population
,
size
,
seed
):
for
i
in
range
(
len
(
population
)):
if
random
.
random
()
>
seed
:
x
=
random
.
randint
(
0
,
size
-
1
)
if
population
[
i
][
x
]
==
1
:
population
[
i
][
x
]
=
0
else
:
population
[
i
][
x
]
=
1
return
population
number
=
30
size
=
10
GA_number
=
100
seed
=
0.01
best
=
0
population
=
origin
(
number
,
size
)
print
(
population
)
for
i
in
range
(
GA_number
):
for
j
in
range
(
len
(
population
)):
population
[
j
].
append
(
fitness
(
population
[
j
],
size
))
(
max_num
,
min_num
)
=
Select
(
population
,
size
)
population
[
min_num
]
=
population
[
max_num
]
#将最小选择的数组替换为最大的数组
population
=
crossover
(
population
,
size
,
max_num
)
population
=
change
(
population
,
size
,
seed
)
print
(
population
)
for
j
in
range
(
len
(
population
)):
population
[
j
].
append
(
fitness
(
population
[
j
],
size
))
print
(
population
)
(
max_num
,
min_num
)
=
Select
(
population
,
size
)
best_body
=
population
[
max_num
]
count
=
size
-
1
for
i
in
best_body
[
0
:
size
]:
best
=
best
+
i
*
pow
(
2
,
count
)
count
=
count
-
1
print
(
best
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录