机器人路径规划算法之A*算法详解+MATLAB代码实现

news2026/3/14 22:25:34
目录一、A*算法核心原理1. 算法概述2. 核心公式3. 启发函数 h(n) 的性质4. 常用启发函数二、A*算法步骤详解1. 算法流程2. 与Dijkstra的对比三、MATLAB实现A*算法一、A*算法核心原理1.算法概述A*算法是一种启发式搜索算法结合了Dijkstra的最优性保证和贪心搜索的高效性。它的核心思想是通过启发函数*引导搜索方向优先探索最有可能到达目标的节点。2.核心公式A*使用评价函数 f(n)*​ 来决定节点的优先级f(n) g(n) h(n)其中g(n)从起点到节点n的实际代价h(n)从节点n到终点的估计代价启发函数f(n)通过节点n的路径的总估计代价3.启发函数 h(n) 的性质可采纳性(Admissibility)h(n) ≤ 实际最短距离保证找到最优解一致性(Consistency)h(n) ≤ c(n, n) h(n)其中c是移动代价保证高效4.常用启发函数曼哈顿距离适用于4方向移动h |x1 - x2| |y1 - y2|欧几里得距离适用于8方向移动h sqrt((x1 - x2)² (y1 - y2)²)切比雪夫距离适用于国王移动8方向h max(|x1 - x2|, |y1 - y2|)二、A*算法步骤详解1.算法流程1. 初始化 - 将起点加入开放列表(open list) - g(起点)0, f(起点)h(起点) - 关闭列表(closed list)为空 2. 循环直到开放列表为空 a. 从开放列表中选择f值最小的节点作为当前节点 b. 将当前节点移到关闭列表 c. 如果当前节点是目标重建路径并返回 d. 对当前节点的每个邻居 - 如果邻居在关闭列表或不可通过跳过 - 计算临时g值 g(当前) 移动代价 - 如果邻居不在开放列表或临时g值 g(邻居) * 更新g(邻居) 临时g值 * 计算h(邻居) 启发函数(邻居, 目标) * 计算f(邻居) g(邻居) h(邻居) * 设置父节点为当前节点 * 如果邻居不在开放列表加入开放列表 3. 如果开放列表为空但未找到路径返回失败2.与Dijkstra的对比特性DijkstraA*搜索策略​均匀扩展所有方向向目标方向优先扩展启发函数​无(h0)有(h启发估计)效率​较低探索节点多较高启发式引导最优性​保证最优保证最优(启发函数可采纳)内存使用​高较低三、MATLAB实现A*算法%% A*算法路径规划MATLAB实现 clear; clc; close all; fprintf( A*算法路径规划演示 \n); %% 1. 创建网格地图 fprintf(1. 创建20x20网格地图...\n); map_size 20; grid_map zeros(map_size, map_size); % 添加障碍物 grid_map(8, 3:18) 1; % 水平墙 grid_map(5:15, 10) 1; % 垂直墙 grid_map(12:16, 15:18) 1; % 方块障碍 % 添加随机障碍物 rng(42); num_obstacles 30; for i 1:num_obstacles r randi([1, map_size]); c randi([1, map_size]); grid_map(r, c) 1; end % 设置起点和终点 start_pos [2, 2]; goal_pos [18, 18]; grid_map(start_pos(1), start_pos(2)) 0; grid_map(goal_pos(1), goal_pos(2)) 0; fprintf( 起点: (%d, %d)\n, start_pos(1), start_pos(2)); fprintf( 终点: (%d, %d)\n, goal_pos(1), goal_pos(2)); %% 2. 运行A*算法 fprintf(\n2. 运行A*算法...\n); fprintf( 启发函数: 曼哈顿距离\n); fprintf( 移动方式: 4方向\n); tic; [path, nodes_expanded, g_scores] a_star_4dir(grid_map, start_pos, goal_pos); plan_time toc; fprintf( 规划完成耗时: %.4f秒\n, plan_time); %% 3. 运行8方向A*算法对比 fprintf(\n3. 运行8方向A*算法对比...\n); fprintf( 启发函数: 对角线距离\n); tic; [path_8dir, nodes_expanded_8dir, g_scores_8dir] a_star_8dir(grid_map, start_pos, goal_pos); plan_time_8dir toc; fprintf( 规划完成耗时: %.4f秒\n, plan_time_8dir); %% 4. 可视化结果 fprintf(\n4. 可视化结果...\n); visualize_a_star_results(grid_map, start_pos, goal_pos, path, path_8dir, ... nodes_expanded, nodes_expanded_8dir, ... g_scores, g_scores_8dir, plan_time, plan_time_8dir); %% 4方向A*算法实现 function [path, nodes_expanded, g_scores] a_star_4dir(grid_map, start_pos, goal_pos) % A*算法实现4方向移动曼哈顿距离 % 输入grid_map - 网格地图0空闲1障碍物 % start_pos - 起点 [行, 列] % goal_pos - 终点 [行, 列] % 输出path - 路径坐标 % nodes_expanded - 扩展的节点数 % g_scores - 实际代价矩阵 [rows, cols] size(grid_map); % 初始化数据结构 open_list []; % 待探索节点列表 closed_list false(rows, cols); % 已探索节点标记 g_score inf(rows, cols); % 实际代价 f_score inf(rows, cols); % 估计总代价 parent zeros(rows, cols, 2); % 父节点坐标 % 设置起点 g_score(start_pos(1), start_pos(2)) 0; f_score(start_pos(1), start_pos(2)) heuristic_manhattan(start_pos, goal_pos); % 将起点加入开放列表 [f_score, g_score, row, col] open_list [open_list; f_score(start_pos(1), start_pos(2)), ... g_score(start_pos(1), start_pos(2)), ... start_pos(1), start_pos(2)]; % 4个移动方向 directions [-1, 0; 1, 0; 0, -1; 0, 1]; nodes_expanded 0; path []; while ~isempty(open_list) % 从开放列表中找到f值最小的节点 [~, min_idx] min(open_list(:, 1)); current_node open_list(min_idx, 3:4); current_g open_list(min_idx, 2); % 从开放列表移除 open_list(min_idx, :) []; % 如果已探索过跳过 if closed_list(current_node(1), current_node(2)) continue; end % 标记为已探索 closed_list(current_node(1), current_node(2)) true; nodes_expanded nodes_expanded 1; % 如果到达目标重建路径 if isequal(current_node, goal_pos) path reconstruct_path(parent, start_pos, goal_pos); break; end % 探索4个邻居方向 for d 1:4 neighbor_row current_node(1) directions(d, 1); neighbor_col current_node(2) directions(d, 2); % 检查边界 if neighbor_row 1 || neighbor_row rows || ... neighbor_col 1 || neighbor_col cols continue; end % 检查障碍物 if grid_map(neighbor_row, neighbor_col) 1 continue; end % 计算临时g值 tentative_g current_g 1; % 移动代价为1 % 如果找到更好路径 if tentative_g g_score(neighbor_row, neighbor_col) % 更新父节点 parent(neighbor_row, neighbor_col, :) current_node; % 更新g值和f值 g_score(neighbor_row, neighbor_col) tentative_g; h heuristic_manhattan([neighbor_row, neighbor_col], goal_pos); f tentative_g h; f_score(neighbor_row, neighbor_col) f; % 添加到开放列表 open_list [open_list; f, tentative_g, neighbor_row, neighbor_col]; end end end g_scores g_score; g_scores(g_scores inf) NaN; end %% 8方向A*算法实现 function [path, nodes_expanded, g_scores] a_star_8dir(grid_map, start_pos, goal_pos) % A*算法实现8方向移动对角线距离 % 输入grid_map - 网格地图 % start_pos - 起点 % goal_pos - 终点 % 输出路径、扩展节点数、代价矩阵 [rows, cols] size(grid_map); % 初始化 open_list []; closed_list false(rows, cols); g_score inf(rows, cols); f_score inf(rows, cols); parent zeros(rows, cols, 2); g_score(start_pos(1), start_pos(2)) 0; f_score(start_pos(1), start_pos(2)) heuristic_diagonal(start_pos, goal_pos); open_list [open_list; f_score(start_pos(1), start_pos(2)), ... g_score(start_pos(1), start_pos(2)), ... start_pos(1), start_pos(2)]; % 8个移动方向及其代价 % 前4个上下左右代价1 % 后4个对角线代价√2≈1.414 directions [-1, 0, 1.0; % 上 1, 0, 1.0; % 下 0, -1, 1.0; % 左 0, 1, 1.0; % 右 -1, -1, 1.414; % 左上 -1, 1, 1.414; % 右上 1, -1, 1.414; % 左下 1, 1, 1.414]; % 右下 nodes_expanded 0; path []; while ~isempty(open_list) % 找到f值最小的节点 [~, min_idx] min(open_list(:, 1)); current_node open_list(min_idx, 3:4); current_g open_list(min_idx, 2); open_list(min_idx, :) []; if closed_list(current_node(1), current_node(2)) continue; end closed_list(current_node(1), current_node(2)) true; nodes_expanded nodes_expanded 1; if isequal(current_node, goal_pos) path reconstruct_path(parent, start_pos, goal_pos); break; end % 探索8个邻居方向 for d 1:size(directions, 1) neighbor_row current_node(1) directions(d, 1); neighbor_col current_node(2) directions(d, 2); move_cost directions(d, 3); % 检查边界 if neighbor_row 1 || neighbor_row rows || ... neighbor_col 1 || neighbor_col cols continue; end % 检查障碍物 if grid_map(neighbor_row, neighbor_col) 1 continue; end % 对于对角线移动检查是否切角 if d 4 % 检查两个相邻单元格是否都是障碍物 if grid_map(current_node(1), neighbor_col) 1 ... grid_map(neighbor_row, current_node(2)) 1 continue; end end % 计算临时g值 tentative_g current_g move_cost; if tentative_g g_score(neighbor_row, neighbor_col) parent(neighbor_row, neighbor_col, :) current_node; g_score(neighbor_row, neighbor_col) tentative_g; h heuristic_diagonal([neighbor_row, neighbor_col], goal_pos); f tentative_g h; f_score(neighbor_row, neighbor_col) f; open_list [open_list; f, tentative_g, neighbor_row, neighbor_col]; end end end g_scores g_score; g_scores(g_scores inf) NaN; end %% 启发函数 function h heuristic_manhattan(pos1, pos2) % 曼哈顿距离4方向移动适用 h abs(pos1(1) - pos2(1)) abs(pos1(2) - pos2(2)); end function h heuristic_diagonal(pos1, pos2) % 对角线距离8方向移动适用 dx abs(pos1(1) - pos2(1)); dy abs(pos1(2) - pos2(2)); h 1.0 * (dx dy) (1.414 - 2 * 1.0) * min(dx, dy); end function h heuristic_euclidean(pos1, pos2) % 欧几里得距离 h sqrt((pos1(1) - pos2(1))^2 (pos1(2) - pos2(2))^2); end %% 工具函数 function path reconstruct_path(parent, start_pos, goal_pos) % 重建路径 path []; current goal_pos; while ~isequal(current, [0, 0]) path [current; path]; prev parent(current(1), current(2), :); current [prev(1), prev(2)]; end % 验证路径有效性 if isempty(path) || ~isequal(path(1, :), start_pos) path []; end end %% 可视化函数 function visualize_a_star_results(grid_map, start_pos, goal_pos, path_4dir, path_8dir, ... nodes_exp_4, nodes_exp_8, g_4, g_8, time_4, time_8) % 创建可视化窗口 figure(Position, [50, 50, 1400, 900]); % 子图14方向A*结果 subplot(2, 3, 1); imagesc(grid_map); colormap(gca, [1 1 1; 0.3 0.3 0.3]); hold on; plot(start_pos(2), start_pos(1), gs, MarkerSize, 12, MarkerFaceColor, g, LineWidth, 2); plot(goal_pos(2), goal_pos(1), rs, MarkerSize, 12, MarkerFaceColor, r, LineWidth, 2); if ~isempty(path_4dir) plot(path_4dir(:,2), path_4dir(:,1), b-, LineWidth, 2); plot(path_4dir(:,2), path_4dir(:,1), bo, MarkerSize, 5, MarkerFaceColor, b); end axis equal tight; grid on; set(gca, YDir, reverse); title(sprintf(4方向A*路径\n步数: %d, 扩展节点: %d, ... size(path_4dir,1)-1, nodes_exp_4), FontSize, 11, FontWeight, bold); xlabel(X); ylabel(Y); % 子图28方向A*结果 subplot(2, 3, 2); imagesc(grid_map); colormap(gca, [1 1 1; 0.3 0.3 0.3]); hold on; plot(start_pos(2), start_pos(1), gs, MarkerSize, 12, MarkerFaceColor, g, LineWidth, 2); plot(goal_pos(2), goal_pos(1), rs, MarkerSize, 12, MarkerFaceColor, r, LineWidth, 2); if ~isempty(path_8dir) plot(path_8dir(:,2), path_8dir(:,1), m-, LineWidth, 2); plot(path_8dir(:,2), path_8dir(:,1), mo, MarkerSize, 5, MarkerFaceColor, m); end axis equal tight; grid on; set(gca, YDir, reverse); title(sprintf(8方向A*路径\n步数: %d, 扩展节点: %d, ... size(path_8dir,1)-1, nodes_exp_8), FontSize, 11, FontWeight, bold); xlabel(X); ylabel(Y); % 子图3路径对比 subplot(2, 3, 3); imagesc(grid_map); colormap(gca, [1 1 1; 0.3 0.3 0.3]); hold on; plot(start_pos(2), start_pos(1), gs, MarkerSize, 12, MarkerFaceColor, g, LineWidth, 2); plot(goal_pos(2), goal_pos(1), rs, MarkerSize, 12, MarkerFaceColor, r, LineWidth, 2); if ~isempty(path_4dir) plot(path_4dir(:,2), path_4dir(:,1), b-, LineWidth, 2, DisplayName, 4方向); end if ~isempty(path_8dir) plot(path_8dir(:,2), path_8dir(:,1), m-, LineWidth, 2, DisplayName, 8方向); end axis equal tight; grid on; set(gca, YDir, reverse); title(路径对比, FontSize, 11, FontWeight, bold); xlabel(X); ylabel(Y); legend(Location, best); % 子图44方向代价地图 subplot(2, 3, 4); % 处理NaN值 g_4_plot g_4; g_4_plot(isnan(g_4_plot)) max(g_4_plot(~isnan(g_4_plot))) 1; imagesc(g_4_plot); colormap(gca, hot); colorbar; hold on; plot(start_pos(2), start_pos(1), gs, MarkerSize, 12, MarkerFaceColor, g, LineWidth, 2); plot(goal_pos(2), goal_pos(1), rs, MarkerSize, 12, MarkerFaceColor, r, LineWidth, 2); if ~isempty(path_4dir) plot(path_4dir(:,2), path_4dir(:,1), c-, LineWidth, 1.5); end axis equal tight; set(gca, YDir, reverse); title(4方向实际代价(g值), FontSize, 11, FontWeight, bold); xlabel(X); ylabel(Y); % 子图58方向代价地图 subplot(2, 3, 5); g_8_plot g_8; g_8_plot(isnan(g_8_plot)) max(g_8_plot(~isnan(g_8_plot))) 1; imagesc(g_8_plot); colormap(gca, hot); colorbar; hold on; plot(start_pos(2), start_pos(1), gs, MarkerSize, 12, MarkerFaceColor, g, LineWidth, 2); plot(goal_pos(2), goal_pos(1), rs, MarkerSize, 12, MarkerFaceColor, r, LineWidth, 2); if ~isempty(path_8dir) plot(path_8dir(:,2), path_8dir(:,1), c-, LineWidth, 1.5); end axis equal tight; set(gca, YDir, reverse); title(8方向实际代价(g值), FontSize, 11, FontWeight, bold); xlabel(X); ylabel(Y); % 子图6性能比较 subplot(2, 3, 6); categories {4方向A*, 8方向A*}; nodes_data [nodes_exp_4, nodes_exp_8]; time_data [time_4 * 1000, time_8 * 1000]; % 转换为毫秒 if ~isempty(path_4dir) ~isempty(path_8dir) path_len_data [size(path_4dir,1)-1, size(path_8dir,1)-1]; yyaxis left; bar(1:2, nodes_data, 0.6, FaceColor, [0.2 0.6 0.8]); ylabel(扩展节点数, FontSize, 10); hold on; yyaxis right; plot(1:2, path_len_data, r-o, LineWidth, 2, MarkerSize, 8, MarkerFaceColor, r); ylabel(路径长度步, FontSize, 10); set(gca, XTick, 1:2, XTickLabel, categories); grid on; title(性能对比, FontSize, 11, FontWeight, bold); % 添加数值标签 yyaxis left; for i 1:2 text(i, nodes_data(i), sprintf(%d, nodes_data(i)), ... HorizontalAlignment, center, VerticalAlignment, bottom, ... FontSize, 9, FontWeight, bold); end yyaxis right; for i 1:2 text(i, path_len_data(i), sprintf(%d, path_len_data(i)), ... HorizontalAlignment, center, VerticalAlignment, bottom, ... FontSize, 9, FontWeight, bold, Color, r); end legend({扩展节点数, 路径长度}, Location, best); else text(0.5, 0.5, 路径不存在无法比较, ... HorizontalAlignment, center, FontSize, 11, FontWeight, bold); axis off; end % 添加整体标题 sgtitle(A*算法路径规划结果对比, FontSize, 14, FontWeight, bold); fprintf( 可视化完成\n); fprintf(\n 结果对比 \n\n); fprintf(性能指标对比:\n); fprintf(%-15s %-15s %-15s\n, 算法, 4方向A*, 8方向A*); fprintf(%-15s %-15d %-15d\n, 扩展节点数:, nodes_exp_4, nodes_exp_8); fprintf(%-15s %-15.4f %-15.4f\n, 规划时间(s):, time_4, time_8); if ~isempty(path_4dir) ~isempty(path_8dir) fprintf(%-15s %-15d %-15d\n, 路径长度:, size(path_4dir,1)-1, size(path_8dir,1)-1); fprintf(%-15s %-15.1f%% %-15.1f%%\n, 效率提升:, 0, ... 100*(nodes_exp_4 - nodes_exp_8)/nodes_exp_4); end fprintf(\n 程序执行完成 \n\n); % 显示算法原理总结 fprintf(A*算法原理总结:\n); fprintf(1. 评价函数: f(n) g(n) h(n)\n); fprintf(2. g(n): 从起点到n的实际代价\n); fprintf(3. h(n): 从n到终点的启发估计曼哈顿/对角线距离\n); fprintf(4. 开放列表: 存储待探索节点按f值排序\n); fprintf(5. 关闭列表: 存储已探索节点\n); fprintf(6. 保证最优性: 启发函数h(n) ≤ 实际最短距离可采纳性\n); end输出内容命令行输出 A*算法路径规划演示 1. 创建20x20网格地图... 起点: (2, 2) 终点: (18, 18) 2. 运行A*算法... 启发函数: 曼哈顿距离 移动方式: 4方向 规划完成耗时: 0.0079秒 3. 运行8方向A*算法对比... 启发函数: 对角线距离 规划完成耗时: 0.0085秒 4. 可视化结果... 可视化完成 结果对比 性能指标对比: 算法 4方向A* 8方向A* 扩展节点数: 198 99 规划时间(s): 0.0079 0.0085 路径长度: 34 22 效率提升: 0.0 % 50.0 % 程序执行完成 A*算法原理总结: 1. 评价函数: f(n) g(n) h(n) 2. g(n): 从起点到n的实际代价 3. h(n): 从n到终点的启发估计曼哈顿/对角线距离 4. 开放列表: 存储待探索节点按f值排序 5. 关闭列表: 存储已探索节点 6. 保证最优性: 启发函数h(n) ≤ 实际最短距离可采纳性图形窗口6个子图4方向A*路径结果8方向A*路径结果两种路径对比4方向实际代价地图8方向实际代价地图性能对比柱状图A算法的优势*高效性通过启发函数引导搜索减少探索节点最优性在可采纳启发函数下保证找到最短路径灵活性可通过不同启发函数适应不同场景完备性如果存在路径一定能够找到4方向 vs 8方向4方向只允许上下左右移动路径可能更长但更符合某些机器人运动约束8方向允许对角线移动路径更短更自然但需要考虑切角问题机器人应用% 实际机器人路径规划考虑因素 % 1. 机器人尺寸将机器人膨胀到障碍物 % 2. 运动学约束考虑转弯半径 % 3. 动态障碍物结合D*或终身规划A*(LPA*) % 4. 多层规划全局A* 局部DWA避障

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…