首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

蟻群演算法 C/C++ 實作解析(四):螞蟻移動決策核心邏輯

     編輯:關於C++

概覽

本文為系列第四部分,聚焦螞蟻單步移動決策核心函數:GetMaxSmell(感知範圍內最大信息素)、IsTrace(軌跡回溯檢查)、MaxLocation(三方向比較)、CanGo/JudgeCanGo(可行性判斷)、方向轉換輔助函數。

核心函數詳解

1. GetMaxSmell:感知扇區內最大信息素

根據螞蟻當前朝向 ddir,掃描前方 ANT_EYESHOT 範圍內的矩形區域:

  • UP:y 遞減半平面
  • DOWN:y 遞增半平面
  • LEFT:x 遞減半平面
  • RIGHT:x 遞增半平面

掃描邏輯:

  1. 跳過不可通行格子(!JudgeCanGo)。
  2. 若掃描到目標(食物/巢穴)且信息素類型匹配 → 直接回傳 MAX_SMELL。
  3. 跳過已走過軌跡(IsTrace)。
  4. 記錄區域內最大信息素濃度 ms。

2. IsTrace:防止原地打轉

檢查座標 (xxx, yyy) 是否存在於螞蟻最近 TRACE_REMEMBER 步軌跡陣列 tracex[]/tracey[] 中。存在回傳 1,否則 0。

3. MaxLocation:三方向信息素比較

輸入前方 num1、左轉 num2、右轉 num3 最大信息素值。回傳:

  • 0:全為 0(無信息素引導)
  • 1:前方最大
  • 2:左轉最大
  • 3:右轉最大

平局優先序:前方 > 左 > 右(依 if 判斷順序)。

4. CanGo:三方向通行性編碼

檢查前方、左轉、右轉三方向是否可通行,回傳 0-7 編碼:

回傳值含義
0前、左、右均可通行
1前不可,左、右可
2左不可,前、右可
3右不可,前、左可
4前、左不可,右可
5前、右不可,左可
6左、右不可,前可
7三方向全不可(死胡同)

5. JudgeCanGo:單格通行性判斷

條件:座標在地圖邊界內(1..MAXX, 1..MAXY)且 block[xxx][yyy] == 0(無障礙物)。

6. 方向轉換輔助函數

TurnLeft(UP) = LEFT;  TurnLeft(DOWN) = RIGHT;
TurnLeft(LEFT) = DOWN; TurnLeft(RIGHT) = UP;

TurnRight(UP) = RIGHT; TurnRight(DOWN) = LEFT;
TurnRight(LEFT) = UP;  TurnRight(RIGHT) = DOWN;

TurnBack(UP) = DOWN;   TurnBack(DOWN) = UP;
TurnBack(LEFT) = RIGHT; TurnBack(RIGHT) = LEFT;

設計亮點

  • 局部感知:螞蟻僅掃描視野範圍,無全域地圖知識。
  • 軌跡記憶:固定長度環狀緩衝區防止短週期震盪。
  • 方向編碼:CanGo 將三方向通行性壓縮為 3-bit 狀態,決策邏輯簡潔高效。
  • 目標導向覆蓋:掃描到目標直接回傳最大信息素,確保找到目標後強烈趨向。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved