模拟退火算法可以看作是爬山算法的一种改进,如果前方有更优解就前进,如果没有更优解就以一定概率前进。与简单的爬山算法相比,模拟退火算法有可能跳出局部而得到全局最优解,但也有可能得到更差的解,算法参数的设置非常重要。

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使用模拟退火算法求解列表“最大值”相关推荐

  1. python从random生成列表_详解Python利用random生成一个列表内的随机数

    详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...

  2. 选择排序法python详解-Python选择排序算法(三)

    优化选择排序算法,大致思路是每次循环分别找到最大值和最小值,放到列表的头部和尾部 代码如下: #! coding:utf8 import random def select_sort(arr): fo ...

  3. python中列表和元组的相同点和不同点_详解Python语言中元组和列表的区别

    本篇介绍Python中的元组数据类型,文中会讨论元组与列表的区别,元组的声明.赋值及其相关运算.通过本篇的学习,可以达成如下目标. ● 掌握元组和列表的区别 ● 掌握元组的声明和赋值 ● 掌握适用于元 ...

  4. python随机生成数字列表_详解Python利用random生成一个列表内的随机数

    首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range(1,34)) print得到一系列随机数,执行一次得到 ...

  5. python快速排序算法详细图解_详解python实现快速排序算法

    人来人往,蜚短流长,不求此生匆匆过,但求每日在成长 快速排序严重依赖分区,分区部分完成就代表排序成功了一半 1.详细思路见代码注释部分: def quick_sort(l,low,high): ''' ...

  6. 数学建模——智能优化之模拟退火模型详解Python代码

    数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...

  7. python列表拆包_详解python 拆包可迭代数据如tuple, list

    详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...

  8. 数学建模——主成分分析算法详解Python代码

    数学建模--主成分分析算法详解Python代码 import matplotlib.pyplot as plt #加载matplotlib用于数据的可视化 from sklearn.decomposi ...

  9. 模拟退火算法求解旅行商问题(python实现)

    模拟退火算法求解旅行商问题 文章目录 模拟退火算法求解旅行商问题 一.模拟退火算法原理 二.旅行商问题 1.求解思路 2.代码 总结 旅行商问题(TSP 问题).假设有一个旅行商人要拜访全国31个省会 ...

最新文章

  1. 【性格心理学】为什么我在关键时刻总是紧张?
  2. linux安装python库报错pywin32,Linux windows安装paramiko模块
  3. C语言中的一维数组和二维数组
  4. 如何在linux环境下安装yaf
  5. 集合还有这么优雅的运算法?
  6. 成为Java流专家–第2部分:中级操作
  7. jquery flot pie画饼图
  8. OO第一单元总结分析
  9. The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器...
  10. Linux下修改当前用户的最大线程数和 open files
  11. Java核心技术点之反射
  12. 2019.04.14_16.1 - 17.5
  13. vscode如何调整字体大小
  14. SqList *L 和 SqList * L的一些理解以及多重指针的简单应用
  15. 用python实现猜数字游戏
  16. mysql人脸数据库_人脸数据库汇总
  17. [HDU - 3709] Balanced Number (数位dp)
  18. 学习笔记之——针孔相机模型及单应性矩阵
  19. 0字节文件无法删除怎么办
  20. 论文笔记—ITS+假名管理—ASPA: Advanced Strong Pseudonym based Authentication in Intelligent Transport System

热门文章

  1. 倒计时 分秒 小程序 方法_小程序天/小时/分秒倒计时封装
  2. 18计算机二级考试用word吗,计算机二级Word篇-实操真题详解18
  3. java中一级缓存二级缓存_[Java] hibernate 一级缓存和二级缓存
  4. mysql 语法树_Inception 语法树打印(15)
  5. windows编程 识别拖动_Quicker 解锁新姿势!Windows 还能这么用?
  6. android调用日历库,Android学习教程之日历库使用(15)
  7. 11g RAC环境下客户端配置TAF
  8. 用AndroidStudio和vsCode运行ReactNative项目
  9. Jsp+Ssm+Mysql在线考试系统
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线学习系统