import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import random
from collections import Counter
from matplotlib.animation import FuncAnimation
#fname指定字体文件 选简体显示中文
myfont = mpl.font_manager.FontProperties(fname=r"C:\Windows\Fonts\STFANGSO.TTF")
mpl.rcParams['axes.unicode_minus'] = False
mpl.rcParams['font.sans-serif'] = ['SimHei']
class GA:
def __init__(self,NP,NG,t,f):
'''
NP:种群规模
NG:最大代数
t:初始时刻
f:计算适值函数,算子
'''
self.NP = NP
self.NG = NG
self.t = t
self.f = f
def gun(self,flask = False):
'''
返回x,y
flask为Ture显示图像
'''
def mod1(L,a=0,b=10):
'''
产生随机数长度为L,范围为a到b
a,b默认0,10
'''
return [random.randint(a,b) for i in range(L)]
def bianma(x):
'''
整数转二进制 基因编码
'''
y = "{0:b}".format(x)
return y
def min_max(x):
'''
0-1标准化
'''
return [(i - min(x))/(max(x) - min(x)) for i in x]
def choose(ss,pp,L):
'''
ss:随机序列范围0-1 pp:转轮 L:序列长度
return index:选择母体下标
选择培育后代母体
'''
index = []
for i in range(L):
for j in range(L):
if j == 0:
if ss[i] >= pp[j] and ss[i] < pp[j+1]:
index.append(0)
if ss[i] >= pp[j] and ss[i] < pp[j+1]:
index.append(j)
elif j == L - 1:
if ss[i] >= pp[j] and ss[i] <= pp[j+1]:
index.append(j)
return index
def jiaca(x,y,n):
'''
交叉运算
x:父亲 y:母亲 n:交叉位点
return s:子代
'''
x = str(x)
y = str(y)
s = x[:n]+y[n:]
s = int(s, 2)
return s
L = self.NG
# 生成初始种群
x = mod1(L)
for kt in range(self.NG):
ii = 0
# print('第',kt+1,'轮:','\n种群:',x)
# 计算适值函数
xt = [bianma(i) for i in x] # 基因编码xt
f = [self.f(i) for i in x] # 计算f(x)
plt.ion()
plt.cla()
plt.scatter(x,f)
plt.title('第'+str(kt+1)+'轮计算')
plt.xlabel('种群取值')
plt.ylabel('适值函数值')
if flask:
plt.pause(1)
# print('适值函数:',f)
# 选择
p = [i/sum(f) for i in f] # 计算个体选择概率p
pp = [sum(p[0:i]) for i in range(len(p))]
pp.append(1)
ss1 = min_max(mod1(L)) # 生成随机数0-1
ss2 = min_max(mod1(L)) # 生成随机数0-1
index_1 = choose(ss1,pp,L) # 父亲下标
index_2 = choose(ss2,pp,L) # 母亲下标
x1 = [xt[i] for i in index_1] # 父亲编码
x2 = [xt[i] for i in index_2] # 母亲编码
# 遗传运算
n = mod1(L)
y = [jiaca(x1[i],x2[i],n[i]) for i in range(L)] # 子代y
yt = [bianma(i) for i in y] # 子代基因编码yt
# 判断
if x == y:
break
# 更新
x = y
result = Counter(x)
xx = max(result,key=result.get)
fx = self.f(xx)
return xx,fx
def fun(x):
f = -1 * x**2 + 100
return f
ga = GA(50,50,0,fun)
x,y = ga.gun(flask=True)
print(x,' ',y)
没有合适的资源?快使用搜索试试~ 我知道了~
基于Python求解最优化无约束优化问题(源码).rar
共6个文件
py:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 92 浏览量
2023-03-22
16:41:53
上传
评论
收藏 4KB RAR 举报
温馨提示
1、资源内容:基于Python求解最优化无约束优化问题(源码).rar 2、适用人群:计算机,电子信息工程、数学等专业的学习者,作为“参考资料”参考学习使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具进行解压,没有解压工具的自行百度下载即可。 4、免责声明:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
资源推荐
资源详情
资源评论
收起资源包目录
基于Python求解最优化无约束优化问题(源码).rar (6个子文件)
基于Python求解最优化无约束优化问题(源码)
Fun.py 255B
智能计算
GA.py 4KB
Stride.py 860B
Direction.py 725B
Model.py 702B
Distance.py 324B
共 6 条
- 1
资源评论
- sazeirol。2023-06-18资源有一定的参考价值,与资源描述一致,很实用,能够借鉴的部分挺多的,值得下载。
- rose_rose_2024-01-27实在是宝藏资源、宝藏分享者!感谢大佬~
Matlab仿真实验室
- 粉丝: 2w+
- 资源: 2179
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功