Matlab 模拟退火算法模型代码

function [best_solution,best_fit,iter] = mySa(solution,a,t0,tf,Markov)
% 模拟退化算法
% ===== 输入 ======%
% solution 初始解
% a 温度衰减系数 0.99
% t0 初始温度 120
% tf 最终温度 1
% Markov 马尔科夫链长度 10000
% ====== 输出 =====%
% best_solution 最优解
% best_fit 最优解目标值
% iter 迭代次数
n = length(solution);
t = t0;
solution_new = solution; % 初始解赋给最新的解
best_fit = Inf; % 初始化最优适应度(最差的适应度)
fit = Inf; % 初始化当前的适应度
best_solution = solution; % 最优解
iter = 1;
% -----------------------迭代过程------------------------------------%
while t >= tf
for j = 1:Markov
% -----------------------产生新解过程------------------------------------%
%进行扰动,产生新的序列solution_new;
if (rand < 0.7) % 概率小于0.7 采取交换两个数位置的方式产生新解
ind1 = 0; ind2 = 0;
while(ind1 == ind2 && ind1 >= ind2)
ind1 = ceil(rand*n);
ind2 = ceil(rand*n);
end
temp = solution_new(ind1);
solution_new(ind1) = solution_new(ind2);
solution_new(ind2) = temp;
else % 概率大于等于0.7 采取成组交换连续三个数位置的方式产生新解
ind = zeros(3,1);
L_ind = length(unique(ind));
while (L_ind < 3)
ind = ceil([rand*n rand*n rand*n]);
L_ind = length(unique(ind));
end
ind0 = sort(ind);
a1 = ind0(1); b1 = ind0(2); c1 = ind0(3);
solution0 = solution_new;
solution0(a1:a1+c1-b1-1) = solution_new(b1+1:c1);
solution0(a1+c1-b1:c1) = solution_new(a1:b1);
solution_new = solution0;
end
% -----------------------计算适应度过程------------------------------------ %
%计算适应度fit_new
fit_new = myFitCal(solution_new);
% -----------------------解的更新过程------------------------------------ %
if fit_new<fit
fit = fit_new;
solution = solution_new;
%对最优路线和距离更新
if fit_new < best_fit
iter = iter + 1;
best_fit = fit_new;
best_solution = solution_new;
end
else
if rand<exp(-(fit_new-fit)/t)
solution = solution_new;
fit = fit_new;
end
end
solution_new = solution;
end
t = t*a; %降温
end
Matlab 模拟退火算法模型代码的更多相关文章
- Matlab 非线性规划问题模型代码
非线性规划问题的基本内容 非线性规划解决的是自变量在一定的非线性约束或线性约束组合条件下,使得非线性目标函数求得最大值或者最小值的问题. 当目标函数为最小值时,上述问题可以写成如下形式: \[ \mi ...
- Matlab 线性规划问题模型代码
线性规划问题的基本内容 线性规划解决的是自变量在一定的线性约束条件下,使得线性目标函数求得最大值或者最小值的问题. \[ \min z=\sum_{j=1}^{n} f_{j} x_{j} \] \[ ...
- Matlab 图论最短路问题模型代码
最短路问题的基本内容 最短路问题研究的是,在一个点与点之间连接形成的网络图中,对应路径赋予一定的权重(可以理解为两点之间的距离),计算任意两点之间如何和走,路径最短的问题.在这里的距离可以理解成各种两 ...
- Matlab随笔之模拟退火算法
问题描述: 我方有一个基地,经度和纬度为( 70,40).假设我方飞机的速度为 1000 公里/小时. 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地.在敌方每一目 标点的侦察时间不计 ...
- 模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径
模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...
- Matlab 整数线性规划问题模型代码
整数线性规划问题的基本内容 整数线性规划解决的是自变量在一定的线性约束条件下,使得线性目标函数求得最大值或者最小值的问题.其中自变量只能取整数.特别地,当自变量只能取0或者1时,称之为 0-1 整数规 ...
- [原创] Matlab 指派问题模型代码
指派问题的基本内容 一般来说指派问题解决的是如何将任务分配到人,使得任务完成的效益最大化(成本型效益则求最小值,利润型效益则求最大值).上述问题一个 0 - 1 整数规划问题. 问题围绕着任务和人展开 ...
- 模拟退火算法(SA)求解TSP 问题(C语言实现)
这篇文章是之前写的智能算法(遗传算法(GA).粒子群算法(PSO))的补充.其实代码我老早之前就写完了,今天恰好重新翻到了,就拿出来给大家分享一下,也当是回顾与总结了. 首先介绍一下模拟退火算法(SA ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
随机推荐
- django前后端分离部署
部署静态文件: 静态文件有两种方式1:通过django路由访问2:通过nginx直接访问 方式1: 需要在根目录的URL文件中增加,作为入口 url(r'^$', TemplateView.as_vi ...
- Jetbrains好用的插件(经验总结)
# Jetbrain好用的插件(经验总结) 笔者使用过idea,phpstorm,webstorm,pycharm和goland开发过项目,不得不说,Jetbrains的编辑器每一款都挺好用的,而且快 ...
- Log2Net的部署和运维
前面几节中,笔者介绍了Log2Net组件的方方面面.但是,有人说,我用不起来,各种头疼的小问题.下面,我们就具体的看一看要怎么把这个组件应用到实际的项目中吧. 一.Log2Net组件的发布 前文中,我 ...
- SpringMVC源码分析3:DispatcherServlet的初始化与请求转发
在我们第一次学Servlet编程,学java web的时候,还没有那么多框架.我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根据需要重写一下doGet,doPost方法,跳转 ...
- Centos知识
1.看系统的版本: cat /etc/redhat-release 2.看内核版本: uname -r 3.查看系统是32位还是64位 uname - m 4.磁盘: 磁盘分区有主分区.扩展分区和逻辑 ...
- Linux Capabilities 简介
为了执行权限检查,Linux 区分两类进程:特权进程(其有效用户标识为 0,也就是超级用户 root)和非特权进程(其有效用户标识为非零). 特权进程绕过所有内核权限检查,而非特权进程则根据进程凭证( ...
- java JVM原理讲解和调优和gc
- Leetcode之回溯法专题-79. 单词搜索(Word Search)
Leetcode之回溯法专题-79. 单词搜索(Word Search) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元 ...
- [SQL] 外卖系统数据库设计
注意: 1.项目需求:小程序外卖系统,以美团,饿了么为参考. 2.表设计没有外键约束,设计是在程序中进行外键约束. 3.希望通过分享该数据库设计,获取大家的建议和讨论. SQL: CREATE DAT ...
- 【sybase】You can’t run SELECT INTO in this database的解决办法
进入master 数据库,使用sp_dboption test ,'select into',true命令(其中test为要设置可用的数据库)