erlang下A*算法的效率优化过程

路径规划与轨迹优化 —— A*算法 A*算法 阅读详情

近期在做一个系统时发现项目中用的A*算法效率太差了,具体要时间上的话就是一个100路径点的寻路要花上大概50ms左右,在需要大量寻路的时候会非常卡。

1、首先分析A*算法的过程,摘自百度百科http://baike.baidu.com/view/7850.htm?fr=aladdin

while(OPEN!=NULL)
{
从OPEN表中取估价值f(n)最小的节点n;
if(n节点==目标节点)
break;
for(当前节点n的每个子节点X)
{
算X的估价值;
if(XinOPEN)
if(X的估价值小于OPEN表的估价值)
{
把n设置为X的父亲;
更新OPEN表中的估价值;//取最小路径的估价值
}
if(XinCLOSE)
continue;
if(Xnotinboth)
{
把n设置为X的父亲;
求X的估价值;
并将X插入OPEN表中;//还没有排序
}
}//endfor
将n节点插入CLOSE表中;
按照估价值将OPEN表中的节点排序;//实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。
}//endwhile(OPEN!=NULL)

2、启用fprof,查看各个操作具体耗时
fprof_start(Procs) ->
	[fprof:trace([start, {file, "/tmp/fprof.trace"}, {procs, Proc}]) || Proc <- Procs].

fprof_stop() ->
	Now = fun() ->
				  {A, B, _} = erlang:now(),
				  A * 1000000 + B
		  end,
	ok = fprof:trace(stop),
        ok = fprof:profile({file, "/tmp/fprof.trace"}),
        Analyse = lists:concat(["/tmp/fprof-", Now(), ".analysis"]),
        ok = fprof:analyse([{dest, Analyse}, {details, true}, {totals, true}, {sort, own}]),
        ok.

上述方法就是一次fprof启动和终止过程,对于过程内的每一次调用都会记录到指定的文件中,具体可以查看手册中关于fprof的用法。

3、查看生成的文件内容,找出耗时的具体函数
%                                               CNT       ACC       OWN
[{ totals,                                     28740,31024.155,  181.700}].  %%%

{[{{aStar,is_tile_walkable,3},                  581,  113.807,   65.051},
  {{lists,member,2},                            458,    0.000,   42.260}],
 { {lists,member,2},                           1039,  113.807,  107.311},     %
 [{{lists,member,2},                            458,    0.000,   42.260},
  {suspend,                                     458,    6.496,    0.000}]}.

