“荔枝使”的難題怎么破:A*運輸路徑算法編程實踐

請在此添加圖片描述
原文首發請訪問:https://cloud.tencent.com/developer/article/2533317

荔枝最初被稱為“離支”,亦作“離枝”。

這是一種非常精貴的水果,一旦離開枝頭,色澤、香氣和味道會在短時間內迅速變質。

但它又是非常美味,宋代大文豪蘇軾寫道:“日啖荔枝三百顆,不辭長做嶺南人”,以對其贊譽有加。

在唐朝時期,有一個著名的"荔枝使"楊太真(楊貴妃)的故事。為了滿足楊貴妃對新鮮荔枝的喜愛,唐玄宗設立了專門的"荔枝驛",命人快馬加鞭將嶺南新鮮荔枝送至長安。這個歷史典故不僅體現了古代物流系統的重要性,也啟發我們思考現代物流優化問題。

現在假如我們是荔枝使,又該如何解決問題呢?

哈哈,快遞小哥可真不好當啊~

下面本文將介紹如何使用A*(A-Star)算法來優化荔枝運輸路徑,實現從深圳到西安的最優路徑規劃。我們不僅要考慮路徑的最短時間,還要處理可能出現的路徑中斷等突發情況。

問題描述

業務場景

  • 起點:深圳(主要荔枝產地)
  • 終點:西安(目的地)
  • 途經城市:廣州、東莞、惠州、韶關、長沙、武漢、鄭州、洛陽等
  • 目標:找到最短運輸時間的路徑
  • 附加要求:能夠處理路徑中斷情況并重新規劃路線

技術挑戰

  1. 如何構建合適的城市網絡模型
  2. 如何設計啟發式函數以提高路徑搜索效率
  3. 如何處理路徑中斷等異常情況
  4. 如何可視化運輸路徑以便直觀展示

A*算法原理

算法介紹

A*算法是一種啟發式搜索算法,它結合了Dijkstra算法和最佳優先搜索的優點。算法使用一個評估函數f(n)來決定搜索的方向:

f(n) = g(n) + h(n)

其中:

  • g(n):從起點到當前節點n的實際代價
  • h(n):從當前節點n到目標節點的估計代價(啟發式函數)
  • f(n):總估計代價

啟發式函數設計

在我們的荔枝運輸問題中,啟發式函數使用城市間的直線距離作為估計值。這是因為:

  1. 直線距離永遠不會超過實際路徑距離(滿足可接受性)
  2. 計算簡單,易于實現
  3. 能夠較好地反映城市間的地理關系

代碼實現

1. 城市網絡模型

首先,我們需要構建城市之間的連接關系和運輸時間:

# 城市之間的連接關系和運輸時間(小時)city\_graph = {'深圳': {'廣州': 2, '東莞': 1, '惠州': 1.5},'廣州': {'深圳': 2, '東莞': 1.5, '韶關': 2.5},'東莞': {'深圳': 1, '廣州': 1.5, '惠州': 1.2},'惠州': {'深圳': 1.5, '東莞': 1.2, '武漢': 8},'韶關': {'廣州': 2.5, '長沙': 4},'長沙': {'韶關': 4, '武漢': 2.5},'武漢': {'長沙': 2.5, '惠州': 8, '鄭州': 4, '西安': 10},'鄭州': {'武漢': 4, '洛陽': 1.5, '西安': 6},'洛陽': {'鄭州': 1.5, '西安': 5},'西安': {'武漢': 10, '鄭州': 6, '洛陽': 5}}

2. 城市坐標系統

為了計算啟發式函數,我們需要定義城市的相對坐標:

# 城市的相對坐標(用于啟發式函數和可視化)city\_coordinates = {# 路徑上的城市'深圳': (0, 0),      # 起點'廣州': (2, 2),'長沙': (4, 4),'武漢': (6, 6),'西安': (8, 4),      # 終點# 不在主路徑上的城市'東莞': (1, -1),     # 向下偏移'惠州': (2, -2),     # 向下偏移'韶關': (3, 1),      # 向上偏移'鄭州': (7, 8),      # 向上偏移'洛陽': (9, 7)       # 向右上偏移}

