用西北角规则和踏脚石方法解决运输问题研究(Matlab代码实现)

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

用西北角规则和踏脚石方法解决运输问题研究

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

用西北角规则和踏脚石方法解决运输问题研究

一、引言

运输问题是一类常见的线性规划问题,其目标是在满足供需平衡的条件下,确定最优的运输方案,以最小化运输成本。西北角规则和踏脚石方法是解决运输问题的两种常用方法。本文将详细介绍这两种方法,并通过案例展示其应用过程。

二、西北角规则

  1. 定义

    • 西北角规则是一种直观的启发式方法,用于寻找运输问题的初始可行解。它从运价表的西北角(左上角)开始,逐步分配供应量,直到所有供需都得到满足。
  2. 步骤

    • 从运价表的西北角开始,在格内的右下角标上允许取得的最大数。
    • 按行(列)标下一格的数。
    • 若某行(列)的产量(销量)已满足,则把该行(列)的其他格划去。
    • 重复以上步骤,直至得到一个基本可行解。
  3. 特点

    • 西北角规则简单快速,但得到的初始解往往不是最优解。
    • 它未对运价进行充分考量,只是从西北角处进行迭代。

三、踏脚石方法(Stepping-Stone Method)

  1. 定义

    • 踏脚石方法是一种迭代算法,用于在得到初始解后搜索最优解。它基于线性规划的原理,通过逐步调整运输量来降低总运输成本。
  2. 步骤

    • 首先,使用某种初始化算法(如西北角规则)得到一个初始解。
    • 然后,使用踏脚石算法进行迭代,每次选择一个空单元格进行分配,并计算新的总运输成本。
    • 如果新的总运输成本更低,则接受该分配;否则,撤销该分配并尝试其他单元格。
    • 重复以上步骤,直到找到最优解或满足停止条件。
  3. 特点

    • 踏脚石方法能够逐步逼近最优解,适用于处理规模较大的运输问题。
    • 它需要一定的计算量和迭代次数,但通常能够得到比初始解更优的解。

四、案例分析

假设有一个简单的运输问题,其中有两个供应地(A、B)和两个销售地(1、2)。供应地A的供应量为5,供应地B的供应量为3;销售地1的需求量为4,销售地2的需求量为4。运价表如下:

销售地1销售地2
供应地A36
供应地B25
  1. 使用西北角规则求解

    • 从运价表的西北角开始,首先满足销售地1的需求4(从供应地A运3,从供应地B运1)。
    • 然后满足销售地2的需求4(全部从供应地A运出,因为供应地A还有剩余的供应量1,但需要从供应地B再运出3以满足销售地2的总需求)。
    • 得到的初始解为:A→1(3),A→2(2+1=3),B→1(1),B→2(3)。总运输成本为3×4+6×2+2×1+5×3=35。
  2. 使用踏脚石方法优化

    • 假设初始解与西北角规则得到的解相同。
    • 然后,我们尝试调整运输量来降低总运输成本。例如,我们可以尝试将供应地A运往销售地2的部分运输量转移到供应地B,因为B到2的运价较低。
    • 经过多次迭代后,我们可能得到更优的解:A→1(4),B→1(0),B→2(4)(注意,这里进行了适当的调整以满足供需平衡)。总运输成本为3×4+5×4=32,比初始解更优。

五、结论

西北角规则和踏脚石方法是解决运输问题的两种有效方法。西北角规则简单快速,但得到的初始解可能不是最优解;而踏脚石方法能够逐步逼近最优解,适用于处理规模较大的运输问题。在实际应用中,可以根据问题的规模和复杂度选择合适的方法来解决运输问题。

📚2 运行结果

部分代码:

%% Eliminate the basic variables that has only one on each row 
   iterationloop=0;
  for i=1:m
      iterationloop=iterationloop+1;
    for i=1:m
      if x22(i,n+1)==1 
          ieliminate=i;
         for j=1:n
             if x22(ieliminate,j)<inf &&   x22(ieliminate,j)>0 
                 jeliminate=j;
                x22(ieliminate,jeliminate)=0;% Eliminate the basic variable on row
                x22(ieliminate,n+1)=x22(ieliminate,n+1)-1; % decrease the number of the basic variable on row one unit
                x22(m+1,jeliminate)=x22(m+1,jeliminate)-1; % decrease the number of the basic variable on column one unit
                      
             end
         end
        
      end
    end
  %% Eliminate the basic variables that has only one on each column
  for j=1:n
      if x22(m+1,j)==1
          jeliminate1=j;
          for i=1:m
              if x22(i,jeliminate1)<inf && x22(i,jeliminate1)>0
                  ieliminate1=i;
                  x22(ieliminate1,jeliminate1)=0;% Eliminate the basic variable on row
                  x22(m+1,jeliminate1)=x22(m+1,jeliminate1)-1; % decrease the number of the basic variable on column one unit
                  x22(ieliminate1,n+1)=x22(ieliminate1,n+1)-1;% decrease the number of the basic variable on row one unit
              end
          end
      end
  end
  %% Control the constructing loop path
  for j=1:n
    for i=1:m
        if (x22(i,n+1)==0 || x22(i,n+1)==2) && (x22(m+1,j)==0 || x22(m+1,j)==2) 
           break
        else
                
      
        end
    end
  end 
  end
 %% Make +/-sign on basic variables in the loop path (x2)
     %1. Add - sign on basic variable on row(imax) and on basic variable on

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)

[1]赵继光,龚益.运输问题的近似解法[J].数量经济技术经济研究, 1985(4):7.

🌈Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值