2.算法-Python模拟退火算法实例

题记 

        下面是python编写的算法>模拟退火算法实例,包括全过程和解析。

编写main.py文件

         main.py文件如下:

import math
import random

# 初始解:算法从问题的解空间中随机选择一个初始解作为当前解。
# 目标函数:算法需要优化的目标函数定义了解的质量。算法的目标是最小化或最大化这个函数。
# 温度:算法>模拟退火算法引入了一个控制搜索过程的温度参数。温度高时,算法更容易接受比当前解质量差的解;温度逐渐降低,接受劣质解的概率也逐渐减小。
# 邻域操作:算法通过在当前解的邻域中进行随机扰动来生成新的解。邻域操作的设计通常依赖于具体问题。
# 能量差:新解和当前解之间的目标函数值差异被称为能量差。如果新解更优(即目标函数值更小或更大,取决于问题类型),则新解被接受。如果新解劣于当前解,有一定概率接受新解,这个概率由温度和能量差共同决定。
# 降温策略:温度随着迭代逐渐降低,冷却过程的速率由降温策略(通常是指数衰减)决定。随着温度的降低,算法在接受劣质解的概率减小,搜索逐渐趋向于收敛。
# 停止准则:算法根据一定的停止准则(例如达到最大迭代次数、温度降低到某个阈值等)确定何时停止搜索并返回当前解作为最终结果。

# 目标函数(这里以一个简单的二次函数为例)
def objective_function(x):
    return x**2

# 算法>模拟退火算法,主体
def simulated_annealing(max_iterations, initial_temperature, cooling_rate):
    # 选择初始解,从-10,10
    current_solution = random.uniform(-10, 10)
    # 初始解的目标函数值,作为当前解的能量
    current_energy = objective_function(current_solution)
    # 这个循环用于迭代算法>模拟退火算法,参数为迭代次数
    for i in range(max_iterations):
        # 计算当前温度,温度随着迭代逐渐降低,由初始温度initial_temperature按照指数衰减(以cooling_rate为衰减率)。
        temperature = initial_temperature * math.exp(-cooling_rate * i)

        # 生成新解,通过在当前解的基础上加上一个[-1, 1]范围内的随机数
        new_solution = current_solution + random.uniform(-1, 1)
        new_energy = objective_function(new_solution)

        # 计算能量差
        energy_difference = new_energy - current_energy

        # 如果新解更优或者以一定概率接受劣解,这是算法>模拟退火算法的关键部分,允许算法在一定程度上接受劣质解,以避免陷入局部最优解,e的x次方
        # 从[0.0,1.0)
        if energy_difference < 0 or random.random() < math.exp(-energy_difference / temperature):
            #更新解和能量
            current_solution = new_solution
            current_energy = new_energy

    return current_solution, current_energy

# 参数设置
max_iterations = 10000  # 迭代次数
initial_temperature = 100  # 初始温度
cooling_rate = 0.01  # 降温速率

# 运行算法>模拟退火算法
best_solution, best_energy = simulated_annealing(max_iterations, initial_temperature, cooling_rate)

print("最优解:", best_solution)
print("最优解的目标函数值:", best_energy)
python">import math
import random

# 初始解:算法从问题的解空间中随机选择一个初始解作为当前解。
# 目标函数:算法需要优化的目标函数定义了解的质量。算法的目标是最小化或最大化这个函数。
# 温度:算法>模拟退火算法引入了一个控制搜索过程的温度参数。温度高时,算法更容易接受比当前解质量差的解;温度逐渐降低,接受劣质解的概率也逐渐减小。
# 邻域操作:算法通过在当前解的邻域中进行随机扰动来生成新的解。邻域操作的设计通常依赖于具体问题。
# 能量差:新解和当前解之间的目标函数值差异被称为能量差。如果新解更优(即目标函数值更小或更大,取决于问题类型),则新解被接受。如果新解劣于当前解,有一定概率接受新解,这个概率由温度和能量差共同决定。
# 降温策略:温度随着迭代逐渐降低,冷却过程的速率由降温策略(通常是指数衰减)决定。随着温度的降低,算法在接受劣质解的概率减小,搜索逐渐趋向于收敛。
# 停止准则:算法根据一定的停止准则(例如达到最大迭代次数、温度降低到某个阈值等)确定何时停止搜索并返回当前解作为最终结果。

# 目标函数(这里以一个简单的二次函数为例)
def objective_function(x):
    return x**2

