精华内容
下载资源
问答
  • 基于matlab最大流最小费用代码 适于学习、修改、借鉴
  • 计算最小费用最大流MATLAB源代码,文件名为mp_mc.mfunction[Mm,mc,Mmr]=mp_mc(a,c)A=a; %各路径最大承载流量矩阵C=c; %各路径花费矩阵Mm=0; %初始可行流设为零mc=0; %最小花费变量mcr=0;mrd=0;n=0;while mrd~=inf %...

    计算最小费用最大流MATLAB源代码,文件名为mp_mc.m

    function[Mm,mc,Mmr]=mp_mc(a,c)

    A=a; %各路径最大承载流量矩阵

    C=c; %各路径花费矩阵

    Mm=0; %初始可行流设为零

    mc=0; %最小花费变量

    mcr=0;

    mrd=0;

    n=0;

    while mrd~=inf %一直叠代到以花费为权值找不到最短路径

    for i=1:(size(mcr',1)-1)

    if a(mcr(i),mcr(i+1))==inf

    ta=A(mcr(i+1),mcr(i))-a(mcr(i+1),mcr(i));

    else

    ta=a(mcr(i),mcr(i+1));

    end

    n=min(ta,n); %将最短路径上的最小允许流量提取出来

    end

    for i=1:(size(mcr',1)-1)

    if a(mcr(i),mcr(i+1))==inf

    a(mcr(i+1),mcr(i))=a(mcr(i+1),mcr(i))+n;

    else

    a(mcr(i),mcr(i+1))=a(mcr(i),mcr(i+1))-n;

    end

    end

    Mm=Mm+n; %将每次叠代后增加的流量累加,叠代完成时就得到最大流量

    for i=1:size(a,1)

    for j=1:size(a',1)

    if i~=j&a(i,j)~=inf

    if a(i,j)==A(i,j) %零流弧

    c(j,i)=inf;

    c(i,j)=C(i,j);

    elseif a(i,j)==0 %饱合弧

    c(i,j)=inf;

    c(j,i)=C(j,i);

    elseif a(i,j)~=0 %非饱合弧

    c(j,i)=C(j,i);

    c(i,j)=C(i,j);

    end

    end

    end

    end

    [mcr,mrd]=floyd_mr(c) %进行叠代,得到以花费为权值的最短路径矩阵(mcr)和数值(mrd)

    n=inf;

    end

    %下面是计算最小花费的数值

    for i=1:size(A,1)

    for j=1:size(A',1)

    if A(i,j)==inf

    A(i,j)=0;

    end

    if a(i,j)==inf

    a(i,j)=0;

    end

    end

    end

    Mmr=A-a; %将剩余空闲的流量减掉就得到了路径上的实际流量,行列交点处的非零数值就是两点间路径的实际流量

    for i=1:size(Mmr,1)

    for j=1:size(Mmr',1)

    if Mmr(i,j)~=0

    mc=mc+Mmr(i,j)*C(i,j); %最小花费为累加各条路径实际流量与其单位流量花费的乘积end

    end

    end

    利用福得算法计算最短路径MATLAB源代码,文件名为floyd_mr.m

    function[mr,mrd]=floyd_mr(a)

    1 / 1

    展开全文
  • 最小费用最大流matlab代码运筹学工具 该存储库具有我在做统计学和 OR 副修课程时创建的函数库,并实现了一些用于运筹学和多变量探索性分析的典型算法和方法。 所有代码都是用MATLAB编写的 优化 - 流和网络 (IP) Pape...
  • 计算最小费用最大流MATLAB源代码,文件名为mp_mc.mfunction[Mm,mc,Mmr]=mp_mc(a,c)A=a; %各路径最大承载流量矩阵C=c; %各路径花费矩阵Mm=0; %初始可行流设为零mc=0; %最小花费变量mcr=0;mrd=0;n=0;while mrd~=inf %...

    计算最小费用最大流MATLAB源代码,文件名为mp_mc.mfunction[Mm,mc,Mmr]=mp_mc(a,c)A=a; %各路径最大承载流量矩阵C=c; %各路径花费矩阵Mm=0; %初始可行流设为零mc=0; %最小花费变量mcr=0;mrd=0;n=0;while mrd~=inf %一直叠代到以花费为权值找不到最短路径? ? ?for i=1:(size(mcr',1)-1)? ? ? ? ? ?if a(mcr(i),mcr(i+1))==inf? ? ? ? ? ? ? ? ?ta=A(mcr(i+1),mcr(i))-a(mcr(i+1),mcr(i));? ? ? ? ? ?else? ? ? ? ? ? ? ? ?ta=a(mcr(i),mcr(i+1));? ? ? ? ? ?end? ? ? ? ? ?n=min(ta,n); %将最短路径上的最小允许流量提取出来? ? ?end? ? ?for i=1:(size(mcr',1)-1)? ? ? ? ? ?if a(mcr(i),mcr(i+1))==inf? ? ? ? ? ? ? ? ?a(mcr(i+1),mcr(i))=a(mcr(i+1),mcr(i))+n;? ? ? ? ? ?else? ? ? ? ? ? ? ? ?a(mcr(i),mcr(i+1))=a(mcr(i),mcr(i+1))-n;? ? ? ? ? ?end? ? ?end? ? ?Mm=Mm+n; %将每次叠代后增加的流量累加,叠代完成时就得到最大流量? ? ?for i=1:size(a,1)? ? ? ? ? ?for j=1:size(a',1)? ? ? ? ? ? ? ? ?if i~=j&a(i,j)~=inf? ? ? ? ? ? ? ? ? ? ? ?if a(i,j)==A(i,j) %零流弧? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(j,i)=inf;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(i,j)=C(i,j);? ? ? ? ? ? ? ? ? ? ? ?elseif a(i,j)==0 %饱合弧? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(i,j)=inf;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(j,i)=C(j,i);? ? ? ? ? ? ? ? ? ? ? ?elseif a(i,j)~=0 %非饱合弧? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(j,i)=C(j,i);? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(i,j)=C(i,j);? ? ? ? ? ? ? ? ? ? ? ?end? ? ? ? ? ? ? ? ?end? ? ? ? ? ?end? ? ?end? ? ?[mcr,mrd]=floyd_mr(c) %进行叠代,得到以花费为权值的最短路径矩阵(mcr)和数值(mrd)? ? ?n=inf;end%下面是计算最小花费的数值for i=1:size(A,1)? ? ?for j=1:size(A',1)? ? ? ? ? ?if A(i,j)==inf? ? ? ? ? ? ? ? ?A(i,j)=0;? ? ? ? ? ?end? ? ? ? ? ?if a(i,j)==inf? ? ? ? ? ? ? ? ?a(i,j)=0;? ? ? ? ? ?end? ? ?endendMmr=A-a; %将剩余空闲的流量减掉就得到了路径上的实际流量,行列交点处的非零数值就是两点间路径的实际流量for i=1:size(Mmr,1)? ? ?for j=1:size(Mmr',1)? ? ? ? ? ?if Mmr(i,j)~=0? ? ? ? ? ? ? ? ?mc=mc+Mmr(i,j)*C(i,j); %最小花费为累加各条路径实际流量与其单位流量花费的乘积? ? ? ? ? ?end? ? ?endend利用福得算法计算最短路径MATLAB源代码,文件名为floyd_mr.mfunction[mr,mrd]=floyd_mr(a)n=size(a,1);[D,R]=floyd(a); %通过福德算法得到距离矩阵(D)和路径矩阵(R)mrd=D(1,n); %提取从起点1到终点n的最短距离rd=R(1,n); %提取从起点1开始沿最短路径上下一个点的编号(rd)mr=[1,rd]; %从起点1开始沿最短路径到rd点的最短路径while rd~=n %通过循环将最

    展开全文
  • 最小费用最大流问题matlab实现
  • 下面的最小费用最大流算法采用的是“基于Floyd最短路算法的Ford和Fulkerson迭加算法”,其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确定一条自V1至Vn的最短路;再将这条最短路作为...

    下面的最小费用最大流算法采用的是“基于Floyd最短路算法的Ford和Fulkerson迭加算法”,其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确定一条自V1至Vn的最短路;再将这条最短路作为可扩充路,用求解最大流问题的方法将其上的流量增至最大可能值;而这条最短路上的流量增加后,其上各条弧的单位流量的费用要重新确定,如此多次迭代,最终得到最小费用最大流。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页http://blog.sina.com.cn/greensim)。

    function [f,MinCost,MaxFlow]=MinimumCostFlow(a,c,V,s,t)

    %% MinimumCostFlow.m

    %  最小费用最大流算法通用Matlab函数

    %% 基于Floyd最短路算法的Ford和Fulkerson迭加算法

    % GreenSim团队原创作品,转载请注明

    % Email:greensim@163.com

    % GreenSim团队主页:http://blog.sina.com.cn/greensim

    % http://blog.sina.com.cn/greensim

    http://blog.sina.com.cn/greensim

    展开全文
  • 最大流的网络,可看作为辅送一般货物的运输网络,此时,最大流问题仅表明运输网络运输货物的能力,但没有考虑运送货物的费用
  • 图论最小费用最大流问题程序,图论最短路的Ford迭代算法
  • 下面的最小费用最大流算法采用的是基于Floyd最短路算法的Ford和Fulkerson迭加算法其基本思路为把各条弧上单位流量的费用看成某种长度用Floyd求最短路的方法确定一条自V1至Vn的最短路再将这条最短路作为可扩充路用...
  • 下面的最小费用最大流算法采用的是“基于Floyd最短路算法的Ford和Fulkerson迭加算法”,其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确定一条自V1至Vn的最短路;再将这条最短路作为...

    下面的最小费用最大流算法采用的是“基于Floyd最短路算法的Ford和Fulkerson迭加算法”,其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确定一条自V1至Vn的最短路;再将这条最短路作为可扩充路,用求解最大流问题的方法将其上的流量增至最大可能值;而这条最短路上的流量增加后,其上各条弧的单位流量的费用要重新确定,如此多次迭代,最终得到最小费用最大流。本源码由GreenSim团队原创,转载请注明

    function [f,MinCost,MaxFlow]=MinimumCostFlow(a,c,V,s,t)

    %% MinimumCostFlow.m

    %  最小费用最大流算法通用matlab函数

    %% 基于Floyd最短路算法的Ford和Fulkerson迭加算法

    % GreenSim团队原创作品,转载请注明

    %% 输入参数列表

    %  a        单位流量的费用矩阵

    %  c        链路容量矩阵

    %  V        最大流的预设值,可为无穷大

    %  s        源节点

    %  t        目的节点

    %% 输出参数列表

    %  f        链路流量矩阵

    %  MinCost  最小费用

    %  MaxFlow  最大流量

    %% 第一步:初始化

    N=size(a,1);%节点数目

    f=zeros(N,N);%流量矩阵,初始时为零流

    MaxFlow=sum(f(s,:));%最大流量,初始时也为零

    flag=zeros(N,N);%真实的前向边应该被记住

    for i=1:N

    for j=1:N

    if i~=j&&c(i,j)~=0

    flag(i,j)=1;%前向边标记

    flag(j,i)=-1;%反向边标记

    end

    if a(i,j)==inf

    a(i,j)=BV;

    w(i,j)=BV;%为提高程序的稳健性,以一个有限大数取代无穷大

    end

    end

    end

    if L(end)

    RE=1;%如果路径长度小于大数,说明路径存在

    else

    RE=0;

    end

    %% 第二步:迭代过程

    while RE==1&&MaxFlow<=V%停止条件为达到最大流的预设值或者没有从s到t的最短路

    %以下为更新网络结构

    MinCost1=sum(sum(f.*a));

    MaxFlow1=sum(f(s,:));

    f1=f;

    TS=length(R)-1;%路径经过的跳数

    LY=zeros(1,TS);%流量裕度

    for i=1:TS

    LY(i)=c(R(i),R(i+1));

    end

    maxLY=min(LY);%流量裕度的最小值,也即最大能够增加的流量

    for i=1:TS

    u=R(i);

    v=R(i+1);

    if flag(u,v)==1&&maxLY

    f(u,v)=f(u,v)+maxLY;%记录流量值

    w(u,v)=a(u,v);%更新权重值

    c(v,u)=c(v,u)+maxLY;%反向链路的流量裕度更新

    elseif flag(u,v)==1&&maxLY==c(u,v)%当这条边为前向边且是饱和边时

    w(u,v)=BV;%更新权重值

    c(u,v)=c(u,v)-maxLY;%更新流量裕度值

    w(v,u)=-a(u,v);%反向链路权重更新

    elseif flag(u,v)==-1&&maxLY

    w(v,u)=a(v,u);

    c(v,u)=c(v,u)+maxLY;

    w(u,v)=-a(v,u);

    elseif flag(u,v)==-1&&maxLY==c(u,v)%当这条边为反向边且是饱和边时

    w(v,u)=a(v,u);

    c(u,v)=c(u,v)-maxLY;

    w(u,v)=BV;

    else

    end

    end

    MaxFlow2=sum(f(s,:));

    MinCost2=sum(sum(f.*a));

    if MaxFlow2<=V

    MaxFlow=MaxFlow2;

    MinCost=MinCost2;

    [L,R]=FLOYD(w,s,t);

    else

    f=f1+prop*(f-f1);

    MaxFlow=V;

    MinCost=MinCost1+prop*(MinCost2-MinCost1);

    return

    end

    if L(end)

    RE=1;%如果路径长度小于大数,说明路径存在

    else

    RE=0;

    end

    end

    function [L,R]=FLOYD(w,s,t)

    n=size(w,1);

    D=w;

    path=zeros(n,n);

    %以下是标准floyd算法

    for i=1:n

    for j=1:n

    if D(i,j)~=inf

    path(i,j)=j;

    end

    end

    end

    for k=1:n

    for i=1:n

    for j=1:n

    if D(i,k)+D(k,j)

    D(i,j)=D(i,k)+D(k,j);

    path(i,j)=path(i,k);

    end

    end

    end

    end

    L=zeros(0,0);

    R=s;

    while 1

    if s==t

    L=fliplr(L);

    L=[0,L];

    return

    end

    L=[L,D(s,t)];

    R=[R,path(s,t)];

    s=path(s,t);

    end

    699ba7046c51816a17b33a7caa85f179.png

    0

    展开全文
  • 《使用matlab求解最小费用最大流算问题》由会员分享,可在线阅读,更多相关《使用matlab求解最小费用最大流算问题(8页珍藏版)》请在人人文库网上搜索。1、北京联合大学实验报告项目名称: 运筹学专题实验报告 学 院...
  • 实验三使用matlab求解最小费用最大流算问题 精品文档 精品文档 收集于网络如有侵权请联系管理员删除 收集于网络如有侵权请联系管理员删除 精品文档 收集于网络如有侵权请联系管理员删除 北京联合大学 实验报告 项目...
  • 实 验 三 使 用 ma t l a b 求 解 最 小 费 用 最 大 流 算 问题 精品文档 北京联合大学 实验报告 项目...5 月 6 日 收集于网络如有侵权请联系管理员删除 精品文档 实验三使用 matlab 求解最小费用最大流算问题 一实
  • Costantini 相位解包裹 MATLAB代码,最小费用最大流
  • 汽车生产 Fordco公司在底特律和达拉斯生产...表述一个可以使满足需求的成本最少的最小费用最大流问题并求解。 表1 汽车的运输成本 美元 从 到 城市1 城市2 城市3 底特律 达拉斯 800 500 600 200 300 200
  • 实验三:使用matlab求解最小费用最大流算问题..pdf
  • 联合大学 实验报告 项目名称 运筹学专题实验报告 学 院 自动化 专 业 物流工程 班 级 1201B 学 号81 姓 名 管水城 成 绩 2015 年 5 月 6 日 实验三使用matlab求解最小费用最大流算问题 一实验目的 (1)使学生在程序...
  • 最小费用最大流问题

    千次阅读 2019-07-04 11:11:13
    最小费用最大流问题 解决如下最小费用最大流问题。 查了很多资源发现用MATLAB操作的好用的不多,所以综合了一下很多资源,给出了自己的理解。 基本思路为:把各条弧上单位流量的费用当做距离,用Floyd算法求最...
  • 具体思路:图的建立方式, 超级源点 - >...因为有多种商品,所以可以简化构图过程,每一次求一种商品的最小费用最大流,然后最终将所有商品的最小费用最大流的总和加起来就可以了,注意条件在代码中...
  • 基于matlab2016的最小费用最大流问题求解,内含增广链路函数[path,value] = AugmentingPath(G,s,t)和一个demo函数。 寻找增广链路时,使用了matlab自带的最短路径shortestpath函数,demo中使用了matlab自带的...
  • 最小费用最大流

    2018-10-04 17:50:33
    转为最小费用最大流来做,也就是说每条边只能用一次,我们把给出的每条边的长度作为这条边的花费,然后设边的容量为1 因为是无向图,所以对于每条边(x,y)要建立四条边,x-&gt;y容量为1费用为L(长度)的边,y-&...
  • 博文链接https://blog.csdn.net/weixin_43428682/article/details/94600364。 正确代码链接...这个代码有一点问题,不需要下载。查看我的博客中提供的链接,那个好用。适用于2014a以后的版本
  • 最小费用最大流代码模板及注释

    千次阅读 2017-01-28 12:52:49
    网络流 最小费用最大流模板和注释
  • 基于matlab最大流最小费用代码 , 适于学习
  • 注:完整代码或者代写添加QQ1564658423。 往期回顾>>>>>> 【Matlab 015期】【路径规划1】基于粒子群的三维无人机路径规划matlab源码 ...【Matlab 020期】【路径规划5】Matlab ...
  • 例 19(最小费用最大流问题)(续例18)由于输油管道的长短不一或地质等原因, 使每条管道上运输费用也不相同,因此,除考虑输油管道的最大流外,还需要考虑输油 管道输送最大流的最小费用。图 8 所示是带有运费的...
  • 最小费用最大流(详解+模板)

    万次阅读 多人点赞 2018-01-19 18:49:17
    By Bartholomew By Bartholomew SPFA完整代码: 重点代码:Primal-Dual 原始对偶算法...∴ 最小费用流的充要条件 <=> 剩余网络之中没有 负环 性质2: 性质3: 先感谢大家提出来的宝贵建议 (Than...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 490
精华内容 196
关键字:

最小费用最大流matlab

matlab 订阅