一、简介

模拟退火算法介绍\ \ \ \ \ 3 模拟退火算法的参数\ 模拟退火是一种优化算法,它本身是不能独立存在的,需要有一个应用场合,其中温度就是模拟退火需要优化的参数,如果它应用到了聚类分析中,那么就是说聚类分析中有某个或者某几个参数需要优化,而这个参数,或者参数集就是温度所代表的。它可以是某项指标,某项关联度,某个距离等等。

二、源代码

``` %% %

clc; clear; close all;

%% Problem Definition

model=SelectModel(); % Select Model of the Problem

model.eta=0.1;

CostFunction=@(q) MyCost(q,model); % Cost Function

%% SA Parameters

MaxIt=500; % Maximum Number of Iterations

MaxIt2=80; % Maximum Number of Inner Iterations

T0=100; % Initial Temperature

alpha=0.98; % Temperature Damping Rate

%% Initialization

% Create Initial Solution x.Position=CreateRandomSolution(model); [x.Cost, x.Sol]=CostFunction(x.Position);

% Update Best Solution Ever Found BestSol=x;

% Array to Hold Best Cost Values BestCost=zeros(MaxIt,1);

% Set Initial Temperature T=T0;

%% SA Main Loop

for it=1:MaxIt for it2=1:MaxIt2

% Create Neighborxnew.Position=CreateNeighbor(x.Position);[xnew.Cost, xnew.Sol]=CostFunction(xnew.Position);if xnew.Cost<=x.Cost% xnew is better, so it is acceptedx=xnew;else% xnew is not better, so it is accepted conditionallydelta=xnew.Cost-x.Cost;p=exp(-delta/T);if rand<=px=xnew;endend% Update Best Solutionif x.Cost<=BestSol.CostBestSol=x;endend% Store Best Cost
BestCost(it)=BestSol.Cost;% Display Iteration Information
if BestSol.Sol.IsFeasibleFLAG=' *';
elseFLAG='';
end
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it)) FLAG]);% Reduce Temperature
T=alpha*T;% Plot Solution
figure(1);
PlotSolution(BestSol.Sol,model);
pause(0.01);

end %

function model=CreateRandomModel(I,J)

rmin=10;
rmax=25;
r=randi([rmin rmax],1,I);TotalDemand=sum(r);
cmean=TotalDemand/J;
cmin=round(cmean);
cmax=round(1.25*cmean);
c=randi([cmin cmax],1,J);xmin=0;
xmax=200;ymin=0;
ymax=100;x=randi([xmin xmax],1,I);
y=randi([ymin ymax],1,I);alpha_x=0.1;
xm=(xmin+xmax)/2;
dx=xmax-xmin;
x0min=round(xm-alpha_x*dx);
x0max=round(xm+alpha_x*dx);alpha_y=0.1;
ym=(ymin+ymax)/2;
dy=ymax-ymin;
y0min=round(ym-alpha_y*dy);
y0max=round(ym+alpha_y*dy);x0=randi([x0min x0max]);
y0=randi([y0min y0max]);d=zeros(I,I);
d0=zeros(1,I);
for i=1:Ifor i2=i+1:Id(i,i2)=sqrt((x(i)-x(i2))^2+(y(i)-y(i2))^2);d(i2,i)=d(i,i2);endd0(i)=sqrt((x(i)-x0)^2+(y(i)-y0)^2);
endeta=0.5;model.I=I;
model.J=J;
model.r=r;
model.c=c;
model.xmin=xmin;
model.xmax=xmax;
model.ymin=ymin;
model.ymax=ymax;
model.x=x;
model.y=y;
model.x0=x0;
model.y0=y0;
model.d=d;
model.d0=d0;
model.eta=eta;

end %

function qnew=CreateNeighbor(q)

m=randi([1 3]);switch mcase 1% Do Swapqnew=Swap(q);case 2% Do Reversionqnew=Reversion(q);case 3% Do Insertionqnew=Insertion(q);
end

end

function qnew=Swap(q)

n=numel(q);i=randsample(n,2);
i1=i(1);
i2=i(2);qnew=q;
qnew([i1 i2])=q([i2 i1]);

end

function qnew=Reversion(q)

n=numel(q);i=randsample(n,2);
i1=min(i(1),i(2));
i2=max(i(1),i(2));qnew=q;
qnew(i1:i2)=q(i2:-1:i1);

end

function qnew=Insertion(q)

n=numel(q);i=randsample(n,2);
i1=i(1);
i2=i(2);if i1<i2qnew=[q(1:i1-1) q(i1+1:i2) q(i1) q(i2+1:end)];
elseqnew=[q(1:i2) q(i1) q(i2+1:i1-1) q(i1+1:end)];
end

end ```

