You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中treeplot函数在TSP分支定界结果可视化的使用问询

嘿,很高兴看到你已经用分支定界搞定了TSP的求解和路径可视化!关于用treeplot生成你想要的层级分支树状图,我来一步步给你讲清楚怎么操作~

先搞懂treeplot的核心逻辑

treeplot的用法其实很简单:它只需要一个父节点索引向量。向量里的第i个元素,代表树中第i个节点的父节点编号;根节点的父节点要设为0。

针对你说的5城市TSP分支定界场景,树的结构是:

  • 根节点(对应初始城市)是第1个节点,父节点为0
  • 根节点下有4个分支(对应从初始城市出发去另外4个城市),这4个节点的父节点都是1
  • 每个第二层节点下又有3个分支(对应剩下的3个可选城市),这些节点的父节点就是各自的上层节点
  • 以此类推,直到最后一层只剩1个可选城市的节点

手动构建父节点向量(5城市示例)

我给你写了一段示例代码,直接就能生成你要的完整分支树结构,你可以先跑起来看看效果:

% 构建5城市分支定界树的父节点向量
parent = [];

% 1. 根节点(节点1):父节点为0
parent(1) = 0;

% 2. 第一层子节点:节点2-5,父节点都是根节点1
parent(2:5) = 1;

% 3. 第二层子节点:每个第一层节点对应3个分支,共4*3=12个节点(编号6-17)
for i = 2:5
    % 计算当前父节点对应的子节点索引范围
    child_start = (i-1)*3 + 2;
    child_end = i*3 + 1;
    parent(child_start:child_end) = i;
end

% 4. 第三层子节点:每个第二层节点对应2个分支,共12*2=24个节点(编号18-41)
start_idx = 18;
for i = 6:17
    parent(start_idx : start_idx+1) = i;
    start_idx = start_idx + 2;
end

% 5. 第四层子节点:每个第三层节点对应1个分支,共24*1=24个节点(编号42-65)
start_idx = 42;
for i = 18:41
    parent(start_idx) = i;
    start_idx = start_idx + 1;
end

% 绘制树状图
figure;
treeplot(parent);
title('5城市TSP分支定界求解树');

% 给节点添加编号,方便对应你的求解过程
node_labels = arrayfun(@num2str, 1:length(parent), 'UniformOutput', false);
text(get(gca,'XTick'), get(gca,'YTick'), node_labels, 'HorizontalAlignment','center');

结合你的分支定界脚本优化

如果你的分支定界过程中有剪枝操作(比如某些分支的下界已经超过当前最优解,直接跳过),那你不用生成上面的完整树,只需要把实际搜索过的节点按顺序记录父节点即可:

  • 每生成一个新的分支节点,就把它的父节点编号加入parent向量
  • 根节点始终放在第一个位置,父节点设为0

这样画出来的树就是你实际求解过程中真实的搜索树,更有参考价值。

小技巧:自定义树的样式

如果默认的树样式不够好看,你还可以用这些命令调整:

  • 用set(findobj(gca,'Type','line'),'Color','#2E86AB','LineWidth',1.2)修改线条颜色和粗细
  • 用plot(get(gca,'XTick'), get(gca,'YTick'), 'ro','MarkerSize',6,'MarkerFaceColor','#F24C4C')修改节点样式

内容的提问来源于stack exchange,提问作者stefx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:27:27