{[{{lists,foldl,3},                            3810,    0.000,    9.036},
  {{aStar,insert_open_list,1},                  327,   15.254,    0.656},
  {{erl_lint,bool_option,4},                     26,    0.185,    0.053},
  {{orddict,from_list,1},                         4,    0.119,    0.024},
  {{erl_eval,merge_bindings,2},                   7,    0.133,    0.014},
  {{dict,from_list,1},                            6,    3.200,    0.012},
  {{erl_lint,value_option,7},                     2,    0.014,    0.004},
  {{erl_lint,exprs_opt,3},                        2,    0.020,    0.004},
  {{erl_lint,expr_list,3},                        2,    0.042,    0.003}],

从上面的内容可以看出,一次操作中,aStar:is_tile_walkable这个方法调用次数最多,占用时间也是最多,其中最主要的消耗在于lists:member。出现上述这种情况是因为,对于算法中需要探测的每一个点,都要检测其周围的点是否是可走的点,如果是可走的点才会加入openlist中。判断一个点是否可走的方法是,查看该点是否在不可走点的列表中。不可走点的列表是{X, Y}类数据的tuplelist。

4、针对lists:member这个最耗时操作优化
由于函数lists:member(Item, List)是依次用List中的每一个元素去检查是否匹配Item,所以对于{X, Y}这种结构的匹配比一个单独X要复杂,所以先把不可走点列表中的{X, Y}结构转换为X,具体转换规则可以自由定制。这样改完之后,原本50ms的时间减小到了30ms。

5、进一步优化
30ms对于一些情况下还是太过耗时了,而整个算法最耗时操作在lists:member,这种操作的时间复杂度是o(n),如果能改结构呢?用二叉树存储不可走点列表,那么理论上复杂度就是o(logn)。修改结构,使用gb_sets存储,再次检查时间消耗只有2ms。
结论:1、list是erlang中常用的结构,erlang很多操作是通过遍历list实现的,但是如果在数据量上升到100以上,效率会下降很多。2、erlang中自带的二叉树结构有gb_sets,gb_trees,对于处理大量数据的查找、插入很有效。3、fprof这个工具在分析性能上非常好用,结合timer:tc可以很快找到问题。
附:A*算法代码
%% Author: pyf
%% Created: 2014-8-3
%% Description: A*算法
-module(aStar).

%%
%% Include files
%%
-include("logger.hrl").
-include("mapDefine.hrl").
-record(r_map_node, {key, g, f, p_parent}).
-define(close_list_length, 400).

%%
%% Exported Functions
%%
-export([find_path/4,
		 find_path/5]).

%%
%% API Functions
%%
%%Astar算法寻找路径,地图相关进程调用
find_path(StartX, StartY, EndX, EndY) ->
	case StartX =:= EndX andalso StartY =:= EndY of
		true ->
			[{StartX, StartY}];
		false ->
			UnWalkAbleTile = make_unwalkable_tile(),
			find_path2(StartX, StartY, EndX, EndY, UnWalkAbleTile)
	end.

find_path(MapDataID, StartX, StartY, EndX, EndY) ->
	case StartX =:= EndX andalso StartY =:= EndY of
		true ->
			[{StartX, StartY}];
		false ->
			UnWalkAbleTile = make_unwalkable_tile(MapDataID),
			find_path2(StartX, StartY, EndX, EndY, UnWalkAbleTile)
	end.

%%初始化起始点StartNode,初始化openlist和closelist
find_path2(StartX, StartY, EndX, EndY, UnWalkAbleTile) ->
	StartNode = #r_map_node{key = {StartX, StartY}, g = 0},
	set_open_list([]),
	set_close_list([]),
	find_path3(EndX, EndY, StartNode, UnWalkAbleTile).

find_path3(EndX, EndY, CurNode, UnWakeAbleTile) ->
	case catch insert_aound_map_nodes(CurNode, EndX, EndY, UnWakeAbleTile) of
		{ok, get_it} ->
			Path = [{EndX, EndY}],
            find_path4(CurNode, Path);
		Bool when is_atom(Bool) ->
			[MinNode | T] = get_open_list(),
			set_open_list(T),
			Bool andalso insert_close_list(CurNode, get_close_list()),
			find_path3(EndX, EndY, MinNode, UnWakeAbleTile);
		{failed} ->
			[];
		Other ->
			?ERR(astar, "~w", [Other])
	end.

find_path4(#r_map_node{p_parent = undefined} = MapNode, Path) ->
	open_list_delete(),
    close_list_delete(),
    [MapNode#r_map_node.key | Path];
find_path4(CurNode, Path) ->
    ParentNode = get_close_list(CurNode#r_map_node.p_parent),
    find_path4(ParentNode, [CurNode#r_map_node.key | Path]).



%%
%% Local Functions
%%
%%构造不可走的点,为了方便测试,这里随机构造100个点,其中不包括测试起始点{0, 0}和测试终止点{100, 100}
make_unwalkable_tile() ->
	mapViewConst:block2c_list().
%% 	F = fun(_N, AccIn) ->
%% 				[{random:uniform(100), random:uniform(100)} | AccIn]
%% 		end,
%% 	lists:foldl(F, [], lists:seq(1, 2000)).

make_unwalkable_tile(MapDataID) ->
	case get({?MapView_PhyList2C, MapDataID}) of
		undefined ->
			MapView = mapManager:getMapView(MapDataID),
			put(?MapView_LogicCellNumX, MapView#mapView.logicCellNumX),
			F = fun(CurIndex, Elem, Acc) ->
						  case Elem =:= true of
							  true ->
								  [CurIndex | Acc];
							  false ->
								  Acc
						  end
				  end,
			TileList = array:foldl(F, [], MapView#mapView.phyArray),
			GBTileList = gb_sets:from_list(TileList),
			put({?MapView_PhyList2C, MapDataID}, GBTileList),
			GBTileList;
		TileList ->
			TileList
	end.

%%计算从点{X, Y}到{X1, Y1}的期望值
get_qi_wang_zhi(X, Y, X1, Y1) ->
	erlang:abs(X1 - X) + erlang:abs(Y1 - Y).

%%插入元素Element到closelist中
insert_close_list(Element, CloseList) ->
	case length(CloseList) >= ?close_list_length of
		true ->
			throw({failed});
		false ->
			set_close_list([Element | CloseList])
	end.

%%更新openlist
update_open_list(MapNode) ->
	OpenList = get_open_list(),
	F = fun(#r_map_node{key = Key}, {AccInH, AccInT}) ->
				[AccInTH | AccInTT] = AccInT,
				case Key =:= MapNode#r_map_node.key of
					true ->
						throw({get, lists:reverse([MapNode | AccInH], AccInTT)});
					false ->
						{[AccInTH | AccInH], AccInTT}
				end
		end,
	case catch lists:foldl(F, {[], OpenList}, OpenList) of
		{get, NewOpenList} ->
			set_open_list(NewOpenList);
		_ ->
			set_open_list(OpenList)
	end.

insert_open_list(MapNode) ->
	OpenList = get_open_list(),
	F = fun(#r_map_node{f = F}, {AccInH, AccInT}) ->
				case F > MapNode#r_map_node.f of
					true ->
						throw({get, lists:reverse([MapNode | AccInH], AccInT)});
					false ->
						[AccInTH | AccInTT] = AccInT,
						{[AccInTH | AccInH], AccInTT}
				end
		end,
	case catch lists:foldl(F, {[], OpenList}, OpenList) of
		{get, NewOpenList} ->
			set_open_list(NewOpenList);
		_ ->
			set_open_list(OpenList ++ [MapNode])
	end.

%%判断点是否可走
is_tile_walkable(TX, TY, UnWakeAbleTile) ->
%% 	not lists:member({TX, TY}, UnWakeAbleTile).
	NumX = get(?MapView_LogicCellNumX),
	Index = TY * NumX + TX,
	TX >= 0 andalso TY >= 0 andalso gb_sets:is_element(Index, UnWakeAbleTile) =/= true.

%%检查点{TX, TY}是否closelist中的元素
close_list_member({TX, TY}) ->
	CloseList = get_close_list(),
	lists:keyfind({TX, TY}, #r_map_node.key, CloseList) =/= false.

%%遍历当前点CurNode周围的每一个点{TX, TY},并且对将其插入到openlist或者更新openlist
insert_aound_map_nodes(CurNode, EndTX, EndTY, UnWakeAbleTile) ->
	#r_map_node{key = {CTX, CTY}} = CurNode,
	F = fun({TXAdd, TYAdd}, AccIn) ->
				TX = CTX + TXAdd,
				TY = CTY + TYAdd,
				if TX =:= EndTX andalso TY =:= EndTY ->
					   erlang:throw({ok, get_it});
				   TX =:= CTX andalso TY =:= CTY ->
					   ignore;
				   true ->
					   insert_aound_map_nodes(CurNode, EndTX, EndTY, TX, TY, close_list_member({TX, TY}), UnWakeAbleTile) orelse AccIn
				end
		end,
	lists:foldl(F, false, [{0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}]).

insert_aound_map_nodes(_CurNode, _EndTX, _EndTY, _TX, _TY, true, _UnWakeAbleTile) ->
	false;
insert_aound_map_nodes(CurNode, EndTX, EndTY, TX, TY, false, UnWakeAbleTile) ->
	OpenList = get_open_list(),
	MapNode = new_map_node(TX, TY, CurNode, EndTX, EndTY),
	case lists:keyfind({TX, TY}, #r_map_node.key, OpenList) of
		false ->
			case is_tile_walkable(TX, TY, UnWakeAbleTile) of
				true ->
					insert_open_list(MapNode),
					true;
				false ->
					false
			end;
		OldMapNode ->
			%%如果新的路径点MapNode已经是openlist中的元素OldMapNode,则比较两个路径的估值f,openlist中保留f小的那个
			case MapNode#r_map_node.f >= OldMapNode#r_map_node.f of
				true ->
					false;
				false ->
					update_open_list(MapNode),
					true
			end
	end.

%%构造一个新的路径点
new_map_node(TX, TY, CurNode, EndTX, EndTY) ->
	G = CurNode#r_map_node.g + 1,
	H = get_qi_wang_zhi(TX, TY, EndTX, EndTY),
	#r_map_node{key={TX, TY}, g = G, f = G + H, p_parent = CurNode#r_map_node.key}.

get_open_list() ->
	erlang:get(astar_open_list).

set_open_list(OpenList) ->
	erlang:put(astar_open_list, OpenList).

open_list_delete() ->
	erlang:erase(astar_open_list).

get_close_list() ->
	erlang:get(astar_close_list).

get_close_list({TX, TY}) ->
	lists:keyfind({TX, TY},#r_map_node.key, get_close_list()).

set_close_list(CloseList) ->
	erlang:put(astar_close_list, CloseList).

close_list_delete() ->
	erlang:erase(astar_close_list).


数学建模实战:因子分析、插值拟合与排队论的核心原理与应用 在数据分析与系统优化领域,掌握核心的数学建模工具是解决复杂工程问题的关键。因子分析作为一种经典的多元统计方法,其核心原理是通过探索变量间的内在结构,提取少数几个潜在的公共因子,从而实现数据的降维与归因,在心理学量表构建、经济指标分析等领域具有重要价值。插值拟合技术则致力于解决从有限观测点推测整体趋势或未知区域值的问题,其原理基于函数逼近理论,通过构建合适的数学模型来逼近数据,在空间数据分析、气象预测、信号处理等场景中不可或缺。排队论作为运筹学的重要分支,运用随机过程理论对服务系统中的等待队列进行建模与分析, 阅读详情

相关推荐

【产品体系】第六十五篇 Nacos / HiClaw / HiMarket 体系01

子系统核心现象主力数学工具​变更传播 fan-out / cache staleness图 fan-out 分析、概率上界 P(Tstale​)、logical-clock version monotonicityHigress 网关​突发限流、延迟堆积排队论 (M/G/1)、Token/Leaky Bucket ODE、Little's Law L=λWHiMarket 检索​语义匹配召回、去冗余。

weixin_49199313的博客 61

关于寻路算法的一些思考(3):A*算法的实现

概述 剥除代码,A* 算法非常简单。算法维护两个集合:OPEN 集和 CLOSED 集。OPEN 集包含待检测节点。初始状态,OPEN集仅包含一个元素:开始位置。CLOSED集包含已检测节点。初始状态,CLOSED集为空。从图形上来看,OPEN集是已访问区域的边界,CLOSED集是已访问区域的内部。每个节点还包含一个指向父节点的指针,以确定追踪关系。 算法有一个主循环,重复地从OPEN

liujiayu2的专栏 1084

【信息科学与工程学】【控制科学】第二篇 决策控制与决策科学01

多属性决策分析马尔可夫决策过程和行为决策理论。多属性决策分析:静态、多准则决策问题的结构化方法马尔可夫决策过程:动态、序贯决策的数学框架行为决策理论:描述实际决策行为的心理学基础每个表格都严格遵循要求的18个维度理论基础(定理/规律/数学特征)算法实现核心数学描述关键参数精度与误差分析边界条件影响因素计量方法多学科关联实现目标完整工作流程应用场景优点与局限瓶颈知识连接点决策控制知识体系的特点多层次:从描述性(行为理论)到规范性(MCDA、MDP)多学科。

weixin_49199313的博客 818

[转]Amit's Astar Page中译文

  如此好贴,不能不转!原文地址:http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht本文版权归原作者、译者所有,我只是转贴;如果侵害到您的权益,请联系我,我将删除本文。基本上,这文章可以说是最佳A*算法文档。极力推荐!Amits A star Page中译文 译序这篇文章很适合A*算法的初学者,

赖勇浩的编程私伙局 8659

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营05

编号应用领域角色/岗位类型场景算法算子名称算子的数学方程式/逻辑表达复杂度关联知识数据输入数据需求数据输出法律法规及裁决依据/道德标准及方法1241企业之间战略“认知战”指挥官(攻击方)不直接攻击产品, 而是通过系统性舆论、行业报告、KOL发声, 重塑市场对竞争对手核心优势的“认知”, 将其贬低为“过时技术”或“错误赛道”认知解构与赛道降级针对对手的核心优势A, 构建并传播叙事N: “A虽然是过去十年的主流, 但已被新兴的B范式取代。 坚守A是路径依赖, 将错失未来。”对手以“强大的线下渠道”(A)为核心优

weixin_49199313的博客 721

【信息科学与工程学】计算机科学与自动化——第三十九篇 编程语言模型

定义值格 L={⊥,c1​,c2​,...,⊤},其中 ⊥表示未知/未初始化,ci​为具体常数,⊤表示非常量/多重可能值。格序关系:⊥⊑ci​⊑⊤。

weixin_49199313的博客 427

自动寻路之 --AStar算法

如图所示,为了向大家介绍AStar自动寻路算法,我先用一个二维数组作为地图的数据建立了一个如图所示的地图 privateint[,] map0 = new int[,]{ { 0,0,0,0,0,0,0}, { 0,1,1,1,1,1,0}, { 0,1,2,0,1,1,0}, { 0,1,1,0,1,1,0}, ...

MOV的博客 1万+

【管理科学】第三十五篇 企业经营中的管理科学01 权力、风险、运营、物流、人力资源、库存、合同、品牌、业绩、项目

编号类型领域子领域/内容问题问题的数学分析(电磁/信息论/数学物理/数学化学/界面科学/表面科学 + 几何/拓扑/代数/集合论/图论/数论/函数评估/数值估计/概率/统计/向量/张量/矩阵/矢量 + 其他)算法逐步推理思考的数学表达式及实现步骤及时序流程 参数列表及参数的数值范围及数值分析及常量/常数1管理科学问题运营管理生产计划如何分配有限资源生产多种产品以最大化利润?线性代数、凸优化、单纯形法;向量与矩阵目标函数 max c^T x,约束 Ax ≤ b, x ≥ 0。步骤:①标准化引入松弛变量;②构建初

weixin_49199313的博客 247

A*算法

如此好贴,不能不转!原文地址:http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht 本文版权归原作者、译者所有,我只是转贴;如果侵害到您的权益,请联系我,我将删除本文。 基本上,这文章可以说是最佳A*

6449

【信息科学与工程学】【数据科学】第三篇 数学基础10 偏微分方程02——通信网络领域(2)

这些模型试图从信息论、量子物理、热力学、最优传输、微分几何、形式化方法等多个基础学科出发,为6G及未来网络的范式演进提供坚实的数学基础。:系统同时执行通信(速率R)、感知(估计误差协方差Σ)和计算(任务完成时间T)。: 如何将用户高层的、以自然语言或简单声明表达的“意图”自动、无误地转化为具体的、可执行的网络配置策略,并保证运行时始终满足意图。: 这表明,为了获得统计上不可区分的重建,编码必须引入与信号独立的“自然”噪声,而不是相关的量化噪声。,这通过预留资源(如5G NR的配置授权)和可靠传输实现。

weixin_49199313的博客 98

【信息科学与工程学】【解决方案体系】第三十篇 在线游戏及游戏云系统模型与方程式01

本表格旨在系统化地描述在线游戏及其云系统所涉及的各类数学模型、算法和定理。以下为前8个核心模型的详细示例,展示了从用户请求建模到资源规划的完整链条。编号规则为D(设计)、P(性能)、R(资源)、C(成本)、A(算法)。编号类别领域模型配方定理/算法/模型/方法名称定理/算法/模型/方法的逐步思考推理过程及每一个步骤的数学方程式和参数选择/参数优化精度/密度/误差/强度底层规律/理论定理典型应用场景和各类特征变量/常量/参数列表及说明数学特征。

weixin_49199313的博客 2294

erlang之A*寻路

1. search.erl %%%===================模块描述(开始)===================== %% %%%===================模块描述(结束)===================== -module(search). %%%=======================STATEMENT==================== -time...

qq_42973473的博客 511

【信息科学与工程学】【物理/化学和工程技术】第七十九篇 物理化学 系列一 基础知识-1

Step2 一维情况:d²ψ/dx² = -(ze/ε) (n₀ e^{-zeψ/kT} - n₀ e^{zeψ/kT}) = (2zen₀/ε) sinh(zeψ/kT);Step3 Metropolis选择:提议新构型s',接受概率acc = min(1, π(s')/π(s)) = min(1, e^{-β(E(s')-E(s))});

weixin_49199313的博客 480

探索Erlang的世界:erlang-algorithms项目深度剖析与推荐

探索Erlang的世界:erlang-algorithms项目深度剖析与推荐 项目介绍 在编程的浩瀚星空中,数据结构与算法是照亮开发者之路的明灯。今天,我们要向大家推荐一个专注于Erlang语言的宝藏项目——erlang-algorithms。这个项目致力于在Erlang生态系统内实现一系列常用的数据结构和算法,旨在成为所有寻求性能与效率的Erlang开发者的得力助手。 项目技术分析 erlang...

gitblog_00207的博客 1056

永久关闭Windows更新的5种方法

很多家用电脑,如果系统自动更新的话,会变得越来越卡顿,且硬件型号兼容也并不完美。那么我们该如何彻底关闭Win11的自动更新呢?以下准备了5种方法,您可以根据自身实际情况选择合适的方法!

qq_43652793的博客 1万+

(10)Proteus 8.9上的STM32仿真系列(HAL)---freertos

实验设计:通过cubemxide生成freertos工程,然后创建一个 pc13 led灯间隔200ms闪烁的任务。非常遗憾的是proteus8.9仿真失败,实物上没有问题,但还是把流程过一遍。 一、原理图 实物是淘宝上stm32f103 c8t6的核心板,proteus上没有这个芯片,这里图上大概表示一下,用的是核心板自带的pc13引脚的led灯。 二、cubemxide配置 1.RCC如之前工程一样配置 2、配置SYS timebase Source不要使用systick,自己选择一个定时器,我这

qq_35442550的博客 7344

导航图和导航网格

概述       导航图仍然是一个有用的替代导航网格的方法,而且根据游戏的环境可能会具有一定的优势 。本文讨论了导航图生成的几种方法:基于Delaunay三角网,以一个完全自动的方法,从通航区和双三角图形的三角派生 一个自动化。本文使用通用的计算几何算法和图像处理的启发算法。一个

关注云计算 5153

ESP32-S3 + TB6600驱动42步进电机:从基础接线到AccelStepper库平滑加减速实战

本文详细介绍了如何使用ESP32-S3开发板和TB6600驱动器控制42步进电机,从基础接线到利用AccelStepper库实现平滑加减速控制。内容涵盖硬件连接、基础驱动代码、AccelStepper库的安装与参数调优,以及高级技巧与故障排除,帮助创客实现工业级精准控制。

weixin_42632434的博客 284

电信网络容量规划:数学建模与MATLAB实战指南

数学建模是解决复杂工程优化问题的核心方法,它通过将现实问题抽象为数学模型,结合算法求解,为决策提供量化依据。在通信与网络领域,容量规划是典型的高维优化问题,涉及资源分配、成本控制和性能保障。排队论、线性规划和仿真等模型,能够将业务需求、网络拓扑和设备性能转化为可计算的约束与目标,从而在投资与服务质量间寻找最优平衡。本文聚焦电信网络这一具体应用场景,探讨如何利用MATLAB工具链,从数据清洗、模型构建到优化求解,实现精准的容量预测与扩容策略制定,为网络规划工程师提供一套可落地的数学建模实践框架。

weixin_33831673的博客 389

IBIS模型中的Pullup和Pulldown曲线详解:如何避免信号完整性设计中的常见错误

本文深入解析IBIS模型中Pullup和Pulldown曲线的关键作用,揭示其在信号完整性设计中的黄金法则。通过详细分析曲线特性、常见误区及验证方法,帮助工程师避免设计错误,优化高速PCB设计。文章还展示了曲线数据在动态终端匹配、串扰预测和电源完整性分析中的高级应用,提升设计效率和可靠性。

weixin_30275415的博客 451

异常数据处理——3σ原则、箱线图

异常数据处理——3σ原则、箱线图 用不包括异常值的剩余数据的均值替换、删除DataFrame中某列有异常值的整行等方法

杨老师的小跟班(*∩_∩*) 9033

【信息科学与工程学】【通信工程】第三百零五篇 网络中的几何/拓扑/离散数学/组合数学 01

矩 accountant 累计。Bluetooth LE广告包。单细胞RNA-seq计数矩阵。梯度AllReduce算法。蛋白质-蛋白质相互作用网络。联邦学习本地epoch数。资本资产定价模型beta。联邦学习客户端采样比例。联邦学习服务器聚合权重。变分量子本征求解器参数。抵押贷款支持证券现金流。数据加载器工作进程数。流水线并行微批次数量。学习感知图像块相似度。边缘设备CPU利用率。ZigBee网络地址。量子近似优化算法参数。宇宙微波背景温度涨落。

weixin_49199313的博客 246

ANSYS 12.1避坑全记录:当Win7+VMware14遇到FLEXlm报错时的自救指南

本文详细介绍了在Windows 7和VMware14环境下安装和运行ANSYS 12.1时遇到的FLEXlm报错问题及其解决方案。通过虚拟机技术隔离时间同步问题,提供从环境配置到许可证管理的完整指南,帮助用户稳定运行这一老旧版本的工程仿真软件。

tt34567的博客 644
上一篇: erlang进程占用内存过多的查找问题过程
下一篇: 用erlang打造系统级监控工具
pyf725324
博客等级 码龄17年 6粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值