详解Python使用模拟退火算法求解列表“最大值”
模拟退火算法可以看作是爬山算法的一种改进,如果前方有更优解就前进,如果没有更优解就以一定概率前进。与简单的爬山算法相比,模拟退火算法有可能跳出局部而得到全局最优解,但也有可能得到更差的解,算法参数的设置非常重要。
def simAnnealingMax(lst, howFar):
'''
lst:待确定最大值的列表
howFar:爬山时能看到的“最远方”,越大越准确
'''
#由于切片是左闭右开区间,所以howFat必须大于1
assert howFar>1, 'parameter "howFar" must >1'
#从列表第一个元素开始爬
#如果已经到达最后一个元素,或者已找到局部最大值,结束
start = 0
ll = len(lst)
#随机走动的次数
times = 1
while start <= ll:
#当前局部最优解
m = lst[start]
#下一个邻域内的数字
loc = lst[start+1:start+howFar]
#如果已处理完所有数据,结束
if not loc:
return m
#下一个邻域的局部最优解及其位置
mm = max(loc)
mmPos = loc.index(mm)
#如果下一个邻域内有更优解,走过去
if m <= mm:
start += mmPos+1
else:
#如果下一个邻域内没有更优解,以一定的概率前进或结束
delta = (m-mm)/(m+mm)
#随机走动次数越多,对概率要求越低
if delta <= random()/times:
start += mmPos+1
times += 1
else:
return m
函数用法为:
from random import randint
lst = [randint(1, 100) for i in range(200)]
print(simAnnealingMax(lst, k))
详解Python使用模拟退火算法求解列表“最大值”相关推荐
- python从random生成列表_详解Python利用random生成一个列表内的随机数
详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...
- 选择排序法python详解-Python选择排序算法(三)
优化选择排序算法,大致思路是每次循环分别找到最大值和最小值,放到列表的头部和尾部 代码如下: #! coding:utf8 import random def select_sort(arr): fo ...
- python中列表和元组的相同点和不同点_详解Python语言中元组和列表的区别
本篇介绍Python中的元组数据类型,文中会讨论元组与列表的区别,元组的声明.赋值及其相关运算.通过本篇的学习,可以达成如下目标. ● 掌握元组和列表的区别 ● 掌握元组的声明和赋值 ● 掌握适用于元 ...
- python随机生成数字列表_详解Python利用random生成一个列表内的随机数
首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range(1,34)) print得到一系列随机数,执行一次得到 ...
- python快速排序算法详细图解_详解python实现快速排序算法
人来人往,蜚短流长,不求此生匆匆过,但求每日在成长 快速排序严重依赖分区,分区部分完成就代表排序成功了一半 1.详细思路见代码注释部分: def quick_sort(l,low,high): ''' ...
- 数学建模——智能优化之模拟退火模型详解Python代码
数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...
- python列表拆包_详解python 拆包可迭代数据如tuple, list
详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...
- 数学建模——主成分分析算法详解Python代码
数学建模--主成分分析算法详解Python代码 import matplotlib.pyplot as plt #加载matplotlib用于数据的可视化 from sklearn.decomposi ...
- 模拟退火算法求解旅行商问题(python实现)
模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 一.模拟退火算法原理 二.旅行商问题 1.求解思路 2.代码 总结 旅行商问题(TSP 问题).假设有一个旅行商人要拜访全国31个省会 ...
最新文章
- 【性格心理学】为什么我在关键时刻总是紧张?
- linux安装python库报错pywin32,Linux windows安装paramiko模块
- C语言中的一维数组和二维数组
- 如何在linux环境下安装yaf
- 集合还有这么优雅的运算法?
- 成为Java流专家–第2部分:中级操作
- jquery flot pie画饼图
- OO第一单元总结分析
- The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器...
- Linux下修改当前用户的最大线程数和 open files
- Java核心技术点之反射
- 2019.04.14_16.1 - 17.5
- vscode如何调整字体大小
- SqList *L 和 SqList * L的一些理解以及多重指针的简单应用
- 用python实现猜数字游戏
- mysql人脸数据库_人脸数据库汇总
- [HDU - 3709] Balanced Number (数位dp)
- 学习笔记之——针孔相机模型及单应性矩阵
- 0字节文件无法删除怎么办
- 论文笔记—ITS+假名管理—ASPA: Advanced Strong Pseudonym based Authentication in Intelligent Transport System
热门文章
- 倒计时 分秒 小程序 方法_小程序天/小时/分秒倒计时封装
- 18计算机二级考试用word吗,计算机二级Word篇-实操真题详解18
- java中一级缓存二级缓存_[Java] hibernate 一级缓存和二级缓存
- mysql 语法树_Inception 语法树打印(15)
- windows编程 识别拖动_Quicker 解锁新姿势!Windows 还能这么用?
- android调用日历库,Android学习教程之日历库使用(15)
- 11g RAC环境下客户端配置TAF
- 用AndroidStudio和vsCode运行ReactNative项目
- Jsp+Ssm+Mysql在线考试系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的在线学习系统