22个点的c都为0.08,%22个点的业务量w为w=(213,203,202,213,222,213,163,163,162,165,176,185,207,178,227,210,228,210,209,236,202,212)% 22个点的坐标 points = [-0.54, 2.38; 0.05, 2.41;0.12,1.21;0.22,3.12;0.82,2.28;0.78,-1.98;1.42,6.72;1.52,5.48;1.38,5.02;1.41,4.53;1.98,2.62;1.78,1.83;1.82,0.74;2.91,1.78;3.52,-0.82;3.62,3.18;3.71,-0.21;4.18,1.85;4.25,1.12;4.03,-2.02;5.02,2.82;6.32,-0.54;]; % 固定的三个点的坐标 A = [1.34, -1.18]; B = [1.72, 1.32]; C = [3.75, 1.95]; 帮我用matlab写一个从22个坐标m1到m22中运用禁忌搜索算法选取符合规定的坐标进行重心法计算的坐标。其规定如下: 1、要求22个点用重心法确定的选址地点为禁忌搜索算法的初始点x。 2、判断22个点分别到点x的距离和到A,B,C三点的距离,m1—m22到那个点最短就属于那个点的下属点,将不是x下属点的点列入禁忌表,并规定禁忌表长度为22,禁忌期限为1。 3、将x下属点用重心法进行计算,新的出的点作为新的x点。 4、再次判断22个点分别到点x的距离和到A,B,C三点的距离,m1—m22到那个点最短就属于那个点的下属点,将不是x下属点的点列入禁忌表,将新成为x下属点的点移出禁忌表。 5、用x的下属点重新更新x站点 6、直到禁忌表中的点不再变化,停止迭代。7、重心法坐标计算公式为x=sum(points*w*c)/sum(w*c)
时间: 2023-06-25 22:05:49 浏览: 37
以下是用matlab实现的代码:
```matlab
% 设置禁忌表长度和禁忌期限
tabuLength = 22;
tabuTenure = 1;
% 初始化禁忌表和当前解
tabuList = zeros(1, tabuLength);
current = mean(points);
while true
% 计算每个点到A、B、C和当前解的距离
distToA = vecnorm(points - A, 2, 2);
distToB = vecnorm(points - B, 2, 2);
distToC = vecnorm(points - C, 2, 2);
distToCurrent = vecnorm(points - current, 2, 2);
% 找到每个点的下属点
subordinate = zeros(1, 22);
for i = 1:22
dists = [distToA(i), distToB(i), distToC(i), distToCurrent(i)];
[~, idx] = min(dists);
subordinate(i) = idx;
end
% 计算每个点的重心法坐标
newPoints = zeros(size(points));
for i = 1:3
idx = find(subordinate == i);
newPoints(idx, :) = mean(points(idx, :), 1);
end
% 选择非禁忌点中最优的点作为新的解
c = 0.08 * ones(1, 22);
w = [213,203,202,213,222,213,163,163,162,165,176,185,207,178,227,210,228,210,209,236,202,212];
f = sum(points .* w .* c, 1) / sum(w .* c);
newCurrent = f;
distToA = vecnorm(newCurrent - A, 2);
distToB = vecnorm(newCurrent - B, 2);
distToC = vecnorm(newCurrent - C, 2);
[~, idx] = min([distToA, distToB, distToC]);
tabuList(subordinate ~= idx) = tabuTenure;
current = newCurrent;
% 判断是否达到停止条件
if all(tabuList > 0)
break;
end
% 更新禁忌表
tabuList = max(tabuList - 1, 0);
end
% 输出结果
disp(current);
```
这里使用了matlab自带的函数`vecnorm`来计算向量的二范数。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)