这道题其实是第三次的题,第二次的题目是:局部脑血流测定,现在看起来虽然问题简单但没做出来什么新东西,所以直接总结第三次的。
首先,先看题目,图1所示为江平市的蔬菜供应网点图,图中A、B、C为蔬菜收购点,①到⑧为城中的菜市场,各菜市场的每天需求量与供应不平衡时会产生损失费用,蔬菜运输到各菜市场会产生运输费用,题目大概就是这样。 然后我们先梳理一下思路,问题一需要我们设计一种方案,使蔬菜调运及预期的短缺损失最小,这个问题就很明确了,要让运输费用和短缺损失费用之和最小,而运输费用只与运输里程有关、短缺损失费由各个菜市场的短缺量决定,以此建立线性规划模型并进行求解就行了。图1
通过上面对问题进行的初步分析,图1中路网所有节点之间的最短距离首先需要求解的。最短距离矩阵的求解使用Floyd或Dijkstra算法均可,但图1中节点编号不完整,所以重新进行编号如图2所示。图2
根据图2编号顺序将带权邻接矩阵写出,然后直接由Floyd或Dijkstra算法去求解最短距离即可。下面的程序将二者求解的结果进行了比较,看是否一致,当然对本题来说结果是一致的。
清空环境
clc
clear
输入带权邻接矩阵
a1=[0 7 5 4 inf inf inf inf inf inf inf inf inf inf inf;...
7 0 inf 8 3 7 inf inf inf inf inf inf inf inf inf;...
5 inf 0 6 inf inf 5 inf 7 inf inf inf inf inf inf;...
4 8 6 0 7 inf 4 8 inf inf inf inf inf inf inf;...
inf 3 inf 7 0 6 inf 5 inf inf inf inf inf inf inf;...
inf 7 inf inf 6 0 inf 7 inf inf 11 inf inf inf inf;...
inf inf 5 4 inf inf 0 4 inf 7 inf inf inf inf inf;...
inf inf inf 8 5 7 4 0 inf 5 6 inf inf inf inf;...
inf inf 7 inf inf inf inf inf 0 6 inf inf 8 inf 10;...
inf inf inf inf inf inf 7 5 6 0 3 inf 6 inf inf;...
inf inf inf inf inf 11 inf 6 inf 3 0 5 inf 6 inf;...
inf inf inf inf inf inf inf inf inf inf 5 0 inf inf inf;...
inf inf inf inf inf inf inf inf 8 6 inf inf 0 10 5;...
inf inf inf inf inf inf inf inf inf inf 6 inf 10 0 11;...
inf inf inf inf inf inf inf inf 10 inf inf inf 5 11 0]; %各个节点邻接矩阵
调用函数[D,path]=Floyd(a)
Floyd(a1); =
调用函数[min,path]=dijkstra(a,ul,ub)
size(a1); =
D1=zeros(m,n);
for i=1:m
for j=1:n
dijkstra(a1,i,j); =
end
end
判断Floyd和Dijkstra算法所得结果是否相同
disp(D)
==============') =
disp('判断Floyd和Dijkstra算法所得结果是否相同')
if isequal(D, D1)
disp('--------相同')
else
disp('--------不相同')
end
接下来就可以求解LP模型了,模型如下:
关于变量,简单说明D为距离、M为运送重量、N为菜市场需求量、S为缺货损失。
由“linprog”求解上述LP模型,所得结果如图3所示。
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub,options)
图3 A、B、C 三个收购点对①至⑧号菜市场的供应方案
本文全部实现程序以及详细题目,后台回复“NPMCM2”或“FDLP”获取。