当前位置: 主页 > 新闻资讯 > 陵园解答

物流配送路径优化问题可以用哪些算法?

2024-04-15 12:40   作者:佚名

作者:京东物流 柳宏

1.1.1 配载

  • 配载代表着某条线路是否具有发往某个方向(区域、省市县、分拣等)的能力,也可以说是网点(分拣中心)是否具有承载配载所指方向货物的能力。一般网络规划者,在均衡线路间货量时,会通过调整配载来完成。
  • 线路上可允许配载货物的 “产品类型、最终妥投目的地”,通过线路的配载,计算 当前网点 到 目的网点 的 下一个网点 ,线路 绑定的配载代表通过当前线路最终可以到达的目的地 。以下图为例


  • 表示:如果放置在整个路由网络资源中,一个标记 T1 的货物要从北京发往福建,可选的路由有①北京站 - 北京 - 武汉 - 福建 - 福建站;②北京站 - 北京 - 广州 - 福建 - 福建站;之所以剔除了北京站 - 北京 - 上海 - 福建 - 福建站以及北京站 - 北京 - 武汉 - 上海 - 福建 - 福建站,正是因为后两条线路中未包含 T1 的配载代码,只标记了 T2 , 说明这条线路只有配载航空的货物,而没有普通陆运的带货能力。
  • 下图就是用于描述配载的树形结构


  • 班期:指的是发运频率,1234567 代表着每周七天中,这个班次的 “上线时间”,一般来讲,维护时缺失某个值,会造成路由中断的现象。
  • 生失效日期:指的是该配载有效时间范围
  • 网点四级地址的关系以配载树的形式展现,勾选节点添加的配载在右侧的配载列表中展示
  • 当某个节点的子节点没有全部勾选时,展示当前勾选的节点到配载列表中
  • 当某个节点的子节点全部勾选时(在符合相关条件时,这里涉及到的算法逻辑后面详述),展示相应的父节点到配载列表中,这个逻辑是递归的


?目前的线路配载前端基于 zTree+FixedHeaderTable+JQuery 实现,通过 zTree 监听节点被选中和取消选中,计算该操作后是否触发节点的合并或展开,进而重新渲染配载列表中的数据

  • 如果一个父节点下的所有子节点都被维护,即使子节点下的班期不同、生失效日期不重叠,系统都会自动合并到父节点。合并的展示效果为:
  • 班期:对于纯新增配载显示 1234567;对于父节点下有一个子节点,班期显示为已存在配载的班期
  • 生失效时间:统一为该切段线路的生失效日期
  • 例如:X 线路被切割成两段,2022-11-02~2023-01-25 以及 2022-01-26~ 长久有效两段,在线路视图点击 2022-11-02~2023-01-25 这段的配载维护,X 下有 A1(配载时间为 2022-11-02~ 长久有效、班期 12),其父节点为 A,A 下还有子节点 A2、A3。今天是 11.17 日,将 A2、A3 都勾选上(时间任意,班期为 12345),配载会立刻合并为 A(生效时间 2022-11-02~2023-01-25,配载 1234567)
线路X  
    生效时间        失效时间
    2022-11-02   2023-01-25

A(父节点):包含A1、A2、A3三个子节点,当前只存在A1的配载如下:

    生效时间        失效时间        班期
A1  2022-11-02   2099-12-31      12
           
参考日期为11.17日,此时勾选A2+A3后触发A的合并,此时配载列表展示A节点

    生效时间        失效时间        班期
A  2022-11-02   2023-01-25      1234567
  • 上面操作触发合并,提交后库中保存的配载记录为:
生效时间        失效时间        班期
A1  2022-11-02    2022-11-16     12
A   2022-11-17    2023-01-25     1234567
  • 原有根据 zTree 节点触发合并的算法有问题,不考虑当前节点下其他子节点的配载的班期和生失效日期,而是根据是否同一个父节点直接合并。导致合并逻辑错误,保存与展示的数据不一致。
  • 条件:同一个父节点 + 各个子节点班期一致
A(父节点):包含A1、A2、A3三个子节点,其中任意节点的班期不一致都无法合并
  • 新添加节点,生效日期 为 参考日期,失效日期 为 线路失效日期
  • 参考日期选择 大于 当前 同级子节点的某天,当触发合并时
  • 合并后的父节点:生效日期取参考日期,失效时间取 同级子节点列表中失效时间最小的
  • 合并后的子节点:

1)如果 原始生效日期 小于 合并后 父节点的生效日期,则切断 原始生效日期~父节点的生效日期 - 1 天(相当于保留切断前的生效日期那一段)