3. A*算法核心實現

def heuristic(city1, city2):"""啟發式函數:計算兩個城市之間的直線距離"""x1, y1 = city\_coordinates[city1]x2, y2 = city\_coordinates[city2]return math.sqrt((x2 - x1) \*\* 2 + (y2 - y1) \*\* 2)def astar\_search(graph, start, goal):"""A\*算法實現"""frontier = []  # 優先隊列,存儲待探索的節點heapq.heappush(frontier, (0, start))  # (優先級, 城市)came\_from = {start: None}  # 記錄路徑cost\_so\_far = {start: 0}   # 記錄從起點到每個城市的實際代價while frontier:current\_cost, current\_city = heapq.heappop(frontier)# 到達目標城市if current\_city == goal:break# 探索相鄰城市for next\_city, time in graph[current\_city].items():new\_cost = cost\_so\_far[current\_city] + time# 如果找到更好的路徑或者是第一次訪問這個城市if next\_city not in cost\_so\_far or new\_cost < cost\_so\_far[next\_city]:cost\_so\_far[next\_city] = new\_cost# f(n) = g(n) + h(n)priority = new\_cost + heuristic(next\_city, goal)heapq.heappush(frontier, (priority, next\_city))came\_from[next\_city] = current\_city# 重建路徑if goal not in came\_from:return None, float('inf')path = []current\_city = goalwhile current\_city is not None:path.append(current\_city)current\_city = came\_from[current\_city]path.reverse()return path, cost\_so\_far[goal]

4. 路徑可視化

def visualize\_path(graph, path):"""使用matplotlib可視化運輸路徑"""plt.figure(figsize=(12, 8))# 繪制所有城市點for city, (x, y) in city\_coordinates.items():if city in path:plt.plot(x, y, 'ro', markersize=10, label=city if city == path[0] or city == path[-1] else "")else:plt.plot(x, y, 'bo', markersize=8)plt.annotate(city, (x, y), xytext=(5, 5), textcoords='offset points')# 繪制所有道路連接for city1 in graph:for city2 in graph[city1]:x1, y1 = city\_coordinates[city1]x2, y2 = city\_coordinates[city2]plt.plot([x1, x2], [y1, y2], 'gray', linestyle='--', alpha=0.3)# 繪制最優路徑for i in range(len(path) - 1):city1 = path[i]city2 = path[i + 1]x1, y1 = city\_coordinates[city1]x2, y2 = city\_coordinates[city2]plt.plot([x1, x2], [y1, y2], 'r-', linewidth=2)plt.title('荔枝運輸最優路徑')plt.legend()plt.grid(True)plt.show()

5. 路徑中斷處理

def remove\_edge(graph, city1, city2):"""從圖中移除兩個城市之間的連接"""new\_graph = {city: neighbors.copy() for city, neighbors in graph.items()}if city2 in new\_graph[city1]:del new\_graph[city1][city2]if city1 in new\_graph[city2]:del new\_graph[city2][city1]return new\_graph

功能演示

1. 基本路徑規劃

start\_city = '深圳'end\_city = '西安'optimal\_path, total\_cost = astar\_search(city\_graph, start\_city, end\_city)print("最優路徑:", " → ".join(optimal\_path))print(f"總運輸時間: {total\_cost}小時")

輸出結果:

請在此添加圖片描述

由此可見:

最優路徑: 深圳 → 廣州 → 長沙 → 武漢 → 西安

總運輸時間: 20.0小時

顯示繪圖如下:

請在此添加圖片描述

2. 處理路徑中斷

當深圳到廣州的直接路徑中斷時:

# 斷開深圳和廣州之間的連接modified\_graph = remove\_edge(city\_graph, '深圳', '廣州')optimal\_path, total\_cost = astar\_search(modified\_graph, start\_city, end\_city)print("路徑中斷后的最優路徑:", " → ".join(optimal\_path))print(f"總運輸時間: {total\_cost}小時")

