Python小白的数学建模课-17.条件最短路径算法
- 條件最短路徑問(wèn)題,指帶有約束條件、限制條件的最短路徑問(wèn)題。例如: 頂點(diǎn)約束,包括必經(jīng)點(diǎn)或禁止點(diǎn)的限制; 邊的約束,包括必經(jīng)路段、禁行路段和單向路段;無(wú)權(quán)路徑長(zhǎng)度的限制,如要求經(jīng)過(guò)幾步或不超過(guò)幾步到達(dá)終點(diǎn)。
- 本文基于 NetworkX 工具包,建立了一個(gè)遍歷簡(jiǎn)單路徑、判斷約束條件的通用框架。
- 數(shù)模競(jìng)賽真題案例,詳解禁止點(diǎn)、禁止邊、必經(jīng)點(diǎn)、必經(jīng)邊的約束條件處理,進(jìn)而可以擴(kuò)展到任何約束條件。
- 『Python小白的數(shù)學(xué)建模課 @ Youcans』帶你從數(shù)模小白成為國(guó)賽達(dá)人。
1. 帶有條件約束的最短路徑問(wèn)題
最短路徑問(wèn)題是圖論中求兩個(gè)頂點(diǎn)之間的最短路徑問(wèn)題,通常是求最短加權(quán)路徑。
在數(shù)模競(jìng)賽中,一般不會(huì)直接求最短路徑,那就太簡(jiǎn)單了,總是要在基本問(wèn)題中設(shè)置各種限制條件,情況就完全不同了。
條件最短路徑問(wèn)題,指帶有約束條件、限制條件的最短路徑問(wèn)題。例如: 頂點(diǎn)約束,包括必經(jīng)點(diǎn)或禁止點(diǎn)的限制; 邊的約束,包括必經(jīng)路段、禁行路段和單向路段;無(wú)權(quán)路徑長(zhǎng)度的限制,如要求經(jīng)過(guò)幾步或不超過(guò)幾步到達(dá)終點(diǎn)。
進(jìn)一步地,還有雙目標(biāo)限制的最短路徑問(wèn)題,求最短長(zhǎng)度中花費(fèi)最小的路線;交通限制條件下的最短路徑問(wèn)題,如轉(zhuǎn)向限制、道路交叉口的時(shí)間延誤的約束。
求解帶有限制條件的最短路徑問(wèn)題,總體來(lái)說(shuō)可以分為兩類(lèi)基本方法:
一類(lèi)是基于不帶限制條件的最短路徑算法,對(duì)求解過(guò)程中的每一條有效路徑,都用限制條件進(jìn)行判斷,如果滿足所有限制條件則繼續(xù),如果不滿足限制條件則放棄該路徑;
另一類(lèi)方法是基于具體問(wèn)題和選擇算法的特點(diǎn),將問(wèn)題轉(zhuǎn)化為有約束的規(guī)劃問(wèn)題來(lái)處理。
但是,如果使用 NetworkX 求解帶有限制條件的最短路徑問(wèn)題,采用這兩類(lèi)方法都會(huì)有一些困難。原因在于前文所介紹的 NetworkX 提供的 Dijkstra 算法、Bellman-Ford 算法、Floyd 算法和啟發(fā)式算法 A* 都是封裝函數(shù),沒(méi)有提供設(shè)置約束條件的選項(xiàng)和接口,因此用戶不能把條件判斷語(yǔ)句加入這些封裝函數(shù)的程序內(nèi)部。
這個(gè)問(wèn)題不僅存在于 Python 語(yǔ)言的 NetworkX 工具包,對(duì)于其它計(jì)算機(jī)語(yǔ)言的工具包也是類(lèi)似的。自己編程序費(fèi)時(shí)費(fèi)力,但可以根據(jù)需要修改和擴(kuò)展;直接調(diào)用工具包的算法函數(shù)非常方便,但不能進(jìn)行修改或擴(kuò)展。
不過(guò),NetworkX 可以生成兩個(gè)頂點(diǎn)之間的所有簡(jiǎn)單路徑,而且可以獲得所有簡(jiǎn)單路徑的邊的列表。利用簡(jiǎn)單路徑算法,可以通過(guò)對(duì)約束條件的判斷來(lái)求解帶有頂點(diǎn)約束和邊約束的最短路徑問(wèn)題。
2. 案例:螞蟻的最優(yōu)路徑分析
2.1 問(wèn)題描述
蟻巢有若干個(gè)儲(chǔ)藏間(圖中圓圈所示),儲(chǔ)藏間之間有路徑相連(路徑拓?fù)浣Y(jié)構(gòu)如圖所示)。
該圖為無(wú)向圖,路徑通行的花費(fèi)如圖中線路上的數(shù)字所示,路徑正反方向通行的花費(fèi)相同。
要求從起點(diǎn) N0 到終點(diǎn) N17 的最優(yōu)路徑,并需要滿足條件:
- 必須經(jīng)過(guò)圖中的綠色節(jié)點(diǎn) N7、N12;
- 必須經(jīng)過(guò)圖中的兩段綠色路段 (N2, N4)、(N13, N14);
- 必須避開(kāi)圖中的紅色路段 (N11, N12);
- 求花費(fèi)最少的最優(yōu)路徑。
說(shuō)明:本案例來(lái)自西安郵電大學(xué)(XUPT)第12屆數(shù)學(xué)建模競(jìng)賽賽題,本文進(jìn)行了改編。
2.2 圖的創(chuàng)建和可視化
2.2.1 Python 例程(NetworkX)
# mathmodel17_v1.py # Demo17 of mathematical modeling algorithm # Demo of shortest path with constraints with NetworkX # Copyright 2021 YouCans, XUPT # Crated:2021-07-09import numpy as np import matplotlib.pyplot as plt # 導(dǎo)入 Matplotlib 工具包 import networkx as nx # 導(dǎo)入 NetworkX 工具包# 問(wèn)題:螞蟻的最優(yōu)路徑分析(西安郵電大學(xué)第12屆數(shù)學(xué)建模競(jìng)賽B題) gAnt = nx.Graph() # 創(chuàng)建:空的 無(wú)向圖 gAnt.add_weighted_edges_from([(0,1,3),(0,2,1),(0,3,1),(1,2,1),(1,4,1),(1,9,4),(2,3,1),(2,4,2),(2,5,1),(3,5,2),(3,6,2),(3,7,1),(4,5,1),(4,9,1),(5,6,1),(5,9,3),(5,10,1),(5,12,3),(6,7,1),(6,8,2),(6,12,2),(6,13,4),(6,14,3),(7,8,1),(8,14,1),(8,15,3),(9,10,1),(9,11,1),(10,11,1),(10,12,2),(11,12,1),(11,16,1),(12,13,2),(12,16,1),(13,14,1),(13,15,2),(13,16,2),(13,17,1),(14,15,1),(15,17,4),(16,17,1)]) # 向圖中添加多條賦權(quán)邊: (node1,node2,weight)pos={0:(0,8),1:(7,12),2:(6,9),3:(5,6),4:(11,10),5:(14,8), # 指定頂點(diǎn)位置6:(17,6),7:(10,4),8:(19,4),9:(18,12),10:(21,10),11:(28,12),12:(25,8),13:(30,7),14:(24,5),15:(29,4),16:(32,10),17:(37,8)}fig, ax = plt.subplots(figsize=(9, 6)) nx.draw(gAnt, pos, with_labels=True, node_color='cyan', alpha=0.8) labels = nx.get_edge_attributes(gAnt,'weight') # 邊的權(quán)值 nx.draw_networkx_edge_labels(gAnt,pos,edge_labels=labels, font_color='m') # 顯示邊的權(quán)值 nx.draw_networkx_nodes(gAnt,pos,nodelist=[0,17],node_color='yellow') # 設(shè)置頂點(diǎn)顏色:N1,N17 nx.draw_networkx_nodes(gAnt,pos,nodelist=[7,12],node_color='lime') # 設(shè)置頂點(diǎn)顏色:N7,N12 nx.draw_networkx_edges(gAnt,pos,edgelist=[(2,4),(13,14)],edge_color='lime',width=3) # 設(shè)置指定邊的顏色、寬度 nx.draw_networkx_edges(gAnt,pos,edgelist=[(11,12)],edge_color='r',width=3) # 設(shè)置指定邊的顏色、寬度 plt.show()2.2.2 程序說(shuō)明
本段程序繪制網(wǎng)絡(luò)圖,包括頂點(diǎn)、邊、邊的權(quán)值,特殊頂點(diǎn)和特殊邊的顏色設(shè)置。
3. NetworkX 求解條件最短路徑問(wèn)題
3.1 無(wú)限制條件的最短路徑
Python 例程(NetworkX):
# 1. 無(wú)限制條件的最短路徑 # Dijkstra 算法:兩個(gè)指定頂點(diǎn)之間的最短加權(quán)路徑 minWPath1 = nx.dijkstra_path(gAnt, source=0, target=17) # 頂點(diǎn) 0 到 頂點(diǎn) 17 的最短加權(quán)路徑 # Dijkstra 算法:兩個(gè)指定頂點(diǎn)之間的最短加權(quán)路徑的長(zhǎng)度 lMinWPath1 = nx.dijkstra_path_length(gAnt, source=0, target=17) # 最短加權(quán)路徑長(zhǎng)度 print("\n問(wèn)題1: 無(wú)限制條件") print("N0 到 N17 的最短加權(quán)路徑: ", minWPath1) print("N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: ", lMinWPath1)運(yùn)行結(jié)果:
問(wèn)題1: 無(wú)限制條件 N0 到 N17 的最短加權(quán)路徑: [0, 2, 5, 10, 11, 16, 17] N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: 6程序說(shuō)明:
3.2 限制條件:禁止點(diǎn)或禁止邊
程序說(shuō)明:
Python 例程:
# 2. 限制條件:禁止點(diǎn)或禁止邊 # 解決方案:從圖中刪除禁止頂點(diǎn)或禁止邊 gAntF = gAnt.copy() gAntF.remove_node(5) # 通過(guò)頂點(diǎn)標(biāo)簽 5 刪除頂點(diǎn) gAntF.remove_edges_from([(11,12), (13,17)]) # 刪除多條邊 (11,12), (13,17) minWPath2 = nx.dijkstra_path(gAntF, source=0, target=17) # 頂點(diǎn) 0 到 頂點(diǎn) 17 的最短加權(quán)路徑 lMinWPath2 = nx.dijkstra_path_length(gAntF, source=0, target=17) # 最短加權(quán)路徑長(zhǎng)度 print("\n問(wèn)題2: 禁止點(diǎn)或禁止邊的約束") # youcans @ XUPT print("N0 到 N17 的最短加權(quán)路徑: ", minWPath2) print("N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: ", lMinWPath2)運(yùn)行結(jié)果:
問(wèn)題2: 禁止點(diǎn)或禁止邊的約束 N0 到 N17 的最短加權(quán)路徑: [0, 3, 6, 12, 16, 17] N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: 73.3 限制條件:一個(gè)必經(jīng)點(diǎn)
程序說(shuō)明:
Python 例程:
# 3. 限制條件:一個(gè)必經(jīng)點(diǎn) # 解決方案:分解為兩個(gè)問(wèn)題,問(wèn)題 1 為起點(diǎn)N0至必經(jīng)點(diǎn)N6,問(wèn)題 2 為必經(jīng)點(diǎn)N6至終點(diǎn)N17 gAntP = gAnt.copy() minWPath3a = nx.dijkstra_path(gAntP, source=0, target=6) # N0 到 N6 的最短加權(quán)路徑 lMinWPath3a = nx.dijkstra_path_length(gAntP, source=0, target=6) # 最短加權(quán)路徑長(zhǎng)度 minWPath3b = nx.dijkstra_path(gAntP, source=6, target=17) # N6 到 N17 的最短加權(quán)路徑 lMinWPath3b = nx.dijkstra_path_length(gAntP, source=6, target=17) # 最短加權(quán)路徑長(zhǎng)度 minWPath3a.extend(minWPath3b[1:]) # 拼接 minWPath3a、minWPath3b 并去重 N7 print("\n問(wèn)題3: 一個(gè)必經(jīng)點(diǎn)(N6)的約束") print("N0 經(jīng) N6 到 N17 的最短加權(quán)路徑: ", minWPath3a) print("N0 經(jīng) N6 到 N17 的最短加權(quán)路徑長(zhǎng)度: ", lMinWPath3a+lMinWPath3b)運(yùn)行結(jié)果:
問(wèn)題3: 一個(gè)必經(jīng)點(diǎn)(N6)的約束 N0 經(jīng) N6 到 N17 的最短加權(quán)路徑: [0, 3, 6, 12, 16, 17] N0 經(jīng) N6 到 N17 的最短加權(quán)路徑長(zhǎng)度: 73.4 限制條件:多個(gè)必經(jīng)點(diǎn)(方案一)
程序說(shuō)明:
- (1)生成指定起點(diǎn)、終點(diǎn)的所有簡(jiǎn)單路徑;
- (2)判斷路徑是否滿足包括所有必經(jīng)點(diǎn)的限制條件;
- (3)在滿足限制條件的簡(jiǎn)單路徑中找加權(quán)長(zhǎng)度最短的路徑;
- (4)求最短路徑的加權(quán)路徑長(zhǎng)度。
Python 例程:
# 4. 限制條件:多個(gè)必經(jīng)點(diǎn) (N7,N15) # 解決方案:遍歷從起點(diǎn)到終點(diǎn)的簡(jiǎn)單路徑,求滿足必經(jīng)點(diǎn)條件的最短路徑 gAntM = gAnt.copy() minWPath4 = min([path # 返回 key 為最小值的 pathfor path in nx.all_simple_paths(gAntM, 0, 17) # gAnt 中所有起點(diǎn)為0、終點(diǎn)為17的簡(jiǎn)單路徑if all(n in path for n in (7, 15))], # 滿足路徑中包括頂點(diǎn) N7,N15key=lambda x: sum(gAntM.edges[edge]['weight'] for edge in nx.utils.pairwise(x))) # key 為加權(quán)路徑長(zhǎng)度 lenPath4 = sum(gAntM.edges[edge]['weight'] for edge in nx.utils.pairwise(minWPath4)) # 求指定路徑的加權(quán)路徑長(zhǎng)度 print("\n問(wèn)題4: 多個(gè)必經(jīng)點(diǎn)(N7, N15)的約束") print("N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑: ", minWPath4) print("N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑長(zhǎng)度: ", lenPath4)運(yùn)行結(jié)果:
問(wèn)題4: 多個(gè)必經(jīng)點(diǎn)(N7, N15)的約束 N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑: [0, 3, 7, 8, 14, 15, 13, 17] N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑長(zhǎng)度: 83.5 限制條件:多個(gè)必經(jīng)點(diǎn)(方案二)
程序說(shuō)明
Python 例程
# 5. 限制條件:多個(gè)必經(jīng)點(diǎn) (N7,N15) # 解決方案:多重循環(huán)、判斷結(jié)構(gòu),遍歷從起點(diǎn)到終點(diǎn)的簡(jiǎn)單路徑,求滿足必經(jīng)點(diǎn)條件的最短路徑 gAntM = gAnt.copy() lMinWPath5 = minWPath5 = 1e9 for path in nx.all_simple_paths(gAntM, 0, 17):if all(n in path for n in (7,15)): # 滿足路徑中包括頂點(diǎn) N7,N15lenPath = sum(gAntM.edges[edge]['weight'] for edge in nx.utils.pairwise(path))if lenPath < lMinWPath5:lMinWPath5 = lenPathminWPath5 = path print("\n問(wèn)題5: 多個(gè)必經(jīng)點(diǎn)(N7, N15)的約束") print("N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑: ", minWPath5) print("N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑長(zhǎng)度: ", lMinWPath5)運(yùn)行結(jié)果
問(wèn)題5: 多個(gè)必經(jīng)點(diǎn)(N7, N15)的約束 N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑: [0, 3, 7, 8, 14, 15, 13, 17] N0 經(jīng) N7, N15 到 N17 的最短加權(quán)路徑長(zhǎng)度: 83.6 限制條件:必經(jīng)邊
程序說(shuō)明
Python 例程
# 6. 限制條件:必經(jīng)邊 (N2,N4), (N13,N14) # 解決方案:遍歷從起點(diǎn)到終點(diǎn)的簡(jiǎn)單路徑,求滿足必經(jīng)邊條件的最短路徑 gAntE = gAnt.copy() lMinWPath6 = minWPath6 = 1e9 # 置初值 for path in nx.all_simple_paths(gAntE, 0, 17): # 所有起點(diǎn)為0、終點(diǎn)為17的簡(jiǎn)單路徑if all(n in path for n in (2,4,13,14)): # 滿足路徑中包括必經(jīng)邊的頂點(diǎn) N2,N4,N13,N14# 檢查 (N2,N4)p1 = path.index(2) # N2 的位置if (path[p1-1]!=4 and path[p1+1]!=4): continue # 判斷 N2~N4 是否相鄰# 檢查 (N13,N14)p2 = path.index(13) # # N13 的位置if (path[p2-1]!=14 and path[p2+1]!=14): continue # 判斷 N13~N14 是否相鄰lenPath = sum(gAntE.edges[edge]['weight'] for edge in nx.utils.pairwise(path))if lenPath < lMinWPath6:lMinWPath6 = lenPathminWPath6 = path print("\n問(wèn)題6: 必經(jīng)邊 (N2,N4), (N13,N14) 的約束") print("N0 到 N17 的最短加權(quán)路徑: ", minWPath6) print("N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: ", lMinWPath6)運(yùn)行結(jié)果
問(wèn)題6: 必經(jīng)邊 (N2,N4), (N13,N14) 的約束 N0 到 N17 的最短加權(quán)路徑: [0, 2, 4, 5, 6, 7, 8, 14, 13, 17] N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: 104. NetworkX 求解螞蟻?zhàn)顑?yōu)路徑問(wèn)題
4.1 程序說(shuō)明
4.2 Python 例程
# mathmodel17_v1.py # Demo17 of mathematical modeling algorithm # Demo of shortest path with constraints with NetworkX # Copyright 2021 YouCans, XUPT # Crated:2021-07-09import numpy as np import matplotlib.pyplot as plt # 導(dǎo)入 Matplotlib 工具包 import networkx as nx # 導(dǎo)入 NetworkX 工具包# 問(wèn)題:螞蟻的最優(yōu)路徑分析(西安郵電大學(xué)第12屆數(shù)學(xué)建模競(jìng)賽B題) gAnt = nx.Graph() # 創(chuàng)建:空的 無(wú)向圖 gAnt.add_weighted_edges_from([(0,1,3),(0,2,1),(0,3,1),(1,2,1),(1,4,1),(1,9,4),(2,3,1),(2,4,2),(2,5,1),(3,5,2),(3,6,2),(3,7,1),(4,5,1),(4,9,1),(5,6,1),(5,9,3),(5,10,1),(5,12,3),(6,7,1),(6,8,2),(6,12,2),(6,13,4),(6,14,3),(7,8,1),(8,14,1),(8,15,3),(9,10,1),(9,11,1),(10,11,1),(10,12,2),(11,12,1),(11,16,1),(12,13,2),(12,16,1),(13,14,1),(13,15,2),(13,16,2),(13,17,1),(14,15,1),(15,17,4),(16,17,1)]) # 向圖中添加多條賦權(quán)邊: (node1,node2,weight)pos={0:(0,8),1:(7,12),2:(6,9),3:(5,6),4:(11,10),5:(14,8), # 指定頂點(diǎn)位置6:(17,6),7:(10,4),8:(19,4),9:(18,12),10:(21,10),11:(28,12),12:(25,8),13:(30,7),14:(24,5),15:(29,4),16:(32,10),17:(37,8)}fig, ax = plt.subplots(figsize=(9, 6)) nx.draw(gAnt, pos, with_labels=True, node_color='cyan', alpha=0.8) labels = nx.get_edge_attributes(gAnt,'weight') # 邊的權(quán)值 nx.draw_networkx_edge_labels(gAnt,pos,edge_labels=labels, font_color='m') # 顯示邊的權(quán)值 nx.draw_networkx_nodes(gAnt,pos,nodelist=[0,17],node_color='yellow') # 設(shè)置頂點(diǎn)顏色:N1,N17 nx.draw_networkx_nodes(gAnt,pos,nodelist=[7,12],node_color='lime') # 設(shè)置頂點(diǎn)顏色:N7,N12 nx.draw_networkx_edges(gAnt,pos,edgelist=[(2,4),(13,14)],edge_color='lime',width=3) # 設(shè)置指定邊的顏色、寬度 nx.draw_networkx_edges(gAnt,pos,edgelist=[(11,12)],edge_color='r',width=3) # 設(shè)置指定邊的顏色、寬度# 7. 限制條件:必經(jīng)點(diǎn) N7,N12,必經(jīng)邊 (N2,N4), (N13,N14),禁止邊 (11,12) # 解決方案:遍歷從起點(diǎn)到終點(diǎn)的簡(jiǎn)單路徑,求滿足必經(jīng)邊條件的最短路徑 gAntS = gAnt.copy() gAntS.remove_edge(11,12) # 刪除禁止邊 (11,12) lMinWPath = minWPath = 1e9 # 置初值 for path in nx.all_simple_paths(gAntS, 0, 17): # 所有起點(diǎn)為0、終點(diǎn)為17的簡(jiǎn)單路徑if all(n in path for n in (2,4,7,12,13,14)): # 滿足路徑中包括頂點(diǎn) N7,N12# 檢查 (N2,N4)p1 = path.index(2) # N2 的位置if (path[p1-1]!=4 and path[p1+1]!=4): continue # 判斷 N2~N4 是否相鄰# 檢查 (N13,N14)p2 = path.index(13) # # N13 的位置if (path[p2-1]!=14 and path[p2+1]!=14): continue # 判斷 N13~N14 是否相鄰lenPath = sum(gAntS.edges[edge]['weight'] for edge in nx.utils.pairwise(path))if lenPath < lMinWPath:lMinWPath = lenPathminWPath = pathprint("\n螞蟻?zhàn)顑?yōu)路徑問(wèn)題(帶有禁止點(diǎn)、禁止邊、必經(jīng)點(diǎn)、必經(jīng)邊的約束條件)") print("約束條件:必經(jīng)點(diǎn) N7,N12,必經(jīng)邊 (N2,N4), (N13,N14),禁止邊 (11,12)") print("N0 到 N17 的最短加權(quán)路徑: ", minWPath) print("N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: ", lMinWPath)edgeList = [] for i in range(len(minWPath)-1):edgeList.append((minWPath[i],minWPath[i+1])) nx.draw_networkx_edges(gAnt,pos,edgelist=edgeList,edge_color='b',width=4) # 設(shè)置邊的顏色 plt.show()4.3 運(yùn)行結(jié)果
螞蟻?zhàn)顑?yōu)路徑問(wèn)題(帶有禁止點(diǎn)、禁止邊、必經(jīng)點(diǎn)、必經(jīng)邊的約束條件) 約束條件:必經(jīng)點(diǎn) N7,N12,必經(jīng)邊 (N2,N4), (N13,N14),禁止邊 (11,12) N0 到 N17 的最短加權(quán)路徑: [0, 2, 4, 5, 6, 7, 8, 14, 13, 12, 16, 17] N0 到 N17 的最短加權(quán)路徑長(zhǎng)度: 135. 總結(jié)
【本節(jié)完】
版權(quán)聲明:
歡迎關(guān)注『Python小白的數(shù)學(xué)建模課 @ Youcans』 原創(chuàng)作品
原創(chuàng)作品,轉(zhuǎn)載必須標(biāo)注原文鏈接:(https://blog.csdn.net/youcans/article/details/118566373)。
Copyright 2021 Youcans, XUPT
Crated:2021-07-10
歡迎關(guān)注 『Python小白的數(shù)學(xué)建模課 @ Youcans』 系列,持續(xù)更新
Python小白的數(shù)學(xué)建模課-01.新手必讀
Python小白的數(shù)學(xué)建模課-02.數(shù)據(jù)導(dǎo)入
Python小白的數(shù)學(xué)建模課-03.線性規(guī)劃
Python小白的數(shù)學(xué)建模課-04.整數(shù)規(guī)劃
Python小白的數(shù)學(xué)建模課-05.0-1規(guī)劃
Python小白的數(shù)學(xué)建模課-06.固定費(fèi)用問(wèn)題
Python小白的數(shù)學(xué)建模課-07.選址問(wèn)題
Python小白的數(shù)學(xué)建模課-09.微分方程模型
Python小白的數(shù)學(xué)建模課-10.微分方程邊值問(wèn)題
Python小白的數(shù)學(xué)建模課-12.非線性規(guī)劃
Python小白的數(shù)學(xué)建模課-15.圖論的基本概念
Python小白的數(shù)學(xué)建模課-16.最短路徑算法
Python小白的數(shù)學(xué)建模課-17.條件最短路徑算法
Python小白的數(shù)學(xué)建模課-18.最小生成樹(shù)問(wèn)題
Python小白的數(shù)學(xué)建模課-19.網(wǎng)絡(luò)流優(yōu)化問(wèn)題
Python小白的數(shù)學(xué)建模課-20.網(wǎng)絡(luò)流優(yōu)化案例
Python小白的數(shù)學(xué)建模課-21.關(guān)鍵路徑法
Python小白的數(shù)學(xué)建模課-A1.國(guó)賽賽題類(lèi)型分析
Python小白的數(shù)學(xué)建模課-21.關(guān)鍵路徑法
Python小白的數(shù)學(xué)建模課-22.插值方法
Python小白的數(shù)學(xué)建模課-A1.國(guó)賽賽題類(lèi)型分析
Python小白的數(shù)學(xué)建模課-A2.2021年數(shù)維杯C題探討
Python小白的數(shù)學(xué)建模課-A3.12個(gè)新冠疫情數(shù)模競(jìng)賽賽題及短評(píng)
Python小白的數(shù)學(xué)建模課-B2. 新冠疫情 SI模型
Python小白的數(shù)學(xué)建模課-B3. 新冠疫情 SIS模型
Python小白的數(shù)學(xué)建模課-B4. 新冠疫情 SIR模型
Python小白的數(shù)學(xué)建模課-B5. 新冠疫情 SEIR模型
Python小白的數(shù)學(xué)建模課-B6. 新冠疫情 SEIR改進(jìn)模型
總結(jié)
以上是生活随笔為你收集整理的Python小白的数学建模课-17.条件最短路径算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ftp同一主机的多个子进程使用同一个套接
- 下一篇: 利用SQL语句对数据进行操作:插入、更新