2)如果 原始失效日期 大于 合并后 父节点的失效日期,则切断 父节点的失效日期 + 1 ~ 原始失效日期 (相当于保留切断前的失效日期那一段)

  • ?针对同一个节点的配载生失效日期切断的逻辑,举例
1. 配载A的原始生失效时间为 20221103 - 20221110
2. 配载A在经过同级子节点合并后,生失效时间为 20221105-20221108
3. 那么对于配载A来说,在合并后仍然需要保留两段配载记录
    3.1 生失效时间为 20221103-20221104
    3.2 生失效时间为 20221109-20221110

?采用所见即所的方式保存数据,用户在前端完成切断操作后,保存到数据库的记录与前端展示一致

zTree:配载树
treeNode:配载树中的节点
nodeId:节点id
childrenNodes:包含当前节点的所有子节点集合
stowageList:配载列表的Dom结构
originStowageMapTI:原始配载:{key:节点;value:配载数据的dom结构}
newStowageMapTI:新增节点配载:{key:节点id;value:节点}
stowageFrequencyMap:配载节点和班期关系:{key:节点id;value:班期}
stowageTimeMap:配载节点和生失效日期关系:{key:节点id;value:[生效时间,失效时间]}
frequencyTreeMap:班期和节点的关系:{key:班期;value:节点数组}
node.pid:节点的父id
node.id:节点的id

在配载树上监听事件,当触发选中 / 取消选中时,递归的获取 childrenNodes

维护配载与班期、配载与生失效日期的关系

?将已有配载列表中的数据维护到 stowageFrequencyMap、stowageTimeMap、originStowageMapTI 中

1)如果当前节点非禁用 && 勾选 执行 合并逻辑;否则递归遍历节点;最终返回结果集

2)如果当前节点非半选 && 非父节点,向父节点中查找班期,维护节点属性,加入结果集并返回

3)根据节点的 pid 查找 stowageFrequencyMap 中是否存在班期

配载树中的网点关系主要是四级,举例说明 C(快递全国) 下面某些节点的level 与 pid 的关系

level=1
  pid:C  表示全国

level=2
 pid:C-10 表示华南

level=3
  pid:C-10-16 表示福建

level=4
  pid:C-10-16-1303 表示泉州

算法逻辑:根据pid截取相应的字符串为key,查找是否存在父节点的班期

1. 如果是父节点则遍历,按照每个子节点去 stowageFrequencyMap 中获取班期,分为两种情况如下;找到班期后维护 frequencyTreeMap,将同班期的节点维护到 list 中保存,即形成 班期 - 节点 list 的数据结构

2. 向父节点中获取班期,同上

3. 向子节点中递归获取班期,并将结果保存到新的数据结构 frequencyChildMap 中,然后合并到 frequencyTreeMap 中

对 frequencyTreeMap 集合进行判断,如果数量为 1 表示 与该节点同级的节点班期相同,触发了合并,将节点加入结果集返回;否则说明当前节点的同级节点存在不同班期,不能进行节点向上合并,直接遍历 frequencyTreeMap 中的 value 集合,加入结果集返回

对于触发了合并的结果集 frequencyTreeMap 中的每个节点遍历 同 当前线路的生失效日期比较,取出同级节点中的 最大生效时间最小失效时间作为该同级节点中的最大公共时间范围设置到每个节点属性中

定义变量

1. queryTime:参考日期
2. maxDisableTime:最大失效时间
3. enableTime:线路生效时间
4. disableTime:线路失效时间
5. originEnableTime:记录原始生效时间
6. originDisableTime:记录原始失效时间
7. newDisableTime :enableTime - 24 * 60 * 60 * 1000
8. newEnableTime:disableTime + 24 * 60 * 60 * 1000

?循环遍历每个结果集中的节点,判断是否渲染到配载列表中

?根据当前节点 id 判断是否存在于 stowageList 中,如果存在直接显示;根据节点 id 删除 originStowageMapTI 集合

更新生失效日期,分别判断 原始配载中是否存在需要切断的日期,新添加配载中是否存在需要切断的日期;然后将当前节点添加到配载列表中

  • 遍历 originStowageMapTI ,判断历史的配载节点是否需要进行日期切断,分为以下两种情况;然后根据节点 id 删除 originStowageMapTI
  • 如果 originEnableTime < enableTime:添加新的配载记录,生效时间取 originEnableTime, 失效时间取 newDisableTime
  • 如果 originDisableTime > disableTime:添加新的配载记录,生效时间取 newEnableTime, 失效时间取 originDisableTime
  • 遍历 newStowageMapTI ,判断新添加的节点是否需要进行日期切断;然后根据节点 id 删除 newStowageMapTI
  • 如果 originDisableTime > disableTime:添加新的配载记录,生效时间取 newEnableTime, 失效时间取 originDisableTime