輸出結果:

請在此添加圖片描述

可以看到,

路徑中斷后的最優路徑: 深圳 → 東莞 → 惠州 → 武漢 → 西安

總運輸時間: 20.2小時

這條路徑上已經沒有廣州這個節點了,變動后的路線圖如下所示:

請在此添加圖片描述

讓我們分析一下結果:

  1. 成功斷開了深圳和廣州之間的連接
  2. 程序正確處理了城市編號輸入(1代表深圳,10代表西安)
  3. A*算法成功找到了一條替代路徑:

原始路徑是:深圳 → 廣州 → 長沙 → 武漢 → 西安 (20.0小時)

新路徑是:深圳 → 東莞 → 惠州 → 武漢 → 西安 (20.2小時)

  1. 新路徑的總時間只比原路徑多了0.2小時,這是一個很好的替代方案

優化過程——啟發式函數改進

最初我們使用曼哈頓距離作為啟發式函數:

def heuristic\_manhattan(city1, city2):x1, y1 = city\_coordinates[city1]x2, y2 = city\_coordinates[city2]return abs(x2 - x1) + abs(y2 - y1)

后來改用歐幾里得距離,因為:

  • 更符合實際地理距離
  • 提供了更準確的估計
  • 保證了解的最優性

3. 用戶交互優化

添加了以下功能:

  • 支持通過城市編號或名稱選擇
  • 提供清晰的城市列表
  • 增加了輸入驗證和錯誤處理

實驗結果分析

1. 基本路徑對比

| 路徑方案 | 路線 | 總時間 |

|---------|------|--------|

| 最優路徑 | 深圳→廣州→長沙→武漢→西安 | 20.0小時 |

| 次優路徑 | 深圳→東莞→惠州→武漢→西安 | 20.2小時 |

| 替代路徑 | 深圳→廣州→長沙→武漢→鄭州→西安 | 23.0小時 |

2. 路徑中斷情況分析

我們測試了多種路徑中斷場景:

  1. 深圳-廣州中斷
  2. 系統自動選擇通過東莞-惠州的替代路線
  3. 僅增加0.2小時運輸時間
  4. 武漢-西安中斷
  5. 系統選擇通過鄭州或洛陽的北線路徑
  6. 運輸時間增加約3-4小時
  7. 多路段同時中斷
  8. 系統能夠找到可行的替代路徑
  9. 保證了運輸網絡的魯棒性

總結與展望

本次開發實踐的主要成果

  1. 實現了基于A*算法的智能路徑規劃系統
  2. 支持路徑中斷的動態調整
  3. 提供了直觀的路徑可視化
  4. 優化了用戶交互體驗

可能的改進方向

方向一:考慮更多現實因素

  • 交通擁堵情況
  • 天氣影響
  • 時間窗口限制

方向二:算法優化

  • 實現多目標優化
  • 添加實時路況更新
  • 支持批量路徑規劃

方向三:系統擴展

  • 接入實時地圖數據
  • 添加路況預警功能
  • 支持多種運輸方式組合
  • 開發移動應用程序

歷史與現代的結合

從唐朝的"荔枝驛"到現代的智能物流系統,人類對高效運輸的追求從未停止。通過A*算法這樣的現代計算技術,我們能夠更好地解決古老的物流問題。楊貴妃的荔枝,如今可以通過最優路徑,以最短的時間從嶺南送達長安,保持最佳的新鮮度。

這個題目不僅是對算法的實踐,也是對歷史與現代技術結合的一次有趣探索。它提醒我們,無論是古代還是現代,高效的物流系統都是社會發展的重要基礎。

對于這個問題本身來說,如果加入考慮更多極端條件,比如運輸的人力物力調度,在什么位置由誰接力續運的接力賽等等,那么問題就會轉換成最大最小流一類的新算法問題…

哈哈哈,是不是 更加復雜呢?

貴妃的荔枝,究竟是怎么運,這是一個有趣的算法哲學問題。歡迎大家共同探討~!

