初学优化算法和matlab,老师留了个作业。给定27个点的xy坐标,求一个点到这27个点到距离之和最小,用欧式距离。
粒子群初始化和飞行阶段我还算理解,可是如何构建目标函数呢?目标函数是27个距离求和,如何表示呢,真是难到我了。求大家帮帮忙
初学优化算法和matlab,老师留了个作业。给定27个点的xy坐标,求一个点到这27个点到距离之和最小,用欧式距离。
粒子群初始化和飞行阶段我还算理解,可是如何构建目标函数呢?目标函数是27个距离求和,如何表示呢,真是难到我了。求大家帮帮忙
你好目标函数可以这么设置
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个点','距离之和最短点')
这样就行啦,目标函数就是objfun
如有帮助还望给个宝贵的采纳支持一下答主哦,谢谢啦(づ ̄3 ̄)づ╭❤~