?路由线路配载维护业务核心且频繁使用功能,为了实现业务述求,将完全没有关联的树形结构Dom 列表 结合在一起。采用了多种数据模型 + 数据结构的组合形式,构造两者之间的关系,结合遍历、深度优先搜索、字符串查找等算法进行实现,在春节串点优化专项上线后取得了预期的收益。

1.算法原理

免疫算法是一种群智能搜索算法,其迭代过程具有生成+检测的特点。该算法在保留上一代最佳个体的前提下,可以全局收敛。其主要包含以下几大模块:

1)抗原识别与初始抗体产生。

根据待优化问题的特点设计合适的抗体编码规则,并利用问题的先验知识在此编码规则下产生初始抗体种群。

2)抗体评价。

对抗体的质量进行评价,主要考虑抗体亲和度和个体浓度。评价得出的优质抗体将被选择进行进化免疫操作,劣质抗体将会被更新。

3)免疫操作。

通过免疫选择、克隆、变异、克隆抑制、种群刷新等算子,模拟生物免疫应答中的各种免疫操作,实现寻优搜索。其算子包括亲和度评价算子、抗体浓度评价算子、激励度计算算子、免疫选择算子、克隆算子、变异算子、克隆抑制算子和种群刷新算子等。由于编码方式可能为实数编码、离散编码等,不同编码方式下的算法算子也会有所不同。

2.核心代码

overbest=10;          % 记忆库容量
MAXGEN=100;            % 迭代次数
pcross=0.5;           % 交叉概率
pmutation=0.4;        % 变异概率
ps=0.95;              % 多样性评价参数
length=6;             % 配送中心数
M=sizepop+overbest;
 
%% step1 识别抗原,将种群信息定义为一个结构体
individuals = struct('fitness',zeros(1,M), 'concentration',zeros(1,M),'excellence',zeros(1,M),'chrom',[]);
%% step2 产生初始抗体群
individuals.chrom = popinit(M,length);
trace=[]; %记录每代最个体优适应度和平均适应度
 
%% 迭代寻优
for iii=1:MAXGEN
    iii
     %% step3 抗体群多样性评价
     for i=1:M
         individuals.fitness(i) = fitness(individuals.chrom(i,:));      % 抗体与抗原亲和度(适应度值)计算
         individuals.concentration(i) = concentration(i,M,individuals); % 抗体浓度计算
     end
     % 综合亲和度和浓度评价抗体优秀程度,得出繁殖概率
     individuals.excellence = excellence(individuals,M,ps);
          
     % 记录当代最佳个体和种群平均适应度
     [best,index] = min(individuals.fitness);   % 找出最优适应度 
     bestchrom = individuals.chrom(index,:);    % 找出最优个体
     average = mean(individuals.fitness);       % 计算平均适应度
     trace = [trace;best,average];              % 记录
     
     %% step4 根据excellence,形成父代群,更新记忆库(加入精英保留策略,可由s控制)
     bestindividuals = bestselect(individuals,M,overbest);   % 更新记忆库
     individuals = bestselect(individuals,M,sizepop);        % 形成父代群
 
     %% step5 选择,交叉,变异操作,再加入记忆库中抗体,产生新种群
     individuals = Select(individuals,sizepop);                                                             % 选择
     individuals.chrom = Cross(pcross,individuals.chrom,sizepop,length);                                    % 交叉
     individuals.chrom = Mutation(pmutation,individuals.chrom,sizepop,length);   % 变异
     individuals = incorporate(individuals,sizepop,bestindividuals,overbest);                               % 加入记忆库中抗体      
 
end
 
