模拟退火(SA)算法

news2024/11/15 14:09:15

目录

模拟退火算法

主要代码

Mutate

Sphere


模拟退火算法


主要代码


repmat 重复数组副本

B = repmat(A,n) 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n

unifrnd 生成连续统一的随机数

sort 对数组进行排序

semilogy 半对数图,y 轴有对数刻度

semilogy(X,Y) 在 x 轴上使用线性刻度、在 y 轴上使用以 10 为底的对数刻度来绘制 x 和 y 坐标。

  • 要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。

  • 要在同一组坐标轴上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。

semilogy(X,Y,LineSpec) 使用指定的线型、标记和颜色创建绘图。

semilogy(X1,Y1,...,Xn,Yn) 在同一组坐标轴上绘制多对 x 和 y 坐标。此语法可替代将坐标指定为矩阵的形式。

clc;
clear;
close all;

%% Problem Definition

CostFunction = @(x) Sphere(x);    % Cost Function 成本函数

nVar = 5;              % Number of Decision (Unknwon) Variables决策数

VarSize = [1 nVar];     % Decision Variables Matrix Size

VarMin = -10;           % Lower Bound of Decision Variables
VarMax = 10;           % Upper Bound of Decision Variables


%% SA Parameters

MaxIt = 1000;     % Maximum Number of Iterations最大迭代次数

MaxSubIt = 20;    % Maximum Number of Sub-iterations最大次迭代次数

T0 = 0.1;       % Initial Temp.初始温度

alpha = 0.99;     % Temp. Reduction Rate温度降低速率

nPop = 10;        % Population Size人口规模

nMove = 5;        % Number of Neighbors per Individual

mu = 0.5;       % Mutation Rate变异率

sigma = 0.1*(VarMax-VarMin);    % Mutation Range (Standard Deviation)突变范围(标准偏差)

%% Initialization

% Create Empty Structure for Individuals
empty_individual.Position = [];
empty_individual.Cost = [];

% Create Population Array
pop = repmat(empty_individual, nPop, 1);

% Initialize Best Solution
BestSol.Cost = inf;

% Initialize Population
for i = 1:nPop
    
    % Initialize Position
    pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
    
    % Evaluation
    pop(i).Cost = CostFunction(pop(i).Position);  % Cost Function 成本函数
    
    % Update Best Solution
    if pop(i).Cost <= BestSol.Cost
        BestSol = pop(i);
    end
    
end

% Array to Hold Best Cost Values
BestCost = zeros(MaxIt, 1);    % Maximum Number of Iterations最大迭代次数

% Intialize Temp.
T = T0;

%% SA Main Loop

for it = 1:MaxIt  %MaxIt最大迭代次数
    
    for subit = 1:MaxSubIt   %MaxSubIt最大次迭代次数
        
        % Create and Evaluate New Solutions
        newpop = repmat(empty_individual, nPop, nMove);
        for i = 1:nPop
            for j = 1:nMove
                
                % Create Neighbor
                newpop(i, j).Position = Mutate(pop(i).Position, mu, sigma, VarMin, VarMax);
                
                % Evaluation
                newpop(i, j).Cost = CostFunction(newpop(i, j).Position);
                
            end
        end
        newpop = newpop(:);
        
        % Sort Neighbors
        [~, SortOrder] = sort([newpop.Cost]);
        newpop = newpop(SortOrder);
        
        for i = 1:nPop
            
            if newpop(i).Cost <= pop(i).Cost
                pop(i) = newpop(i);
                
            else
                DELTA = (newpop(i).Cost-pop(i).Cost)/pop(i).Cost;
                P = exp(-DELTA/T);
                if rand <= P
                    pop(i) = newpop(i);
                end
            end
            
            % Update Best Solution Ever Found
            if pop(i).Cost <= BestSol.Cost
                BestSol = pop(i);
            end
        
        end

    end
    
    % Store Best Cost Ever Found
    BestCost(it) = BestSol.Cost;
    
    % Display Iteration Information
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
    
    % Update Temp.
    T = alpha*T;
    
    sigma = 0.98*sigma;
    