三、运行结果

\ \

四、备注

版本:2014a

【VRP问题】基于matlab模拟退火算法求解带容量的VRP问题(多车型)相关推荐

  1. 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  2. 【TWVRP】基于matlab模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】

    ⛄一.模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火 ...

  3. 【VRP】基于matlab模拟退火算法求解单中心多车辆路径规划问题【含Matlab源码 1072期】

    ⛄一.模拟退火算法简介 1 模拟退火算法的原理 模拟退火算法(SA)是一种适用于大规模组合优化问题的有效近似算法,来源于对固体退火过程的模拟.统计力学表明,在给定初始温度的条件下,通过将温度缓慢降低, ...

  4. 【TWVRP】基于matlab鲸鱼算法求解带时间窗开放式车辆路径问题【含Matlab源码 1986期】

    ⛄一.鲸鱼算法简介 鲸鱼优化算法(Whale Optimization Algorithm,WOA)是澳大利亚学者Mirjalili等根据座头鲸的狩猎方式提出的一种新的群智能优化算法.鲸鱼在大海中随机 ...

  5. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  7. 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab黑猩猩算法求解单目标问题[含Matlab源码 1413期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  8. 【物流选址】基于matlab免疫算法求解物流选址问题【含Matlab源码 020期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物流选址]基于matlab免疫算法求解物流选址问题[含Matlab源码 020期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  9. MATLAB模拟退火算法求解超市物流配送选址问题实例

    模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...

最新文章

  1. buffer sort Oracle,[转]BUFFER SORT是BUFFER却不是SORT
  2. hduoj4092 Yummy Triangular Pizza(打表)
  3. matlab仿真随机数的产生
  4. 三十三、Scrapy中的强大媒体管道ImagesPipeline
  5. c语言输入n个数按大小输出,输入n个整数并输出,用c语言表达
  6. TensorFlow.js 来了!浏览器上线机器学习功能
  7. Component 初识组件
  8. 大容量内存的电脑提速技巧
  9. 《惢客创业日记》2021.02.12(周五)月老的新口号
  10. 有效使用网易有道词典客户端
  11. 我的公司不是家 【联想员工亲历联想大裁员】
  12. 令人眼前一亮的IDEA 2021
  13. 电力,地铁,医生等行业值班员全能倒班日历助手
  14. 高校学籍管理系统 _数据库系统概论课程设计
  15. 什么叫h5项目_HTML5和H5是一个意思吗
  16. NVIC中断优先级管理
  17. iMAG(爱码哥)新建应用
  18. 微信hook——登录界面的账号密码
  19. 定期存款可以提前取出来吗_定期存款可以提前取出来吗 定期存款提前取出利息是怎么算的...
  20. 计算理论和自动机理论学习笔记

热门文章

  1. 目标检测—SSD系列算法原理介绍
  2. [Python]学习笔记5——For循环
  3. 使用荷兰式拍卖模型以最优惠的价格出售您的 NFT
  4. python----最长不重复子串
  5. openGrok手动更新索引的方法
  6. SCSI硬盘跳线设主从盘(强烈推荐此文)
  7. Linux-Ubuntu Desktop 18.04 LTS版本的安装(支持到2023年)
  8. 工业互联网的关键技术:边缘计算与预测性维护结合
  9. 蓝牙秤方案开发需要注意什么?
  10. MFC 游戏贴图与透明特效的实现