%% 画出免疫算法收敛曲线
figure(1)
plot(trace(:,1));
hold on
plot(trace(:,2),'--');
legend('最优适应度值','平均适应度值')
title('免疫算法收敛曲线','fontsize',12)
xlabel('迭代次数','fontsize',12)
ylabel('适应度值','fontsize',12)
%% 画出配送中心选址图
%城市坐标
city_coordinate=[1304,2312;3639,1315;4177,2244;3712,1399;3488,1535;3326,1556;3238,1229;4196,1044;4312,790;4386,570;           3007,1970;2562,1756;2788,1491;2381,1676;1332,695;3715,1678;3918,2179;4061,2370;3780,2212;3676,2578;             4029,2838;4263,2931;3429,1908;3507,2376;3394,2643;3439,3201;2935,3240;3140,3550;2545,2357;2778,2826;2370,2975];
carge=[20,90,90,60,70,70,40,90,90,70,60,40,40,40,20,80,90,70,100,50,50,50,80,70,80,40,40,60,70,50,30];
%找出最近配送点
for i=1:31
    distance(i,:)=dist(city_coordinate(i,:),city_coordinate(bestchrom,:)');
end
[a,b]=min(distance');
index=cell(1,length);
for i=1:length
%计算各个派送点的地址
index{i}=find(b==i);
end
figure(2)
title('最优规划派送路线')
cargox=city_coordinate(bestchrom,1);
cargoy=city_coordinate(bestchrom,2);
plot(cargox,cargoy,'rs','LineWidth',2,...
    'MarkerEdgeColor','r',...
    'MarkerFaceColor','b',...
    'MarkerSize',20)
hold on
 
plot(city_coordinate(:,1),city_coordinate(:,2),'o','LineWidth',2,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor','g',...
    'MarkerSize',10)
 
for i=1:31
    x=[city_coordinate(i,1),city_coordinate(bestchrom(b(i)),1)];
    y=[city_coordinate(i,2),city_coordinate(bestchrom(b(i)),2)];
    plot(x,y,'c');hold on
end

3.MATLAB仿真结果

来源 | 物流琅琊阁(ID:wuliu56lyg),作者 | 物流小花

如何减少物流在运输过程中的费用成本?选择一条适合的配送方法和路线尤为重要,如何规划合理的物流配送路线?

01 配送路由规划目的

配送线路设计就是整合影响配送运输的各种因素,适时适当地利用现有的运输工具和道路状况,及时、安全、方便、经济地将客户所需的商品准确地送达客户手中。

在配送运输线路设计中,需根据不同客户群的特点和要求,选择不同的线路设计方法,最终达到节省时间、运距和降低配送 运输成本的目的。

以下为车辆配载和线路优化流程:

02 配送路线规划的目标

目标的选择是根据配送的具体要求、配送中心的实力和客观条件来确定的。由于目标的多样性,我们可以有多种选择方法:

1、以效益为目标,以资源利用最大化为目标。

2、以成本为目标,以减少费用为目标。

3、以更短里程为目标。

4、以更小吨位为目标。

5、以精度更高为目标的选择是配送中心的一项重要服务指标。

6、运输能力利用更合理,劳动力消耗更低。

03 配送路线规划的约束条件

配送目标的实现过程受很多条件的限制,即约束条件。

因而必须在满足约束条件下取得成本最低,或路线最短,或消耗最少等目标,在一般的配送情况下,常见的约束条件主要有:

1、收货人对货物品种、规格和数量的要求。

2、收货人对货物送达时间或时间范围的要求。

3、道路运行条件对配送的要求,如城区的部分道路不允许货车或中型以上货车通行。

4、配送车辆容量的限制。

5、其他的制约条件。

04 配送路线规划方案的形成

由于配送的复杂性,配送路径的优化需结合智能化算法计算,制定合理的配送方案。

配送方案的形成可采用多种方法分析求得。常用的方法有哪些呢?下一节将介绍相应的路由规划方法。

车辆路径问题VRP(Vehicle Routing Problem),?称车辆调度问题。

其需要回答:针对?系列装货点和卸货点,如何组织适当的?车路线,使车辆有序地通过它们。

解决方案思路:在满足?定的约束条件(如货物需求量、发货量、交货时间、车辆运量限制、?驶?程限制、时间限制等)下,如何达到最优的?标(如路程最短、费?最少、时间尽量少、使?车辆台次数尽量少等)。

解决VRP问题的有哪些呢?,主要包括以下这些:

1、定性方法

主要有经验判断法,综合评价法。这些?法配以GPS导航,有一定的可用性。

2、定量方法

1)货物调拨规划

场景:当?个企业的产品有多个供应商和多个市场时,需要制定产品从不同供应地到不同市场的分拨?案。

解决问题:如何在多个供应地和多个需求地之间合理调配货物,在满?需求的前提下实现总运输成本的最?化。

解决?法:图上作业法、表上作业法(西北?法、闭回路法、位势法等)。

2)车辆路径优化

(1)单一车辆配送

