资源分配matlab算法,MATLAB 资源分配建模,蚁群算法实现,有红包。

clear all

clc

Alpha = 1;

Beta = 5;

C=[

565.0   575.0;

25.0    185.0;

345.0   750.0;

945.0   685.0;

845.0   655.0;

880.0   660.0;

25.0    230.0;

525.0   1000.0;

580.0   1175.0;

650.0   1130.0;

1605.0  620.0;

1220.0  580.0;

1465.0  200.0;

1530.0  5.0;

845.0   680.0;

725.0   370.0;

145.0   665.0;

415.0   635.0;

510.0   875.0;

560.0   365.0;

300.0   465.0;

520.0   585.0;

480.0   415.0;

835.0   625.0;

975.0   580.0;

1215.0  245.0;

1320.0  315.0;

1250.0  400.0;

60.0   180.0;

410.0   250.0;

420.0   555.0;

575.0   665.0;

1150.0  1160.0;

700.0   580.0;

685.0   595.0;

685.0   610.0;

770.0   610.0;

795.0   645.0;

720.0   635.0;

760.0   650.0;

475.0   960.0;

95.0   260.0;

875.0   920.0;

700.0   500.0;

555.0   815.0;

830.0   485.0;

1170.0    65.0;

830.0   610.0;

605.0   625.0;

595.0   360.0;

1340.0   725.0;

1740.0   245.0;

];

city_len = length(C);

Tau = ones(city_len,city_len);%信息素矩阵

D = zeros(city_len,city_len,'double');

antnum = 50;

Q = 100;%信息素的增强强度

tic

for i = 1:city_len

D(i,i) = eps('double');

D(i,i+1:city_len) = sqrt((C(i,1)-C(i+1:city_len,1)).^2+(C(i,2) - C(i+1:city_len,2)).^2);

D(i+1:city_len,i) = D(i,i+1:city_len);

end

Eta = 1./D;

Maxiter = 180;

iter = 1;

antpop(antnum,city_len) = 0;

waitcity = meshgrid(1:city_len,1:antnum);

Rho = 0.1;%信息素的蒸发系数

while iter <= Maxiter

antpop = zeros(antnum,city_len);%假定每只蚂蚁放的城市各不相同

%第一步随机将m只蚂蚁放到n个城市

antpop(:,1) = (propos(antnum))';

waitcity = meshgrid(1:city_len,1:antnum);

for i = 2:city_len

visited = antpop(:,i-1);

waitcity_probability = zeros(antnum,city_len-i+1);

logical_matrix = (bsxfun(@eq,waitcity,visited(:)));

waitcity = waitcity';

waitcity = (reshape(waitcity(~logical_matrix'),city_len-i+1,antnum))';

for j = 1:city_len-i+1

varnum = (visited(:)-1).*city_len+waitcity(1:antnum,j);%元素的位置

waitcity_probability(:,j) = (Tau(varnum).^Alpha).*(Eta(varnum).^Beta);

end

waitcity_probability = bsxfun(@rdivide,waitcity_probability,sum(waitcity_probability,2));

waitcity_probability = cumsum(waitcity_probability,2);

ant_randnum  = rand(1,antnum);

all_pos = bsxfun(@ge,waitcity_probability,ant_randnum(:));

all_pos = sum(cumsum(all_pos,2) == 0,2)+1;%找到逻辑矩阵中第一个不为零的元素的位置

antpop(:,i) = waitcity((all_pos-1).*antnum+(1:antnum)');%矩阵中的元素是按列进行索引的

end

%  %更新信息素增量还有记录本次迭代完成之后的最佳路线

infor_matrix = zeros(city_len,city_len);

all_distance = zeros(1,antnum,'double');

for i = 1:antnum

for j = 1:city_len-1

all_distance(i) = all_distance(i)+sqrt((C(antpop(i,j),1)-C(antpop(i,j+1),1))^2 + (C(antpop(i,j),2)-C(antpop(i,j+1),2))^2);

end

for j = 1:city_len-1

infor_matrix(antpop(i,j),antpop(i,j+1)) = infor_matrix(antpop(i,j),antpop(i,j+1)) +  Q/all_distance(i);

infor_matrix(antpop(i,1),antpop(i,antnum)) = infor_matrix(antpop(i,1),antpop(i,antnum)) + Q/all_distance(i);

end

end

Tau = (1-Rho).*Tau + infor_matrix;

[lia,loc] = min(all_distance);%迭代之后的最佳路线及其路线名

%求所有路线的平均值

mean_distance = mean(all_distance);

iter = iter + 1;

end

lia;

antpop(loc,:);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值