✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,可以私信,或者点击《获取方式》
(1)基于改进模拟退火的多池塘转塘全局路径规划:
通过无人机航拍获得江苏兴化某河蟹养殖区6个池塘的分布数据,提取每个池塘的边界坐标和转塘码头位置。定义转塘路径为从基地码头出发,依次访问各池塘码头完成投饵作业然后返回基地的最短哈密顿回路。采用概率密度函数改进的模拟退火算法求解。改进降温函数为T_k=T_0·(1-k/K_max)^p,指数p用柯西分布概率密度函数动态调整:在高温区p取较小值2使缓慢降温充分搜索,低温区p增大至5加速收敛。设定降温阈值T_threshold=0.01,当T_k低于阈值且连续500次迭代解未改进,直接跳出循环。Metropolis准则中加入动态调节参数λ=1+0.5·(k/K_max),使初期更容易接受劣解,后期趋于爬坡。种群包含30个并行搜索的个体,避免一次运行陷入。仿真中,改进SA规划的总转塘距离为1483m,传统SA为2637m,减少43.78%;规划时间0.87s,远快于传统SA的3.89s和PSO的1.77s。
(2)改进A*与动态人工势场融合的池塘内自主巡航:
投饵船在池塘内从转塘码头移至装料码头,或从作业结束点移向转塘码头,需要点到点路径规划。构建5m分辨率栅格地图,采用改进A*算法进行全局路径搜索。改进A*的评价函数加入动态加权因子ω=exp(-d_g/d_s),d_g为当前点到目标距离,d_s为起点到目标距离,使得搜索初期更偏启发式以快速接近目标,后期偏实际代价保证最优。同时引入转折惩罚函数,每次转向增加额外代价5,并删除共线冗余点。生成路径后应用B样条平滑。然后,将此平滑路径作为改进人工势场法的引力路径,构造引力势场U_att=0.5·ξ·d(q,path)^2,ξ=2.5;斥力势场采用改进的Firby势场,障碍物影响范围设为8m。融合算法在模拟池塘环境中,平均规划时间18ms,路径长度比单独A*减少5.1%,且动态避障时生成路径更平滑,指令节点数减少65%。实验船在池塘中实际测试,自动巡航成功率100%。
(3)云-边-端协同的转塘路径规划系统软件:
设计三层架构。云服务器部署在阿里云ECS,运行MySQL存储池塘地图、作业记录和路径规划参数,同时提供RESTful API供调用。MATLAB路径规划平台作为一个计算服务,接收区域池塘数据后,自动调用改进模拟退火算法生成最优转塘顺序,并调用改进A*与APF融合算法生成每个池塘内的自主巡航路径,结果以JSON格式回传。安卓APP层展示高德地图叠加矢量池塘图层,用户可配置投饵量、转塘顺序模式,并实时接收投饵船GPS回传位置,叠加显示规划路径与实际轨迹。通讯采用MQTT协议,船载4G模块。系统测试中,APP端发起一次完整6池塘路径规划请求,服务器响应时间1.2s,路径生成准确,能根据实时水位调整不可通行区域,投饵船按规划路径转塘,整个作业循环时间比人工操作缩短47.5%,饵料利用均匀度提升33%。
import numpy as np import random, math # 1. 改进模拟退火 TSP def improved_sa_tsp(dist_matrix, T0=1000, K_max=5000): n = len(dist_matrix) current_sol = list(range(n)); random.shuffle(current_sol) current_cost = path_cost(current_sol, dist_matrix) best_sol, best_cost = current_sol.copy(), current_cost T = T0 for k in range(K_max): # 生成邻域解(2-opt) i, j = random.sample(range(n), 2) new_sol = current_sol.copy() new_sol[i:j] = reversed(new_sol[i:j]) new_cost = path_cost(new_sol, dist_matrix) delta = new_cost - current_cost if delta < 0: current_sol, current_cost = new_sol, new_cost if new_cost < best_cost: best_sol, best_cost = new_sol, new_cost else: # 动态Metropolis lam = 1 + 0.5 * (k / K_max) if random.random() < math.exp(-delta / (T * lam)): current_sol, current_cost = new_sol, new_cost # 温度更新:柯西分布概率密度函数动态p p = 2 if T > 100 else 5 T = T0 * (1 - k / K_max) ** p if T < 0.01 and k > 200 and best_cost == current_cost: break return best_sol, best_cost def path_cost(route, d): return sum(d[route[i], route[i+1]] for i in range(len(route)-1)) + d[route[-1], route[0]] # 2. 改进A* + 人工势场融合 def improved_a_star(grid, start, goal): open_set = []; heapq.heappush(open_set, (0, start)) came_from, g_score = {start: 0}, {start: 0} d_s = heuristic(start, goal) while open_set: cur = heapq.heappop(open_set)[1] if cur == goal: break for nb in neighbors8(cur, grid): tentative_g = g_score[cur] + (1.4 if abs(nb[0]-cur[0])+abs(nb[1]-cur[1])==2 else 1) if nb not in g_score or tentative_g < g_score[nb]: g_score[nb] = tentative_g d_g = heuristic(nb, goal) w = math.exp(-d_g / d_s) # 动态加权因子 f = tentative_g + w * d_g + turning_penalty(came_from.get(cur), cur, nb) heapq.heappush(open_set, (f, nb)) came_from[nb] = cur # 重建路径、B样条平滑 return reconstruct_path(came_from, start, goal) def turning_penalty(prev, cur, nb): if prev is None: return 0 # 计算转角 v1 = (cur[0]-prev[0], cur[1]-prev[1]) v2 = (nb[0]-cur[0], nb[1]-cur[1]) dot = v1[0]*v2[0] + v1[1]*v2[1] angle = math.acos(max(-1, min(1, dot/(np.linalg.norm(v1)*np.linalg.norm(v2))))) return 5 * angle # 转折惩罚 # 3. 人工势场沿全局路径 def apf_global_guidance(current_pos, goal_pos, obstacles, global_path): att_force = 2.5 * (np.array(global_path[-1]) - current_pos) rep_force = np.array([0.0, 0.0]) for obs in obstacles: d = np.linalg.norm(current_pos - obs) if d < 8: rep_force += (1/d - 1/8) * (current_pos - obs) / d**3 # 全局路径引力:最近路径点 closest_idx = np.argmin([np.linalg.norm(current_pos - p) for p in global_path]) path_force = 1.0 * (global_path[min(closest_idx+3, len(global_path)-1)] - current_pos) total_force = att_force + rep_force + path_force return total_force / np.linalg.norm(total_force)