【VRP问题】基于matlab模拟退火算法求解带容量的VRP问题(多车型)
一、简介
模拟退火算法介绍\ \ \ \ \ 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问题(多车型)相关推荐
- 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 【TWVRP】基于matlab模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】
⛄一.模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火 ...
- 【VRP】基于matlab模拟退火算法求解单中心多车辆路径规划问题【含Matlab源码 1072期】
⛄一.模拟退火算法简介 1 模拟退火算法的原理 模拟退火算法(SA)是一种适用于大规模组合优化问题的有效近似算法,来源于对固体退火过程的模拟.统计力学表明,在给定初始温度的条件下,通过将温度缓慢降低, ...
- 【TWVRP】基于matlab鲸鱼算法求解带时间窗开放式车辆路径问题【含Matlab源码 1986期】
⛄一.鲸鱼算法简介 鲸鱼优化算法(Whale Optimization Algorithm,WOA)是澳大利亚学者Mirjalili等根据座头鲸的狩猎方式提出的一种新的群智能优化算法.鲸鱼在大海中随机 ...
- 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...
- 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...
- 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab黑猩猩算法求解单目标问题[含Matlab源码 1413期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...
- 【物流选址】基于matlab免疫算法求解物流选址问题【含Matlab源码 020期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物流选址]基于matlab免疫算法求解物流选址问题[含Matlab源码 020期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...
- MATLAB模拟退火算法求解超市物流配送选址问题实例
模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...
最新文章
- buffer sort Oracle,[转]BUFFER SORT是BUFFER却不是SORT
- hduoj4092 Yummy Triangular Pizza(打表)
- matlab仿真随机数的产生
- 三十三、Scrapy中的强大媒体管道ImagesPipeline
- c语言输入n个数按大小输出,输入n个整数并输出,用c语言表达
- TensorFlow.js 来了!浏览器上线机器学习功能
- Component 初识组件
- 大容量内存的电脑提速技巧
- 《惢客创业日记》2021.02.12(周五)月老的新口号
- 有效使用网易有道词典客户端
- 我的公司不是家 【联想员工亲历联想大裁员】
- 令人眼前一亮的IDEA 2021
- 电力,地铁,医生等行业值班员全能倒班日历助手
- 高校学籍管理系统 _数据库系统概论课程设计
- 什么叫h5项目_HTML5和H5是一个意思吗
- NVIC中断优先级管理
- iMAG(爱码哥)新建应用
- 微信hook——登录界面的账号密码
- 定期存款可以提前取出来吗_定期存款可以提前取出来吗 定期存款提前取出利息是怎么算的...
- 计算理论和自动机理论学习笔记