场景:对单一运输车辆从起点到终点间的最短行车路线进行优化。

解决方案:一般以?车时间最短、距离最短或费?最?为优化?标,也称为最短路径问题。

解决?法:多阶段动态决策法、Dijkstra?法、旅?商问题模型、中国邮递员问题等。

(2)多车辆路径问题

场景:一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线。

特点:

① 属于节点服务的网络组合最优化问题;

② 除配送中心节点外,其余节点恰由一辆车服务一次;

③ 多车辆路线,且车辆具有容量限制;

④ 各车辆路线所服务的顾客需求总和不得超过车辆容量;

⑤ 求解复杂度属于NP-hard。

解决方案:确定每辆车的?驶路径(或服务顺序),目标使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。

解决方法实践中多采取“启发式方法”求解,如扫描法、?程节约法等。

如:扫描法

其是VRP求解方法中一种先分群再寻找最佳路线的算法。求解过程分为两步:

第一步:是分派车辆服务的站点或客户点;

第二步:是决定每辆车的行车路线。



原理:先以配送中心为原点,将所有需求点的极坐标算出,然后依角度大小以逆时钟或顺时钟方向扫描,若满足车辆装载容量即划分为一群,将所有点扫描完毕后在每个群内部用最短路径算法求出车辆行驶路径。

举例:某公司从其所属的仓库用厢车到各客户点提货,然后将客户的货物运回仓库。装载量以件为单位,送货车每次可运载1万件,完成一次运行路线一般需要一天时间。要求确定:需多少条路线(即多少辆送货车)?

当然了,除上述方法外,还有一些智能算法应?在配送路由规划中,?如模拟退?算法、禁忌搜索算法、遗传算法、蚁群算法和神经?络?法等。

以上配送路由规划的要点及知识的你掌握了吗?

物流配送路径优化目标在我们生活当中是比较重要的,因为现实生活当中的社会分工越来越细致,而且能够明确各个角色的责任和义务,尤其是在物流行业里面智能化和自动化的匹配程度正在逐渐提升,这也会成为整个行业关注的焦点,那么在进行实际配送的过程当中,基本上运输路径优化能够和消费群体联系到一起。运输路径优化如何运用先进算法实现其目标?

物流配送路径优化能够大幅度降低原本运输的总成本,还能够给企业节约一部分费用,尤其是在运输过程当中各个方面的实际支出费用都能够最大程度节约。能够节约车辆的折旧费用,司机的报酬费用以及燃油费用等等,能够把配送里程尽可能最小化,还能把所有配送里程全部整合找到最短距离,让配送车辆数量最小化,确保完成配送任务的前提之下少用车辆。减少成本的同时提升服务水平,尽可能按照客户需求去提供服务。

想要达到路径优化的目标,就要使用物联网技术对所有运输过程进行全面监控和调度,在行车的时候能够对整个过程进行分析,方便指导,找出节省费用的路径,利用先进化技术对配送各种数据进行全面了解,并精准定位,找出合适的路径进行优化和分析,利用最新的成果,积极做路径优化,充分利用各种资源,大幅度降低企业运输成本。

路径优化可以通过智能化技术解决物流配送过程中所遇到的难题,并且给出科学的计算方法,对路径进行全面优化,达到良好的优化目的,通过互联网技术对各个环节进行精准掌控,确保整个优化过程不会特别复杂。

蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。blog.csdn.net/weixin_46

参考文献:

[1]Abdel-Basset, M., Mohamed, R., Jameel, M. et al. Spider wasp optimizer: a novel meta-heuristic optimization algorithm. Artif Intell Rev (2023). Spider wasp optimizer: a novel meta-heuristic optimization algorithm | SpringerLink

小龙虾优化算法(Crayfsh optimization algorithm,COA)由Jia Heming 等人于2023年提出,该算法模拟小龙虾的避暑、竞争和觅食行为,具有搜索速度快,搜索能力强,能够有效平衡全局搜索和局部搜索的能力。blog.csdn.net/weixin_46

参考文献:

[1]Jia, H., Rao, H., Wen, C. et al. Crayfish optimization algorithm. Artif Intell Rev (2023). Crayfish optimization algorithm | SpringerLink

光谱优化算法(Light Spectrum Optimizer,LSO)由Mohamed Abdel-Basset等人于2022年提出。blog.csdn.net/weixin_46

参考文献:

