xx_matlab 2021-11-04 00:52 采纳率: 0%
浏览 30

MATLAB粒子群算法求点间最短距离之和

初学优化算法和matlab,老师留了个作业。给定27个点的xy坐标,求一个点到这27个点到距离之和最小,用欧式距离。

粒子群初始化和飞行阶段我还算理解,可是如何构建目标函数呢?目标函数是27个距离求和,如何表示呢,真是难到我了。求大家帮帮忙

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-11-04 10:03
    关注

    你好目标函数可以这么设置

    function dis = fun(xy, x27, y27)
    % xy是一个向量,包含优化需要的未知坐标横坐标xy(1)和纵坐标xy(2)
    % x27、y27是两个列向量,有第一列是x27即27个点的横坐标,第二列是y27即27个点的纵坐标
    x27  = x27(:);
    y27 = y27(:);
    dx =(xy(1)-x27).^2;
    dy =(xy(2)-y27).^2;
    dis = sqrt(dx+dy);
    end
    

    然后主函数里优化代码自己这样调用即可

    rng(0)%为了复现我的结果,我这里固定了随机数种子
    x27 = rand(27,1) ;%随机27个x坐标
    y27 = rand(27,1);%随机27个y坐标
    objfun = @(x)fun(x, x27,y27);%目标函数最小
    % 这里写你的优化代码
    x = fminsearch(objfun, rand(2,1));%你可用其他方法优化,我这里举个栗子
    plot(x27,y27,'ro');
    hold on
    plot(x(1),x(2),'bo','markerfacecolor','b')
    axis([0 1 0 1]); axis('equal')
    legend('27个点','距离之和最短点')
    

    img

    这样就行啦,目标函数就是objfun
    如有帮助还望给个宝贵的采纳支持一下答主哦,谢谢啦(づ ̄3 ̄)づ╭❤~

    评论

报告相同问题?

问题事件

  • 创建了问题 11月4日

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办