多目标优化多机器人海上巡逻的学习启发免疫算法

一、研究核心问题
  • 多目标优化问题:多机器人海上巡逻任务中,需同时最小化总巡逻路径长度、任务完成时间及高风险船舶的访问优先级。

  • 挑战:存在多个帕累托最优解(同一路径的不同巡逻节点导致相同目标值),需抑制冗余解对种群多样性的影响,生成更多有实际意义的巡逻方案。


二、研究方法
  • 学习启发免疫算法(LIA)

    1. UCB变异:结合上置信界(UCB)平衡探索与利用,优先选择目标值优或出现频率低的基因。

    2. 演员-评论家启发交叉:通过历史奖励函数评估基因性能,动态选择优势基因。

    3. 历史信息高效利用:避免存储全部历史种群,仅记录基因奖励表现,节省计算资源。


三、主要研究成果
  1. 收敛性与性能

    • LIA在减少冗余巡逻(Redundant Patrol)和重叠巡逻(Overlapping Patrol)方面显著优于前代算法NISFA(见图6)。

    • 在6艘和10艘船舶场景下,LIA的帕累托解覆盖率(Coverage)和超体积指标(Hypervolume)均优于NNIA、NSGA-II和MOPSO(见图9-11)。

  2. 实际应用验证:生成多组帕累托最优巡逻方案(图7),满足不同决策需求(如最短路径、最快完成时间或高风险优先)。


四、创新之处
  1. 算法设计

    • 首次将UCB和演员-评论家机制引入免疫算法,解决多目标优化中的探索-利用权衡问题。

    • 通过历史奖励函数动态评估基因性能,减少对全局种群的依赖。

  2. 资源效率

    • 仅需记录基因级历史信息,而非完整种群,大幅降低存储与计算开销。


五、研究局限
  1. 可扩展性:船舶数量增加时,编码长度呈指数增长,解空间爆炸导致算法效率下降。

  2. 应用范围:当前算法适用于中小规模问题,大规模场景需进一步优化(如结合自动编码器压缩解空间)。

  3. 参数敏感性:算法性能依赖超参数(如折扣因子 dd),需手动调参。

下面代码为简化版:

%% 参数设置
popSize = 50;       % 种群大小
numGenes = 20;      % 基因长度(示例)
maxGen = 30;        % 最大迭代次数
mutationRate = 0.1; % 变异概率
UCB_C = 1;          % 探索系数

%% 初始化
population = randi([0,1], popSize, numGenes); % 二进制编码
geneRewards = zeros(2, numGenes);   % 记录每个基因位的历史奖励(0和1)
geneCounts = zeros(2, numGenes);    % 记录每个基因位的出现次数

%% 多目标优化主循环
for gen = 1:maxGen
    % 1. 评估目标函数(示例:假目标)
    objectives = [sum(population,2), max(population,[],2)]; % 简化为两目标
    
    % 2. 更新帕累托前沿
    [paretoMask] = isParetoFront(objectives);
    paretoPop = population(paretoMask,:);
    
    % 3. UCB变异操作
    for i = 1:popSize
        for j = 1:numGenes
            if rand() < mutationRate
                % 计算当前基因位的UCB值
                ucb0 = geneRewards(1,j) + UCB_C * sqrt(log(gen)/geneCounts(1,j));
                ucb1 = geneRewards(2,j) + UCB_C * sqrt(log(gen)/geneCounts(2,j));
                population(i,j) = (ucb1 > ucb0);
            end
        end
    end
    
    % 4. 演员-评论家交叉(简化版)
    newPop = [];
    for i = 1:2:popSize
        p1 = population(i,:); p2 = population(i+1,:);
        child = zeros(1,numGenes);
        for j = 1:numGenes
            % 选择历史奖励更高的基因
            if geneRewards(1,j) > geneRewards(2,j)
                child(j) = p1(j);
            else
                child(j) = p2(j);
            end
        end
        newPop = [newPop; child];
    end
    population = newPop;
    
    % 5. 更新基因历史数据(示例:假设奖励为支配计数)
    for j = 1:numGenes
        for bit = 0:1
            mask = (population(:,j) == bit);
            geneRewards(bit+1,j) = sum(paretoMask(mask)); % 支配个体数作为奖励
            geneCounts(bit+1,j) = geneCounts(bit+1,j) + sum(mask);
        end
    end
end

%% 辅助函数:帕累托前沿筛选
function [mask] = isParetoFront(objectives)
    n = size(objectives,1);
    mask = true(n,1);
    for i = 1:n
        for j = 1:n
            if all(objectives(j,:) <= objectives(i,:)) && any(objectives(j,:) < objectives(i,:))
                mask(i) = false; break;
            end
        end
    end
end

代码说明

  1. 核心操作

    • UCB变异:通过历史奖励和出现次数平衡探索与利用,选择UCB值高的基因。

    • 演员-评论家交叉:基于基因位的历史奖励选择优势基因(简化逻辑)。

    • 历史更新:以帕累托前沿中的支配个体数作为基因奖励。

  2. 简化点

    • 目标函数简化为两个假目标(总和与最大值),实际需替换为路径规划的具体计算。

    • 交叉操作省略了复杂的子种群分析,仅对比基因位的历史奖励。

    • 基因编码采用二进制,未实现论文中的具体编码方案(如巡逻节点坐标)。

  3. 运行结果

    • 输出为最终种群中属于帕累托前沿的个体(paretoPop)。

    • 可通过可视化展示目标空间的帕累托前沿分布:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

myxixilovek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值