当前位置: 首页 > news >正文

模拟退火算法优化灰色

clc;
clear;
close all;
warning off;
%%
tic
T0=1000;   % 初始温度
Tend=1e-3;  % 终止温度
L=200;    % 各温度下的迭代次数(链长)
q=0.9;    %降温速率
X=[16.4700   96.1000
    16.4700   94.4400
    20.0900   92.5400
    22.3900   93.3700
    25.2300   97.2400
    22.0000   96.0500
    20.4700   97.0200
    17.2000   96.2900
    16.3000   97.3800
    14.0500   98.1200
    16.5300   97.3800
    21.5200   95.5900
    19.4100   97.1300
    20.0900   92.5500];

%%
D=Distanse(X);  %计算距离矩阵
N=size(D,1);    %城市的个数
%% 初始解
S1=randperm(N);  %随机产生一个初始路线

%% 画出随机解的路径图
DrawPath(S1,X)
pause(0.0001)
%% 输出随机解的路径和总距离
disp('初始种群中的一个随机值:')
OutputPath(S1);
Rlength=PathLength(D,S1);
disp(['总距离:',num2str(Rlength)]);

%% 计算迭代的次数Time
% Time=ceil(double(solve(['1000*(0.9)^x=',num2str(Tend)])));
syms x;
eq = 1000*(0.9)^x == num2str(Tend);
Time=ceil(double(solve(eq,x)));
count=0;        %迭代计数
Obj=zeros(Time,1);         %目标值矩阵初始化
track=zeros(Time,N);       %每代的最优路线矩阵初始化
%% 迭代
while T0>Tend
    count=count+1;     %更新迭代次数
    temp=zeros(L,N+1);
    for k=1:L
        %% 产生新解
        S2=NewAnswer(S1);
        %% Metropolis法则判断是否接受新解
        [S1,R]=Metropolis(S1,S2,D,T0);  %Metropolis 抽样算法
        temp(k,:)=[S1 R];          %记录下一路线的及其路程
    end
    %% 记录每次迭代过程的最优路线
    [d0,index]=min(temp(:,end)); %找出当前温度下最优路线
    if count==1 || d0<Obj(count-1)
        Obj(count)=d0;           %如果当前温度下最优路程小于上一路程则记录当前路程
    else
        Obj(count)=Obj(count-1);%如果当前温度下最优路程大于上一路程则记录上一路程
    end
    track(count,:)=temp(index,1:end-1);  %记录当前温度的最优路线
    T0=q*T0;     %降温
    fprintf('经过%d代,最优路径距离为:%f\n',count,Obj(count))  %输出当前迭代次数
end
%% 优化过程迭代图
figure
plot(1:count,Obj)
xlabel('迭代次数')
ylabel('距离')
title('优化过程')

%% 最优解的路径图
DrawPath(track(end,:),X)

%% 输出最优解的路线和总距离
disp('最优解:')
S=track(end,:);
p=OutputPath(S);
disp(['总距离:',num2str(PathLength(D,S))]);
disp('-------------------------------------------------------------')
toc

 

http://www.lryc.cn/news/21775.html

相关文章:

  • Pandas怎么添加数据列删除列
  • C++类和对象:构造函数和析构函数
  • 【Stata】从入门到精通.零基础小白必学的教程,一学就fei
  • 【RuoYi优化】调整JVM启动内存
  • [架构模型]MVC模型详细介绍,并应用到unity中
  • ?? JavaScript 双问号(空值合并运算符)
  • 作业2.25----通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作
  • 0101基础概念-图-数据结构和算法(Java)
  • Linux基础命令和工具使用详解
  • 一个好的python文件可以有几种用途?
  • HDFS优化
  • 行测-判断推理-图形推理-样式规律-黑白运算
  • java+springboot+vue高校学生医疗保险管理系统
  • [已解决] AHK 映射 ESC 延迟 500 ms 的严重问题
  • QML state详解
  • 一起Talk Android吧(第五百零六回:如何调整组件在约束布局中的角度)
  • 微信投票-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)
  • duboo+zookeeper分布式架构入门
  • 黑盒测试用例设计方法-等价类划分法
  • 4.OCR文本识别Connectionist Temporal Classification(CTC)算法
  • 误删了Ubuntu/Linux的一些默认用户目录怎么办?
  • ArXiv简介以及论文提交
  • pytorch学习
  • 【OC】块初识
  • 3-2 创建一个至少有两个PV组成的大小为20G的名为testvg的VG
  • 【密码学】 一篇文章讲透数字证书
  • Linux 操作系统原理 — 内存管理 — 虚拟地址空间(x86 64bit 系统)
  • C语言深入知识——(2)指针的深入理解
  • Git使用笔记
  • 数据库管理-第五十八期 倒腾PDB(20230226)