数模matlab入门教程-004-TSP问题通用建模方法与MATLAB求解方法

    科技2024-12-10  18

    数模matlab入门教程-003-TSP问题通用建模方法与C++求解方法 https://blog.csdn.net/CoomCon/article/details/108937551

    在003的基础上继续开始,matlab代码的编写;

    总的来讲,有了C++的基础或者说是经验可以直接进行模仿编写;

    当然先普及一下matlab中所谓的位操作

    1 matlab位操作

    2 TSP代码

    maltab求解TSP的代码:

    %% 邻接矩阵 edges=[0 30 6 4; 30 0 5 10 ;6 5 0 20; 4 10 20 0]; %% 动态规划 %% 初始化dp矩阵 [m,n] = size(edges); stateNum = bitshift(1,n-1); dp = zeros(n,stateNum); %初始化为0 后面可以在循环中变成inf 也可以提前循环初始化为inf % 提前循环初始化为inf for i=1:n for j=1:stateNum dp(i,j)=inf; end end %% 动规算法部分 % 更新第一列 for i=1:n dp(i,1)=edges(i,1); end % 循环迭代求解 % matlab 数组索引只能从1开始 所以需要调整索引 for j=1:stateNum-1 for i=0:n-1 if i==0 || bitand(bitshift(j,-(i-1)),1)==0 %找没去过的 for k=0:n-1 temp2 = bitand(bitshift(j,-(k-1)),1); if k==0 || bitand(bitshift(j,-(k-1)),1)==1 dp(i+1,j+1) = min(dp(i+1,j+1),edges(k+1,i+1)+dp(k+1,bitxor(j,(bitshift(1,k-1)))+1)); end end end end end %% 结果就是 dp(1,stateNum)

    3 dp矩阵

    Processed: 0.061, SQL: 8