MATLAB实现贪心算法

在这里是为了实现:用贪心算法模拟出随机产生的20个点间的最短路径。

蚁群算法实现,有兴趣可以对比一下:MATLAB实现蚁群算法

代码:

n = 20 ;                                   %用于记录点数

x = zeros(1,n) ;                           %产生一个与经过点数相同的行向量
y = zeros(1,n) ;

best = 1:1:n;                              %生成一个用来存储点顺序的矩阵
handle = 1:1:n;

for i = 1 : (n)                            %生成n个随机数
    x(i) = rand * 20 ;                     
    y(i) = rand * 20 ;
end

d = zeros(n) ;
for i = 1 : n 
    for j = 1 : n
        d(i,j) = sqrt( ( x(i) - x(j) ) ^ 2 + ( y(i) - y(j) ) ^ 2) ;         %距离矩阵
    end
end

best(1) = 1;                             %默认起点
num = 1; 
for a = 1:(n-2)                         %需要n-2次判断
    handle(:,1)=[];                     %上一次最优点的数据裁掉
    dis = zeros(1,(n-a));               %用来存剩下各个点的距离
    for b = 1:(n-a)                     %用来获取剩下各个点的距离
        dis(b) = d (num  , handle(b));      
    end
    num1 = find( dis == min(dis) );     %得到最优点所在检索
    
    t = handle(1);                      %将最优点与最前面的点位置进行交换  
    handle(1) = handle(num1);
    handle(num1) = t;
    
    num = handle(1);                    %获取下次进行操作的数
    best(a+1) = handle(1);              %将最优点存入best数组
end

best(n) = handle(num1);                 %补上最后一个点

plot(x(best),y(best),'-+') ;            %用'+'标出点并用实线连接得到最优路径
grid on

运行结果:

 

  • 28
    点赞
  • 160
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
贪心算法是一种基于贪心策略的算法,它在每一步都选择当前最优解,从而希望能够得到全局最优解。下面是一个使用 MATLAB 实现贪心算法的示例: 假设有n个物品和一个背包,每个物品有一个重量wi和一个价值vi,背包有一个容量C。现在需要选择若干个物品放入背包,使得放入的物品总重量不超过C,同时总价值最大。其中,每个物品只能选择放入或不放入背包。 以下是 MATLAB 代码实现: ```matlab function [maxValue, solution] = GreedyKnapsack(weights, values, capacity) % weights: 物品重量向量 % values: 物品价值向量 % capacity: 背包容量 % 计算单位价值 unitValues = values ./ weights; % 按单位价值从大到小排序 [~, index] = sort(unitValues, 'descend'); % 初始化 maxValue = 0; solution = zeros(size(weights)); % 依次选择单位价值最大的物品放入背包 for i = 1:length(weights) if weights(index(i)) <= capacity solution(index(i)) = 1; maxValue = maxValue + values(index(i)); capacity = capacity - weights(index(i)); else solution(index(i)) = capacity / weights(index(i)); maxValue = maxValue + solution(index(i)) * values(index(i)); break; end end end ``` 在上述代码中,我们首先计算每个物品的单位价值,并按照单位价值从大到小排序。然后依次选择单位价值最大的物品放入背包,直到背包容量不足或所有物品均被选择。 最终,函数将返回最大价值和一个布尔向量,表示每个物品是否被选择放入背包。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值