💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
用西北角规则和踏脚石方法解决运输问题研究
一、引言
运输问题是一类常见的线性规划问题,其目标是在满足供需平衡的条件下,确定最优的运输方案,以最小化运输成本。西北角规则和踏脚石方法是解决运输问题的两种常用方法。本文将详细介绍这两种方法,并通过案例展示其应用过程。
二、西北角规则
-
定义:
- 西北角规则是一种直观的启发式方法,用于寻找运输问题的初始可行解。它从运价表的西北角(左上角)开始,逐步分配供应量,直到所有供需都得到满足。
-
步骤:
- 从运价表的西北角开始,在格内的右下角标上允许取得的最大数。
- 按行(列)标下一格的数。
- 若某行(列)的产量(销量)已满足,则把该行(列)的其他格划去。
- 重复以上步骤,直至得到一个基本可行解。
-
特点:
- 西北角规则简单快速,但得到的初始解往往不是最优解。
- 它未对运价进行充分考量,只是从西北角处进行迭代。
三、踏脚石方法(Stepping-Stone Method)
-
定义:
- 踏脚石方法是一种迭代算法,用于在得到初始解后搜索最优解。它基于线性规划的原理,通过逐步调整运输量来降低总运输成本。
-
步骤:
- 首先,使用某种初始化算法(如西北角规则)得到一个初始解。
- 然后,使用踏脚石算法进行迭代,每次选择一个空单元格进行分配,并计算新的总运输成本。
- 如果新的总运输成本更低,则接受该分配;否则,撤销该分配并尝试其他单元格。
- 重复以上步骤,直到找到最优解或满足停止条件。
-
特点:
- 踏脚石方法能够逐步逼近最优解,适用于处理规模较大的运输问题。
- 它需要一定的计算量和迭代次数,但通常能够得到比初始解更优的解。
四、案例分析
假设有一个简单的运输问题,其中有两个供应地(A、B)和两个销售地(1、2)。供应地A的供应量为5,供应地B的供应量为3;销售地1的需求量为4,销售地2的需求量为4。运价表如下:
销售地1 | 销售地2 | |
---|---|---|
供应地A | 3 | 6 |
供应地B | 2 | 5 |
-
使用西北角规则求解:
- 从运价表的西北角开始,首先满足销售地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。
-
使用踏脚石方法优化:
- 假设初始解与西北角规则得到的解相同。
- 然后,我们尝试调整运输量来降低总运输成本。例如,我们可以尝试将供应地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.
🌈4 Matlab代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取