Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Matlab动态规划的二维矩阵最大和路_Matlab_Max_Dynamic Programming - Fatal编程技术网

基于Matlab动态规划的二维矩阵最大和路

基于Matlab动态规划的二维矩阵最大和路,matlab,max,dynamic-programming,Matlab,Max,Dynamic Programming,交易利他主义者 我试图在NxN的二维方阵中找到从左上角(0,0)到右下角(N-1,N-1)的最大和路径。我可以从点(I,j)移动到(I+1,j),(I,j+1),(I+1,j+1),(I-1,j),(I,j-1),(I-1,j-1),(I+1,j-1)和(I-1,j+1)的任意8个可能的方向,如果可能的方向在矩阵尺寸范围内。矩阵的所有元素都是正的,元素中没有重复 我在MATLAB中尝试了以下方法,得到了奇怪的结果,即从可能的8个方向中只得到两个方向。 另外,如果我能得到矩阵中任意点的最大和路径,

交易利他主义者

我试图在NxN的二维方阵中找到从左上角(0,0)到右下角(N-1,N-1)的最大和路径。我可以从点(I,j)移动到(I+1,j),(I,j+1),(I+1,j+1),(I-1,j),(I,j-1),(I-1,j-1),(I+1,j-1)和(I-1,j+1)的任意8个可能的方向,如果可能的方向在矩阵尺寸范围内。矩阵的所有元素都是正的,元素中没有重复

我在MATLAB中尝试了以下方法,得到了奇怪的结果,即从可能的8个方向中只得到两个方向。 另外,如果我能得到矩阵中任意点的最大和路径,这也会很有帮助

     %% Main Dynamic Programming
     A=int8(100*round((rand(5,5)),2)); % Cost Matrix
     dp=zeros(size(A)); % Secondary matrix for keeping track of the costwhile 
                % traversing
     direction=[1 1;0 1;1 0;-1 -1; -1 1;1 -1;-1 0;0 -1];% 8 possible move
     for i=1:length(A)
         for j=1:length(A)
           neighbor_points=zeros(length(direction),2); 
           cost=zeros(1,length(direction));
           current_point=[i j];
           for n=1:length(direction)
               neighbor_points(n,:)=current_point+direction(n,:);
               neighborX =neighbor_points(n,1);
               neighborY =neighbor_points(n,2);
                    if(neighborX >=1 && neighborX <=size_grid && neighborY 
                        >=1 && neighborY <=size_grid)

                          cost(n)=dp(neighborX, neighborY);

                    end
            end
           [~,ind]=max(cost); 
           dp(i,j)=A(i,j)+dp(neighbor_points(ind,1),neighbor_points(ind,2));
           fprintf('dp(%d,%d) is updated to %f.\n',i,j,dp(i,j));
       end
   end

       %% Back Tracking from end point to start point
      ii=1;
      end_point=[length(A) length(A)];
      Traject(ii,:)=end_point;
      current_point=end_point;
      while ii>0
      ii=ii+1;
      back_track=dp(current_point(1),current_point(2))- 
      A(current_point(1),current_point(2));

      k=find(abs(dp-back_track)<10^-6) ;
      [i, j] = ind2sub(size(A),k);
      new_point=[i j];
     disp(back_track)
     %disp(new_point)
     Traject(ii,:)=new_point;
       if new_point(1)==1 && new_point(2)==1
            break

       end
    current_point=new_point;


   end
    Trajectory=Traject;
%%主动态编程
A=int8(100*轮((兰特(5,5)),2));%成本矩阵
dp=零(尺寸(A));%用于跟踪成本的二次矩阵
%穿越
方向=[11;01;10;-1-1;-11;1-1;-10;0-1];%8可能的行动
对于i=1:长度(A)
对于j=1:长度(A)
相邻点=零(长度(方向),2);
成本=零(1,长度(方向));
当前_点=[i j];
对于n=1:长度(方向)
相邻_点(n,:)=当前_点+方向(n,:);
neighborX=相邻点(n,1);
邻域=邻域_点(n,2);
如果(neighborX>=1&&neighborX=1&&neighborY 0
ii=ii+1;
返回轨道=dp(当前点(1),当前点(2))-
A(当前_点(1)、当前_点(2));

k=find(abs(dp-back_track)“奇怪的结果”不是一个明确定义的问题。请给我们一个可再现的问题,示例输入和预期输出,而不是随机输入和未指定的输出。由于我的解释不好,我只朝两个方向移动(I,j+1)和(I+1,j-1)我尝试了不同的成本矩阵,但没有任何帮助。嗨,Wolfie,我编辑了这篇文章并附上了一张图片以方便使用。最长路径问题是NP难问题。我不希望任何O(n^2)算法来解决它。你能提供O(n^3)算法的伪代码吗