附錄:完整代碼

import mathimport heapqimport matplotlib.pyplot as plt# 城市之間的連接關系和運輸時間(小時)city\_graph = {'深圳': {'廣州': 2, '東莞': 1, '惠州': 1.5},'廣州': {'深圳': 2, '東莞': 1.5, '韶關': 2.5},'東莞': {'深圳': 1, '廣州': 1.5, '惠州': 1.2},'惠州': {'深圳': 1.5, '東莞': 1.2, '武漢': 8},'韶關': {'廣州': 2.5, '長沙': 4},'長沙': {'韶關': 4, '武漢': 2.5},'武漢': {'長沙': 2.5, '惠州': 8, '鄭州': 4, '西安': 10},'鄭州': {'武漢': 4, '洛陽': 1.5, '西安': 6},'洛陽': {'鄭州': 1.5, '西安': 5},'西安': {'武漢': 10, '鄭州': 6, '洛陽': 5}}# 城市的相對坐標(用于啟發式函數和可視化)city\_coordinates = {# 路徑上的城市'深圳': (0, 0),      # 起點'廣州': (2, 2),'長沙': (4, 4),'武漢': (6, 6),'西安': (8, 4),      # 終點# 不在主路徑上的城市'東莞': (1, -1),     # 向下偏移'惠州': (2, -2),     # 向下偏移'韶關': (3, 1),      # 向上偏移'鄭州': (7, 8),      # 向上偏移'洛陽': (9, 7)       # 向右上偏移}def heuristic(city1, city2):"""啟發式函數:計算兩個城市之間的直線距離"""x1, y1 = city\_coordinates[city1]x2, y2 = city\_coordinates[city2]return math.sqrt((x2 - x1) \*\* 2 + (y2 - y1) \*\* 2)def astar\_search(graph, start, goal):"""A\*算法實現"""frontier = []  # 優先隊列,存儲待探索的節點heapq.heappush(frontier, (0, start))  # (優先級, 城市)came\_from = {start: None}  # 記錄路徑cost\_so\_far = {start: 0}   # 記錄從起點到每個城市的實際代價while frontier:current\_cost, current\_city = heapq.heappop(frontier)# 到達目標城市if current\_city == goal:break# 探索相鄰城市for next\_city, time in graph[current\_city].items():new\_cost = cost\_so\_far[current\_city] + time# 如果找到更好的路徑或者是第一次訪問這個城市if next\_city not in cost\_so\_far or new\_cost < cost\_so\_far[next\_city]:cost\_so\_far[next\_city] = new\_cost# f(n) = g(n) + h(n)priority = new\_cost + heuristic(next\_city, goal)heapq.heappush(frontier, (priority, next\_city))came\_from[next\_city] = current\_city# 重建路徑if goal not in came\_from:return None, float('inf')path = []current\_city = goalwhile current\_city is not None:path.append(current\_city)current\_city = came\_from[current\_city]path.reverse()return path, cost\_so\_far[goal]def visualize\_path(graph, path):"""使用matplotlib可視化運輸路徑"""plt.figure(figsize=(12, 8))# 繪制所有城市點for city, (x, y) in city\_coordinates.items():if city in path:plt.plot(x, y, 'ro', markersize=10, label=city if city == path[0] or city == path[-1] else "")else:plt.plot(x, y, 'bo', markersize=8)plt.annotate(city, (x, y), xytext=(5, 5), textcoords='offset points')# 繪制所有道路連接for city1 in graph:for city2 in graph[city1]:x1, y1 = city\_coordinates[city1]x2, y2 = city\_coordinates[city2]plt.plot([x1, x2], [y1, y2], 'gray', linestyle='--', alpha=0.3)# 繪制最優路徑for i in range(len(path) - 1):city1 = path[i]city2 = path[i + 1]x1, y1 = city\_coordinates[city1]x2, y2 = city\_coordinates[city2]plt.plot([x1, x2], [y1, y2], 'r-', linewidth=2)plt.title('荔枝運輸最優路徑')plt.legend()plt.grid(True)plt.show()def remove\_edge(graph, city1, city2):"""從圖中移除兩個城市之間的連接"""new\_graph = {city: neighbors.copy() for city, neighbors in graph.items()}if city2 in new\_graph[city1]:del new\_graph[city1][city2]if city1 in new\_graph[city2]:del new\_graph[city2][city1]return new\_graphdef get\_city\_by\_input(cities, prompt, default=None):"""獲取用戶輸入的城市,支持通過編號或名稱選擇"""user\_input = input(prompt)# 如果用戶沒有輸入,使用默認值if not user\_input and default:return default# 嘗試將輸入解析為數字(城市編號)try:idx = int(user\_input) - 1if 0 <= idx < len(cities):return cities[idx]except ValueError:# 如果輸入不是數字,檢查是否是城市名稱if user\_input in cities:return user\_input# 如果輸入既不是有效的編號也不是有效的城市名稱,返回Nonereturn Nonedef main():print("荔枝運輸路徑優化系統 (A\*算法)")print("=" \* 50)# 創建圖的副本,以便可以修改current\_graph = {city: neighbors.copy() for city, neighbors in city\_graph.items()}cities = list(current\_graph.keys())# 詢問用戶是否要斷開某條路徑disconnect = input("是否模擬城市之間斷聯? (y/n): ").lower() == 'y'if disconnect:# 顯示所有城市print("\n可選城市:")for i, city in enumerate(cities):print(f"{i+1}. {city}")# 獲取用戶輸入try:city1\_idx = int(input("\n請選擇第一個城市編號: ")) - 1city2\_idx = int(input("請選擇第二個城市編號: ")) - 1if (city1\_idx < 0 or city1\_idx >= len(cities) or city2\_idx < 0 or city2\_idx >= len(cities)):print("無效的城市編號!")returncity1 = cities[city1\_idx]city2 = cities[city2\_idx]# 檢查兩個城市是否相鄰if city2 not in current\_graph[city1] and city1 not in current\_graph[city2]:print(f"{city1}{city2}之間沒有直接連接!")return# 斷開連接current\_graph = remove\_edge(current\_graph, city1, city2)print(f"\n已斷開 {city1}{city2} 之間的連接")except ValueError:print("請輸入有效的數字!")return# 顯示所有城市print("\n可選城市:")for i, city in enumerate(cities):print(f"{i+1}. {city}")# 獲取起點和終點print("\n可以輸入城市名稱或編號")start\_city = get\_city\_by\_input(cities, "請輸入起點城市 (默認: 深圳): ", '深圳')end\_city = get\_city\_by\_input(cities, "請輸入終點城市 (默認: 西安): ", '西安')if not start\_city or not end\_city:print("無效的城市選擇!")returnprint(f"\n尋找從 {start\_city}{end\_city} 的最優路徑...")# 使用A\*算法尋找最短路徑optimal\_path, total\_cost = astar\_search(current\_graph, start\_city, end\_city)if optimal\_path:print("\n最優路徑:", " → ".join(optimal\_path))print(f"總運輸時間: {total\_cost}小時")# 打印詳細路徑信息print("\n詳細路徑信息:")print("-" \* 50)for i in range(len(optimal\_path) - 1):from\_city = optimal\_path[i]to\_city = optimal\_path[i + 1]time = current\_graph[from\_city][to\_city]print(f"{from\_city}{to\_city}: {time}小時")print("-" \* 50)print(f"總計: {total\_cost}小時")# 可視化路徑visualize\_path(current\_graph, optimal\_path)else:print(f"無法找到從 {start\_city}{end\_city} 的路徑!")if \_\_name\_\_ == "\_\_main\_\_":main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85804.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85804.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85804.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python基礎知識,以及7個練習案例