# 算法>模拟退火算法,主体
def simulated_annealing(max_iterations, initial_temperature, cooling_rate):
    # 选择初始解,从-10,10
    current_solution = random.uniform(-10, 10)
    # 初始解的目标函数值,作为当前解的能量
    current_energy = objective_function(current_solution)
    # 这个循环用于迭代算法>模拟退火算法,参数为迭代次数
    for i in range(max_iterations):
        # 计算当前温度,温度随着迭代逐渐降低,由初始温度initial_temperature按照指数衰减(以cooling_rate为衰减率)。
        temperature = initial_temperature * math.exp(-cooling_rate * i)

        # 生成新解,通过在当前解的基础上加上一个[-1, 1]范围内的随机数
        new_solution = current_solution + random.uniform(-1, 1)
        new_energy = objective_function(new_solution)

        # 计算能量差
        energy_difference = new_energy - current_energy

        # 如果新解更优或者以一定概率接受劣解,这是算法>模拟退火算法的关键部分,允许算法在一定程度上接受劣质解,以避免陷入局部最优解,e的x次方
        # 从[0.0,1.0)
        if energy_difference < 0 or random.random() < math.exp(-energy_difference / temperature):
            #更新解和能量
            current_solution = new_solution
            current_energy = new_energy

    return current_solution, current_energy

# 参数设置
max_iterations = 10000  # 迭代次数
initial_temperature = 100  # 初始温度
cooling_rate = 0.01  # 降温速率

# 运行算法>模拟退火算法
best_solution, best_energy = simulated_annealing(max_iterations, initial_temperature, cooling_rate)

print("最优解:", best_solution)
print("最优解的目标函数值:", best_energy)

执行程序 

         python main.py

展示图 

后记

        觉得有用可以点赞或收藏!


http://www.niftyadmin.cn/n/5091676.html

相关文章

0day是什么,有哪些有影响力的0day漏洞

0day是什么&#xff0c;有哪些有影响力的0day漏洞&#xff1f; 在网络安全中&#xff0c;0day是指已经存在但尚未被软件供应商或开发者知晓的漏洞。这些漏洞可能允许攻击者利用系统的弱点&#xff0c;进行未经授权的操作&#xff0c;如入侵、数据泄露等。 以下是近几年披露的…

用TRIZ创新方法理论指导产品研发学习笔记

事物的矛盾法则 事物的矛盾法则&#xff0c;也称为辩证法的矛盾法则&#xff0c;是马克思主义哲学中的一个基本概念&#xff0c;用于描述事物内部矛盾的本质和发展规律。这个法则强调&#xff0c;事物内部存在着矛盾&#xff0c;而矛盾是事物发展的动力和源泉。 TRIZ理论解决…

云耀服务器L实例部署Nextcloud企业云盘系统|华为云云耀云服务器L实例评测使用体验

文章目录 Nextcloud简介1.1 部署华为云云耀服务器L实例1.1.1 云耀服务器L实例购买1.1.2 云耀服务器L实例初始化配置1.1.3 远程登录云耀服务器L实例 2. 云耀服务器L实例中间件部署2.1 安装配置环境2.1.1 安装基本工具2.1.2 安装MariaDB2.1.3 安装Nginx2.1.4 安装PHP 3. 安装Next…

NewStarCTF2023week2-R!!C!!E!!

打开链接&#xff0c;内容提示是信息泄露 查看源代码没有任何有用信息 打算先扫一下它的目录&#xff0c;发现扫不了 429 表示在一定的时间内用户发送了太多的请求&#xff0c;即超出了频次限制 那么关于信息泄露&#xff0c;我们收集信息有哪些思路方向呢&#xff1f; 1、ro…

【算法与数据结构】--高级算法和数据结构--排序和搜索

一、常见排序算法 以下是一些常见的排序算法&#xff0c;包括冒泡排序、选择排序、插入排序、快速排序和归并排序。每种排序算法的讲解以及附带C#和Java示例&#xff1a; 1.1 冒泡排序 (Bubble Sort) 讲解&#xff1a; 冒泡排序是一种简单的比较排序算法。它多次遍历待排序的…

Spring学习笔记(1)

Spring学习笔记&#xff08;1&#xff09; 一、Spring基础介绍1.1 Spring的学习路线1.2 Spring解决传统的JavaWeb开发的缺点1.3 Spring当中的三种思想1.4 框架的基本特点1.5 Spring概述1.6 BeanFactory快速入门1.7 ApplicationContext快速入门1.8 BeanFactory和ApplicationCont…

leetcode-62.不同路径

1. 题目 2. 解答 dp[i][j]表示机器人位于第i&#xff0c;j位置的时候&#xff0c;有多少路径 如果i 0&#xff0c;dp[i][j] 1;如果j 0&#xff0c;dp[i][j] 1;其他情况dp[i][j] dp[i-1][j] dp[i][j - 1] #include <stdio.h>int solve(int m, int n) {int dp[m][…

OpenCV14-图像平滑:线性滤波和非线性滤波

OpenCV14-图像平滑&#xff1a;线性滤波和非线性滤波 1.图像滤波2.线性滤波2.1均值滤波2.2方框滤波2.3高斯滤波2.4可分离滤波 3.非线性滤波3.1中值滤波3.2双边滤波 1.图像滤波 图像滤波是指去除图像中不重要的内容&#xff0c;而使关心的内容表现得更加清晰的方法&#xff0c;…