[1]Abdel-Basset M, Mohamed R, Sallam KM, Chakrabortty RK. Light Spectrum Optimizer: A Novel Physics-Inspired Metaheuristic Optimization Algorithm. Mathematics. 2022; 10(19):3466. Mathematics | Free Full-Text | Light Spectrum Optimizer: A Novel Physics-Inspired Metaheuristic Optimization Algorithm

淘金优化算法(Gold rush optimizer,GRO)由Kamran Zolf于2023年提出,其灵感来自淘金热,模拟淘金者进行黄金勘探行为。blog.csdn.net/weixin_46

参考文献:

K. Zolfi. Gold rush optimizer: A new population-based metaheuristic algorithm. Operations Research and Decisions 2023: 33(1), 113-150. DOI 10.37190/ord230108

狐猴优化算法(Lemurs Optimizer,LO)由Ammar Kamal Abasi等人于2022年提出,该算法模拟狐猴的跳跃和跳舞行为,具有结构简单,思路新颖,搜索速度快等优势。blog.csdn.net/weixin_46

参考文献:

[1]Abasi AK, Makhadmeh SN, Al-Betar MA, Alomari OA, Awadallah MA, Alyasseri ZAA, Doush IA, Elnagar A, Alkhammash EH, Hadjouni M. Lemurs Optimizer: A New Metaheuristic Algorithm for Global Optimization. Applied Sciences. 2022; 12(19):10057. Applied Sciences | Free Full-Text | Lemurs Optimizer: A New Metaheuristic Algorithm for Global Optimization

单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客

参考文献:

[1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120

(1)部分代码

close all
clear  
clc
、warning off;
%% 三维路径规划模型定义
global startPos goalPos N
N=2;%待优化点的个数(可以修改)
startPos=[10, 10, 80]; %起点(可以修改)
goalPos=[80, 90, 150]; %终点(可以修改)
SearchAgents_no=30; % 种群大小(可以修改)
Function_name='F1'; %F1:随机产生地图 F2:导入固定地图
Max_iteration=100; %最大迭代次数(可以修改)
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
AlgorithmName={'SWO','COA','LSO','GRO','LO'};%算法名称
addpath('https://www.zhihu.com/question/AlgorithmCode/')%添加算法路径
bestFit=[];%保存各算法的最优适应度值
for i=1:size(AlgorithmName,2)%遍历每个算法,依次求解当前问题
Algorithm=str2func(AlgorithmName{i});%获取当前算法名称,并将字符转换为函数
[Best_score,Best_pos,Convergence_curve]=Algorithm(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);%当前算法求解
%将当前算法求解结果放入data中
data(i).Best_score=Best_score;%保存该算法的Best_score到data
data(i).Best_pos=Best_pos;%保存该算法的Best_pos到data
data(i).Convergence_curve=Convergence_curve;%保存该算法的Convergence_curve到data
bestFit=[bestFit data(i).Best_score];
end

%%  画各算法的直方图
figure 
bar(bestFit)
ylabel('无人机飞行路径长度');
set(gca,'xtick',1:1:size(AlgorithmName,2));
set(gca,'XTickLabel',AlgorithmName)
saveas(gcf,'https://www.zhihu.com/question/Picture/直方图.jpg') %将图片保存到Picture文件夹下面


%%  画收敛曲线
strColor={'r-','g-','b-','k-','m-','c-','y-'};
figure
for i=1:size(data,2)
plot(data(i).Convergence_curve,strColor{i},'linewidth',1.5)%semilogy
hold on
end
xlabel('迭代次数');
ylabel('无人机飞行路径长度');
legend(AlgorithmName,'Location','Best')
saveas(gcf,'https://www.zhihu.com/question/Picture/收敛曲线.jpg') %将图片保存到Picture文件夹下面


%% 显示三维图并保存
path=plotFigure(data,AlgorithmName,strColor);%path是各算法求解的无人机路径
saveas(gcf,'https://www.zhihu.com/question/Picture/路径曲线(三维).jpg') %将图片保存到Picture文件夹下面


%% 显示二维图并保存
view(2)
saveas(gcf,'https://www.zhihu.com/question/Picture/路径曲线(二维).jpg') %将图片保存到Picture文件夹下面


(2)部分结果

查看博主的主页

同类文章推荐
牛奶对胃好吗
同方股份: 公司暂无光刻机的研发
转型期公共决策模式路径优化:从传统模式向动态协同模式的转变
“房住不炒”四年了,天变了
【Pytorch的优化器总结归纳】
强化政策支持和资金保障 促进国民经济循环畅通——财政部党组书记、部长蓝佛安关于当前经济财政形势的问答

咨询登记

平台注册入口