智能优化算法——免疫算法求解选址问题(Python&Matlab实现)

约束条件:

对于某一区域的点的任务点,要对该区域中的任务进行打包,首先算出中心点hi到其余点zj的距离aij;aij中i为该区域有i个打包中心点数,每个打包内除中心点外,还有个j其余点;s为其余点到打包中心点的距离上限;D为其余点与打包点的关系,如果在给定范围以内的取值为1,表示可以打包为一类,为0则不打包;A为一个打包内的所有点距之和。打包示意图如下:

4.3 免疫算法打包程序实现的步骤

Step1:初始化参数并产生初始打包中心点,即初始种群;

Step2:对每个打包内的点进行距离分析;

Step3:分析每个点对所有打包中心点的距离,每个点都可能处于多个打包范围内;

Step4:通过比对步骤2与3中的距离,对于每个任务点而言,优先选择距离最近的一个中心点,并记录;

Step5:判断是否每个点都给予了分类,并检验是否满足条件,是则结束继续步骤6;

Step6:产生新群体,基于步骤4的计算结果进行遗传方式产生新的打包群体;

Step7:比对前一个打包群体,对比各个打包内的A值,保留最小的群体,并循环步骤4-7;

Step8:输出结果。

4.4 Matlab代码

clear

clc

%% 位置坐标

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];

n=length(city_coordinate);

%% step1 参数设置

sizepop=10; % 种群规模

overbest=10; % 记忆库容量大小

MAXGEN=100; % 迭代次数

pcross=0.5; % 免疫细胞遗传过程中的交叉概率

pmutation=0.4; % 免疫细胞遗传过程中的变异概率

s=3; %记录最优个体数

ps=0.95; % 多样性评价参数(一般设置为0.95)

len=10; % 最大打包数

jiange=1000; %打包点之间距离不低于1000m

z=3000; %其余点到中心点距离上限

M=sizepop+overbest;

%% step2 将种群信息定义为一个结构体,方便调用

individuals = struct(‘fitness’,zeros(1,M), ‘concentration’,zeros(1,M),‘excellence’,zeros(1,M),‘chrom’,[]);

%struct函数功能是生成一个具有指定字段名和相应数据的结构数组

%% step3 产生初始抗体种群

individuals.chrom = popinit(city_coordinate,M,len,jiange);%“.chrom”是调用individuals数组

trace=[]; %初始化矩阵,用于记录每代最个体优适应度和平均适应度

%% 迭代寻优

for iii=1:MAXGEN

%% step4 抗体群多样性评价

for i=1:M

individuals.fitness(i) = fitness(city_coordinate,indiv

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值