end

%% Results

figure;
%plot(BestCost, 'LineWidth', 2);
semilogy(BestCost, 'LineWidth', 2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;

 


Mutate


rand 生成均匀分布的随机数

randn 生成正态分布的随机数

function y = Mutate(x, mu, sigma, VarMin, VarMax)

    A = (rand(size(x)) <= mu);
    J = find(A == 1);

    y = x;
    y(J) = x(J)+sigma*randn(size(J));

    % Clipping
    y = max(y, VarMin);
    y = min(y, VarMax);
    
end

Sphere


function z = Sphere(x)
    
    z = sum(x.^2);

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音百科词条创建在哪里?

抖音作为中国火爆的短视频平台&#xff0c;拥有相当庞大的用户群体&#xff0c;用户在抖音上创建百科词条就可以获得非常可观的曝光和展现&#xff0c;抖音百科词条是通过哪种方式创建的呢&#xff1f;想要创建一个抖音百科怎么做&#xff1f;接下来伯乐网络传媒就来给大家讲一…

Linux之进程信号(上)

文章目录 前言一、进程信号二、查看命令kill -l与信号解释man 7 signal1.kill -l2.man 7 signal 三、信号的产生1.按键ctrl cctrl zctrl \ 2.系统调用kill——向任意进程发送信号raise——进程给自己发送任意信号abort——进程给自己指定的信号&#xff08;6号信号&#xff…

主流解压缩软件有哪些?这四款可以满足你的所有需求

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 第一款&#xff1a;bandizip&#xff08;推荐&#xff09; 第二款&#xff1a;7-zip 第三款&#xff1a;Nanazip 第四款&#xff1a…

Vue中如何进行表单自定义验证

Vue中如何进行表单自定义验证 在Vue应用中&#xff0c;表单验证是非常重要的一部分。Vue提供了一些内置的验证规则&#xff0c;比如required、min、max等。但是有时候我们需要对表单进行自定义验证&#xff0c;以满足特定的业务需求。本文将介绍如何在Vue中进行表单自定义验证…

第十章 数学相关

第十章 数学相关 第一节 集合 真题&#xff08;2010-53&#xff09;-数学相关-集合-画饼集能力-朴素逻辑 53.参加某国际学术研讨会的 60 名学者中&#xff0c;亚裔学者 31 人&#xff0c;博士 33 人&#xff0c;非亚裔学者中无博士学位的 4 人。根据上述陈述&#xff0c;参…

Java16:集合

一&#xff1a;Collecction接口 1.单列集合框架结构 》Collection接口&#xff1a;单列集合&#xff0c;用来存储一个一个的对象 》 List接口&#xff1a;存储有序的&#xff0c;可重复的数据---》动态数组&#xff0c;实现类&#xff1a;ArrayList&#xff0c;LinkedList,…

【深蓝学院】手写VIO第3章--基于优化的 IMU 与视觉信息融合--作业

0. 题目 1. T1 T1.1 绘制阻尼因子曲线 将尝试次数和lambda保存为csv&#xff0c;绘制成曲线如下图 iter, lambda 1, 0.002000 2, 0.008000 3, 0.064000 4, 1.024000 5, 32.768000 6, 2097.152000 7, 699.050667 8, 1398.101333 9, 5592.405333 10, 1864.135111 11, 1242.7567…

【书影观后感 十四】左晖-做难而正确的事

距离上一本完整读完的书《李自成》及据此而作的读后感【书影观后感 十三】甲申三百七十八年祭已经接近一年时间了&#xff0c;最近心血来潮读了李翔的访谈形式系列《详谈》的第一本《左晖-做难而正确的事》。 虽然这本薄薄的书只有171页&#xff0c;访谈的形式也看似比较随意…

因果推断18--估计个体治疗效果:泛化界和算法CRF(个人笔记)

目录 1. 介绍 2. 相关工作 3.估计ITE&#xff1a;误差界 4. 估计ITE的算法 5.实验 5.1. 模拟结果&#xff1a;IHDP 5.2. 现实世界的结果&#xff1a;工作 5.3. 结果 6.结论 参考 英文题目&#xff1a;Estimating individual treatment effect: generalization bounds…

【Python plotly】零基础也能轻松掌握的学习路线与参考资料

Python plotly是一个优秀的数据可视化工具&#xff0c;通过使用Python语言和Plotly的图表支持库&#xff0c;可以轻松地创建交互式和动态图表&#xff0c;Python plotly的可视化效果美观且易于实现。 学习路线&#xff1a; Python基础语法和Numpy、Pandas基础学习 Python是一…

碳排放预测模型 | Python实现基于LSTM长短期记忆神经网络的碳排放预测模型(预测未来发展趋势)

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于LSTM长短期记忆神经网络的碳排放预测模型(预测未来发展趋势) 研究内容 这是数据集的链接:https://github.com/owid/co2-data/blob/master/owid-co2-da…

windows一键安装redis3.2.100

下载 下载地址:https://gitcode.net/zengliguang/windows_redis_offline_install.git 使用git进行进行clone下载 在电脑桌面或者其他文件夹下 &#xff0c;鼠标右键点击 选择git clone &#xff0c;下图中url为下载地址&#xff0c;Directory为本地存储路径&#xff0c;点击…

ORB_SLAM3 闭环检测

ORB SLAM3系统初始化ORB SLAM3 构建FrameORB_SLAM3 单目初始化ORB_SLAM3 双目匹配ORB_SLAM3_IMU预积分理论推导(预积分项)ORB_SLAM3_IMU预积分理论推导(噪声分析)ORB_SLAM3_IMU预积分理论推导(更新)ORB_SLAM3_IMU预积分理论推导(残差)ORB_SLAM3_优化方法 Pose优化ORB_SLAM3 闭环…

【量化交易笔记】8.基于深度学习(LSTM)预测股票价格

前言 前一章节&#xff0c;已作随机森林来预测股票价格&#xff0c;也是一种比较常见的方法&#xff0c;本章基于深度学习算法来处理时间序列&#xff0c;来预测股票未来的价格。LSTM是一种特殊类型的循环神经网络&#xff08;RNN&#xff09;&#xff0c;在自然语言处理和时间…

【C语言之函数栈帧】(动态图—巨细)一文带你了解局部变量随机值及栈区上的函数调用

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 局部变量为什么是随机值?函数是如何调用的&#xff1f; ✉️ 该篇将使用该编译器&#xff0c;通过介绍栈帧的创建和销毁来深入了解局…

计算机网络开荒3-传输层

文章目录 一、传输层概述1.1 网络层 vs 传输层 二、多路复用 多路分用三、UDP3.1 RDT3.1.1 Rdt3.1.1.1 Rdt1.03.1.1.2 Rdt2.03.1.1.3 Rdt2.13.1.1.4 Rdt2.23.11.5 Rdt 3.0 四、滑动窗口协议4.1 流水线机制4.1.2 滑动窗口协议GBNSR 五、TCP5.1 可靠数据传输5.1.1 RTT和超时 5.2 …

Vue中如何进行图表绘制

Vue中如何进行图表绘制 数据可视化是Web应用中非常重要的一部分&#xff0c;其中图表绘制是其中的重要环节。Vue作为一款流行的前端框架&#xff0c;提供了很多优秀的图表库&#xff0c;以满足不同业务场景下的需求。本文将介绍如何在Vue中进行图表绘制&#xff0c;包括使用Vu…

MM32F3273G8P火龙果开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置

MM32F3273G8P火龙果开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置 1、Systick寄存器 Systick是ARM内核的一个外设&#xff0c;所以在不同芯片的代码上移植比较方便&#xff0c;他总共有4个寄存器&#xff0c; 从Systick定义中可以看到&#xff1a; typedef struct {__I…

一文看懂Java中的锁

阅读本文你可以获得 Synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock、Condition、Semaphore、CountDownLatch、CyclicBarrier、JMM、Volatile、Happens-Before。 全文共16000字左右&#xff08;包含示例代码&#xff09;、欢迎收藏、在看、转发分批食用 一…

基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…