python的用途 搭建網站網絡爬蟲科學計算與大數據分析人工智能與機器學習設計動畫游戲&#xff1a;例如pygame圖形用戶接口開發&#xff1a;模塊與框架&#xff0c;如tkinter python基礎課程包含內容 自動化運維人工智能應用web開發多媒體處理自動化辦公python爬蟲 python是…

Java 編程之命令模式

什么是命令模式 命令模式Command Pattern 是一種行為型設計模式&#xff0c;它把請求封裝成對象&#xff0c;從而將請求的發送者與執行者完全解耦&#xff0c;支持排隊、撤銷、日志記錄等操作。。 模式目標&#xff1a; 解耦命令的發出者&#xff08;Invoker&#xff09;與執…

TCP 三次握手與四次揮手全流程詳解

TCP(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節流的傳輸層協議。為了建立和終止連接,TCP 使用了 三次握手 和 四次揮手 的機制。本文將從原理到狀態變化,詳細解析 TCP 連接的建立與釋放全過程,力求專業、準確。 一、TCP 三次握手(Three-Way Han…

MySQL 慢 SQL 識別與優化

一、識別慢 SQL 1. 啟用慢查詢日志 -- 查看當前慢查詢配置 SHOW VARIABLES LIKE slow_query%; SHOW VARIABLES LIKE long_query_time;-- 開啟慢查詢日志&#xff08;臨時生效&#xff09; SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 2; -- 設置慢查詢閾值…

墨記APP:水墨風記事,書寫生活詩意

在快節奏的現代生活中&#xff0c;記錄生活的點滴成為了一種獨特的儀式感。無論是日常的瑣事、突發的靈感&#xff0c;還是對未來的規劃&#xff0c;一款好用的記事軟件都能幫助我們更好地整理思緒&#xff0c;留住美好瞬間。墨記APP正是一款兼具美學與實用性的記事軟件&#x…

龍芯7A1000橋片數據手冊解讀(時序)

RTC是電池&#xff0c;理論上一直是有電的&#xff0c;圖示指的是接上220V電之后切換為系統的電。順序是這樣的&#xff1a;接上220V電之后系統的12V供電就有了&#xff0c;12V轉為5VSB&#xff0c;5VSB供給RTC3V&#xff0c;此時RTC3V轉為系統供電而不是電池供電。這里的5VSB指…

無人機氣壓計模塊技術解析

一、運行方式 1. 基礎原理 氣壓計通過測量大氣壓力間接計算高度。無人機飛行中&#xff0c;氣壓隨高度上升而降低&#xff0c;傳感器將壓力信號轉為電信號&#xff0c;經ADC轉換為數字值。 2. 工作流程 數據采集&#xff1a;同步獲取壓力與溫度值。 原始數據處理&…

第十四節:第三部分:IO流:前置知識-什么是方法遞歸以及遞歸的形式、遞歸算法三要素

什么是方法遞歸以及遞歸的形式 遞歸算法三要素 代碼 代碼一&#xff1a;認識一下遞歸的形式 package com.itheima.Recurtion; //目標:認識一下遞歸的形式 public class RecurtionTest1 {public static void main(String[] args) {test2();}//直接方法遞歸public static void…

論文閱讀筆記:Digging Into Self-Supervised Monocular Depth Estimation

論文閱讀筆記&#xff1a;Digging Into Self-Supervised Monocular Depth Estimation 1 背景2 創新點3 方法4 模塊4.1 自監督訓練4.2 優化自監督深度估計4.2.1 每個像素的最小重建損失4.2.2 自動掩碼靜態像素4.2.3 多尺度估計4.2.4 最終的訓練損失 4.3 額外考慮 5 效果 1 背景 …

YAML 數據格式詳解

1. YAML 概念 YAML (YAML Ain’t Markup Language) 是一種人性化的數據序列化格式&#xff1a; 專注于數據而非標記&#xff08;與 XML 不同&#xff09;使用簡潔的語法表示復雜數據結構可讀性高&#xff0c;適合人類編寫和閱讀廣泛應用于配置文件&#xff08;如 Docker Comp…

react擴展

首先補充一下上個章節的一點結尾內容。reducer是一個純函數&#xff0c;純函數指的是當我們在redux里面定義了我們需要共享的對象后&#xff0c;我們是不可以對共享的對象本身進行改變的。我們在獲取更新后的共享數據時&#xff0c;要去重新定義一個新的變量來獲取更新后的共享…

6.獲取圖片灰度與縮放

目錄 一、Halcon 1. 獲取像素坐標以及灰度 2. 拖動縮放 3.圖像縮放的實現方式 二、VS聯合編程 1.獲取像素坐標和灰度 2.拖動縮放 一、Halcon 1. 獲取像素坐標以及灰度 *1. 獲取像素坐標 * 1. get_mposition * 2. halcon窗口事件自帶坐標數據 * *2. 獲取像素灰度 *…

無人機+AI:革新集裝箱箱號識別的智能解決方案

在現代化物流體系中&#xff0c;集裝箱箱號識別是貨物追蹤與管理的核心環節。然而&#xff0c;傳統的人工巡檢或固定攝像頭識別方式存在效率低、覆蓋范圍有限、易受環境干擾等問題&#xff0c;難以滿足日益增長的物流需求。基于無人機與AI技術的集裝箱箱號識別系統&#xff0c;…

一種新的參數高效微調方法-LoRI

論文&#xff1a;LoRI: Reducing Cross-Task Interference in Multi-Task Low-Rank Adaptation LoRA 具體參考 1. 引言與背景&#xff1a;為什么需要 LoRI&#xff1f; 這篇論文提出了一種新的參數高效微調&#xff08;PEFT&#xff09;方法&#xff0c;名為 LoRA with Reduce…

Go網絡編程:基于TCP的網絡服務端與客戶端

Go 語言的 net 包為網絡編程提供了簡潔高效的接口。我們可以使用它快速構建 TCP 網絡服務&#xff0c;如聊天服務器、RPC、微服務通信等。 一、TCP簡介 TCP&#xff08;Transmission Control Protocol&#xff09;是面向連接的、可靠的傳輸協議&#xff0c;通信模型為客戶端-服…

【StarRocks系列】架構、核心概念

目錄 一、架構&#xff1a;分布式 MPP 列式存儲 向量化引擎 二、存儲&#xff1a;高性能列式存儲引擎 三、表設計&#xff1a;三類模型適配不同場景 四、數據寫入&#xff1a;多種方式支持實時與批量 五、數據讀取&#xff1a;極致優化的查詢引擎 總結&#xff1a;Star…

從源碼到生產:Apache 2.4.57 自動化安裝實戰指南(附腳本)

引言&#xff1a;為何選擇源碼安裝 Apache&#xff1f; 在服務器運維場景中&#xff0c;源碼編譯安裝 Apache HTTP Server 是實現精細化配置的重要方式。相比包管理器安裝&#xff0c;源碼安裝可自定義模塊組合、適配特定依賴環境&#xff0c;并精確控制版本。本文將通過自動化…

iOS開發中的安全實踐:如何通過Ipa混淆與加固確保應用安全

隨著移動應用技術的不斷發展&#xff0c;開發者越來越重視應用的安全性&#xff0c;尤其是iOS應用。無論是面對大規模的數據泄露問題&#xff0c;還是在應用上線后避免被逆向破解&#xff0c;開發者們都需要采取一系列技術手段來保護應用。然而&#xff0c;很多開發者在應用開發…

JAVA實戰開源項目:智慧生活商城系統 (Vue+SpringBoot) 附源碼

本文項目編號 T 245 &#xff0c;文末自助獲取源碼 \color{red}{T245&#xff0c;文末自助獲取源碼} T245&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

GNU Octave 基礎教程(8):GNU Octave 常用數學函數

目錄 一、基本算術運 二、初等數學函數 三、三角函數與反三角函數 四、統計函數 五、復數與其他函數 ? 小結 &#x1f51c; 下一講預告 GNU Octave 內置了大量數學函數&#xff0c;涵蓋初等數學、線性代數、復數運算、統計函數等&#xff0c;非常適合科研、工程計算使用…