github地址guofei9987/scikit-optgithub.com
安装
$pip install scikit-opt
定义你的目标函数
def demo_func(x):
python爬虫教程。x1, x2, x3 = x
return x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2
用遗传算法求解
from ga import GA
ga = GA(func=demo_func, lb=[-1, -10, -5], ub=[2, 10, 2], max_iter=500)
python语言程序设计、best_x, best_y = ga.run()
还提供一个每代数据的接口,可以拿来画各个维度的图
import pandas as pd
import matplotlib.pyplot as plt
FitV_history = pd.DataFrame(ga.FitV_history)
python算法、fig, ax = plt.subplots(2, 1)
ax[0].plot(FitV_history.index, FitV_history.values, '.', color='red')
plt_max = FitV_history.max(axis=1)
ax[1].plot(plt_max.index, plt_max, label='max')
ax[1].plot(plt_max.index, plt_max.cummax())
plt.show()
python和java。2. 用遗传算法解决TSP问题(Travelling Salesman Problem)
加载距离矩阵的数据,这里用随机数生成数据
from GA import GA_TSP
import numpy as np
num_points = 8
python有用吗,points = range(num_points)
points_coordinate = np.random.rand(num_points, 2)
distance_matrix = np.zeros(shape=(num_points, num_points))
for i in range(num_points):
for j in range(num_points):
python sort函数。distance_matrix[i][j] = np.linalg.norm(points_coordinate[i] - points_coordinate[j], ord=2)
print('distance_matrix is: \n', distance_matrix)
def cal_total_distance(points):
num_points, = points.shape
total_distance = 0
python数据结构。for i in range(num_points - 1):
total_distance += distance_matrix[points[i], points[i + 1]]
total_distance += distance_matrix[points[i + 1], points[0]]
return total_distance
用遗传算法求解:
python教程、ga_tsp = GA_TSP(func=cal_total_distance, points=points, pop=50, max_iter=200, Pm=0.001)
best_points, best_distance = ga_tsp.fit()
画图:
fig, ax = plt.subplots(1, 1)
best_points_ = np.concatenate([best_points, [best_points[0]]])
数据挖掘算法python,best_points_coordinate = points_coordinate[best_points_, :]
ax.plot(best_points_coordinate[:, 0], best_points_coordinate[:, 1],'o-r')
plt.show
这个库的灵活之处在于,可以方便地添加自定义算子
例如,如果你想到一种选择算子(selection),你的算子是这样的:
def selection_tournament(self, tourn_size):
python排序算法。FitV = self.FitV
sel_index = []
for i in range(self.size_pop):
aspirants_index = np.random.choice(range(self.size_pop), size=tourn_size)
sel_index.append(max(aspirants_index, key=lambda i: FitV[i]))
遗传算法 Python、self.Chrom = self.Chrom[sel_index, :] # next generation
return self.Chrom
把你的 UDF 自定义算子注册到遗传算法对象上:
from sko.GA import GA, GA_TSP
from sko.GA import ranking_linear, ranking_raw, crossover_2point, selection_roulette_2, mutation
python编程例子?demo_func = lambda x: x[0] ** 2 + (x[1] - 0.05) ** 2 + x[2] ** 2
ga = GA(func=demo_func, n_dim=3, size_pop=100, max_iter=500, lb=[-1, -10, -5], ub=[2, 10, 2])
#
ga.register(operator_name='ranking', operator=ranking_linear). \
register(operator_name='crossover', operator=crossover_2point). \
python为什么叫爬虫。register(operator_name='mutation', operator=mutation). \
register(operator_name='selection', operator=selection_tournament, tourn_size=3)
像往常一样运行遗传算法:
best_x, best_y = ga.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)
恭喜你,成功了。现在 udf 支持遗传算法的这几个算子: crossover, mutation, selection, ranking
提供了十来个算子 参考这里
库的地址,欢迎starscikit-optgithub.com
另外,这个库还封装了粒子群算法(PSO)、蚁群算法(ACA)、模拟退火算法(SA)、免疫优化算法(IA)、人工鱼群算法(AFSA)中文文档scikit-opt.github.ioDocumentscikit-opt.github.io
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态