当前位置:   article > 正文

【数学建模笔记】4.多目标规划+最短路径+最小生成树的简单理解_多目标规划尽量

多目标规划尽量

1.多目标规划

 现有3个目标:

1.尽量使产品Ⅰ的产量不超过产品Ⅱ的产量;

2.尽可能充分利用所有设备;

3.尽可能使利润不少于56万

注意:目标1是“不超过”,也就是尽量“≤”;目标2是“充分利用”,也就是尽量“=”;目标3是“不少于”,也就是尽量“≥”

 

 求解方法:搜索MATLABA的fgoalattain函数,序贯算法,Lingo求解

2.最短路径

 最短路径:从图中的某个顶点出发,到达另外一个顶点的所经过的边的权重之和最小的一条路径

  • 图:边和节点组成的结构,例如道路+城市
  • 边带有方向的是有向图,否则为无向图
  • 权重:每条边都有与之对应的值,本题中边为道路,边的权重为道路长度,越小越好

MATLAB求解最短路径:Dijkstra算法(难),或MATLB的graphshortestpath函数

  1. W = [10,5,2,1,4,6,7,3,9,2];
  2. DG = sparse([1,1,2,2,3,4,4,5,5,5],[2,5,5,3,4,3,1,2,3,4],W);%稀疏矩阵
  3. point_name = ['1','2','3','4','5'];
  4. h = view(biograph(DG,point_name,'showWeights','on'));
  5. [dist,path,pred] = graphshortestpath(DG,1,3)
  6. %加宽加红
  7. edges = getedgesbynodeid(h,get(h.Nodes(path),'ID'));
  8. set(edges,'LineColor',[1 0 0]);%RGB 红绿蓝
  9. set(edges,'LineWidth',2);

求解得到:

 

其中稀疏矩阵可参考

【MATLAB】稀疏矩阵(含有大量0元素的矩阵)___zzz__的博客-CSDN博客

3.最小生成树

(1)MATLAB的minspantree函数求解最小生成树

  1. s = [1,1,2,2,3,3,4,4,4,5];
  2. t = [2,3,4,5,4,7,5,6,7,6];
  3. weights = [50,60,65,40,52,45,50,30,42,70];
  4. %生成无向图,s和t对应元素代表着边,weights是权值
  5. G = graph(s,t,weights);
  6. T = minspantree(G);
  7. p = plot(G,'EdgeLabel',G.Edges.Weight,'MarkerSize',8);
  8. highlight(p,T,'EdgeColor','red','LineWidth',3)

 结果:

(2)Krukal算法(适合点多边少的图) 

1.把图G中的所有边全部去掉,得到所有单独的顶点V构成的图T=(V,{}),其中V是顶点集合

2.从G中取出当前权值最小的边,如果该边加入T的边集后T不形成回路,则加入T;否则舍弃

 

3.重复第2步,直到T中有n-1条边(n是顶点数)

 

注:若第2步中遇到两条权值相同的最小权值边,任选一条即可,所以最小生成树可能不唯一,但权值之和相同

(3)Prim算法(适合边多点少)

1.设置一个图U,将原图G中任意一顶点取出加入U中

2.在所在的u∈U,v∈(G-U)的边(g,v)中找到一条权值最小的边,并入图U中

 

3.重复步骤2,直到U中包含了所有顶点

 

注:若第2步中遇到两条权值相同的最小权值边,任选一条即可,所以最小生成树可能不唯一,但权值之和相同

以上来自B站【数学建模 | 快速入门(上)】数模基础+MATLAB入门+论文写作+模型算法精讲(小白数模国赛必看)_哔哩哔哩_bilibili

不理解可以去看视频, up主讲的通俗易懂

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/445002
推荐阅读
相关标签
  

闽ICP备14008679号