☰
基于模糊综合评价法的变压器状态评估MATLAB仿真实战指南
2026/10/28 15:51:16 网站建设 项目流程

简介:面向电力变压器运行状态评估的Matlab课程设计资源包,采用模糊综合评价法构建评估模型,适用于电气工程、自动化等专业学生的课程设计、期末大作业或毕业设计参考,也适合需要快速上手模糊综合评价算法实践的初学者。资源共10个文件,压缩包大小264KB,包含6个m脚本(如fce.m、main.m、getReason.m等,覆盖数据处理、模糊综合评价计算、三比值法诊断绘图等功能)、1个fig交互界面、1个PDF论文参考、1个README说明文档及原始数据文本,整体结构清晰,便于对照修改。目前已有202人学习下载,项目曾获导师指导并通过,得到97分高分评价,下载后可直接运行无需额外调试。内容涵盖基于模糊综合评判的电力变压器状态评估模型、三比值法等核心方法,配备全部数据与完整源码,可帮助理解模糊理论在工程诊断中的应用流程,是快速完成相关课设任务的实用资料。

1. 模糊综合评价法做变压器状态评估:课程设计里最省力又最能讲清原理的仿真路线

拿到“基于模糊综合评价法对电力变压器运行状态评估的matlab仿真源码+全部数据”这个课程设计题目,很多人的第一反应是:这套方法是不是太老了,为什么不用深度学习?但等你真正面对变压器的运行状态数据时就会发现,故障样本少、标签不完整、专家经验又非常重要,深度学习在这里反而成了没法解释的黑匣子。模糊综合评价法恰好能把“经验”翻译成“权重”,把“测试值”翻译成“隶属度”,最终给出一台变压器属于正常、注意、异常还是严重状态的量化结论,而且每一步都能在MATLAB里用矩阵运算直观复现。这篇文章就按我从数据处理、代码实现到参数调优的完整路径来讲,适合做课程设计、毕业设计里电力设备状态评估方向的同学直接照着落地。

2. 模糊综合评价法的建模流程:从因素集到评语集,先把数学框架立住

2.1 为什么变压器状态评估适合用模糊综合评价而不是其他算法

变压器运行状态评估不是典型的分类问题。一台运行中的变压器,能拿到的是油中溶解气体、顶层油温、介质损耗、绝缘电阻、绕组直流电阻不平衡率等状态量。这些量有两个特点:第一,和故障之间不是严格的逻辑关系,而是“浓度偏高就更有理由怀疑”这种模糊关系;第二,真实故障样本极少,一台110kV变压器可能运行十年也不发生一次内部故障,你不可能收集几千条带故障标签的数据去训一个神经网络。

模糊综合评价法的核心优势就在这里:它不要求大量训练样本,不需要构造复杂的非线性映射,而是通过隶属度函数把“数值”转换成“属于某个状态等级的程度”,再通过权重把多个指标的判断合成一个综合结论。整个过程透明、可解释,答辩时老师问“为什么这台变压器判定为注意状态”,你可以直接把评价矩阵和权重矩阵摆出来,每一步都有据可查。相比之下,神经网络给出的结论很难追溯,SVM等经典方法也得靠大量调参,在只有几十条样本的课程设计数据上并不占优。

当然这个方法也有适用边界:如果数据量达到几百上千条、且故障类型标签齐全,那么随机森林或XGBoost这类模型会给出更细的故障分类结果。模糊综合评价更擅长的是“状态等级排序”和“趋势预警”,而不是精确定位故障类型,这一点在写课程设计结论时最好主动说明,免得答辩被问“为什么不直接用分类算法”。

2.2 评价指标体系与状态等级:先定U和V,再谈隶属度

模糊综合评价的第一步是把评价对象拆成因素集U和评语集V。对电力变压器运行状态评估,常见的做法是选六个代表性状态量构成因素集:

  • u1:油中溶解氢气浓度(μL/L),反映局部放电和油纸老化程度
  • u2:乙炔浓度(μL/L),反映电弧放电和过热性故障
  • u3:总烃浓度(μL/L),反映整体裂解程度
  • u4:顶层油温(℃),反映负荷和散热状态
  • u5:介质损耗因数tanδ(%),反映绝缘受潮和老化状况
  • u6:绕组直流电阻不平衡率(%),反映绕组接触不良或匝间问题

评语集一般设四个等级:V = {v1正常,v2注意,v3异常,v4严重}。四个等级对应设备维护策略也不同:正常可以按周期巡检,注意要缩短试验周期,异常需要安排停电诊断,严重则必须尽快退出运行。

等级划分的阈值来源,课程设计里最常用的是电力设备预防性试验规程里给出的注意值。实际处理时我一般不会只用一个固定阈值,而是把每个指标分成四个区间段,比如氢气浓度小于50视为正常、50到100视为注意、100到150视为异常、大于150视为严重。这里要特别提示一句:区间边界不是死的,不同电压等级、不同运行年限的变压器适用标准不同,拿到数据后应该先看数据的分布区间再定边界,而不是拿一套参数直接套所有样本。

2.3 模糊综合评价的五个步骤和算子选择

数学模型上,模糊综合评价有一套固定的流程,课程设计报告里需要把每个步骤对应的公式写清楚。

第一步,确定因素集U和评语集V,上面已经定义好。第二步,对每个指标ui,计算它对每个评语等级vj的隶属度,得到评价矩阵R,R是一个6行4列的矩阵,第i行第j列表示第i个指标隶属于第j个状态等级的程度。第三步,确定权重向量A,A是一个1行6列的向量,表示各指标在综合评价中的重要性。第四步,做模糊合成运算B = A ∘ R,得到综合隶属度向量B,B是1行4列。第五步,按最大隶属度原则或加权平均原则给出最终状态等级。

这里的“∘”是模糊合成算子。课程设计里最常见的是加权平均型算子,即B_j = Σ(a_i · r_ij),这个算子的特点是所有指标都参与评价,不会因为某一个指标特别突出就掩盖整体情况,适合变压器这种需要综合考虑多项状态量的场景。另一种常用的是主因素突出型算子,取乘积取最大,B_j = max(a_i · r_ij),适合“一票否决”的场景,比如乙炔浓度超标就直接判严重。在我的实际使用中,变压器状态评估应该用加权平均型,因为一台变压器往往先出现多指标轻微异常,而不是单一指标直接超标,加权平均更早发现隐患。

3. MATLAB仿真源码拆解:从隶属度函数到综合评价主程序

3.1 代码结构与数据文件组织方式

拿到这类课程设计源码包,第一步不是急着看代码,而是先建立文件整体认知。一般MATLAB工程会按功能拆成多个脚本和函数,我习惯的组织方式如下:

  • main.m:主程序,负责读数据、调用评价流程、输出结果
  • membership.m:隶属度函数实现,封装梯形隶属度计算
  • entropy_weight.m:熵权法计算指标权重
  • fuzzy_evaluate.m:综合评价核心逻辑,输入实测值和参数,输出评价矩阵和综合结论
  • data/:存放Excel或MAT格式的原始数据
  • figures/:存放输出图表

main.m是整个仿真的入口,顺序执行:清空环境、读入指标数据、定义评语集、计算隶属度矩阵R、计算或指定权重A、做模糊合成B、按最大隶属度原则判定状态、绘图输出。这个流程和你写课程设计报告的目录结构刚好一一对应,报告里每个章节都能在代码里找到落脚点。

3.2 隶属度函数实现:梯形隶属度是默认选择

隶属度函数的选择直接影响评价结果。最常见的做法是采用梯形隶属度函数,每个状态等级对应一个梯形区间。某个指标实测值落在“正常”区间中部时隶属度为1,逐渐过渡到相邻区间时隶属度线性下降。下面这个函数实现了单值对单等级的梯形隶属度计算:

function mu = trapmf_single(x, abcd) % TRAPMF_SINGLE 梯形隶属度函数 % 输入: % x - 实测值 % abcd - 1x4 向量,分别为梯形下底左端点、上底左端点、上底右端点、下底右端点 % 输出: % mu - 隶属度,范围 [0,1] a = abcd(1); b = abcd(2); c = abcd(3); d = abcd(4); if x <= a || x >= d mu = 0; elseif x >= b && x <= c mu = 1; elseif x > a && x < b mu = (x - a) / (b - a); else mu = (d - x) / (d - c); end end

逻辑说明:这个函数处理的是单个指标对单个等级区间的隶属度计算。当x落在a和b之间时,隶属度从0线性升到1;落在b和c之间时隶属度保持1;落在c和d之间时从1线性降到0;落在a左侧或d右侧则隶属度为0。a和d通常取相邻等级区间的交叉点,这样等级之间是平滑过渡的,不会出现“数值只差0.1,等级从正常跳成严重”的突变。

参数说明:a和b的间距决定了隶属度上升的斜率。间距越大,该等级的判定越“模糊”,模型对边界数据越宽容;间距越小,判定越尖锐。以氢气浓度为例,正常等级区间可以设abcd = [20, 0, 50, 80],表示浓度低于50完全属于正常,50到80是过渡带,超过80后完全不属于正常。这里b取0是因为氢气浓度不可能低于0,把上升段的起点放到了0处,保证浓度很低时隶属度为1。

3.3 主程序实现:评价矩阵、权重合成与状态判定

有了单值隶属度函数,接下来要把它扩展成整个评价矩阵的计算。对一个样本的6个指标,分别计算每个指标对4个等级的隶属度,组成6×4矩阵。下面这段代码演示了主程序的完整流程:

% 实测数据,依次对应氢气、乙炔、总烃、油温、tanδ、绕组不平衡率 X = [72.5; 2.8; 96.3; 68.0; 0.55; 2.1]; % 评语集名称 V = {'正常', '注意', '异常', '严重'}; % 每个指标在各等级上的梯形隶属度参数,行数=指标数,每行4个等级参数 params = zeros(6, 4, 4); % 氢气:正常[0 0 50 80],注意[30 50 80 120],异常[50 80 120 180],严重[80 120 180 250] params(1,1,:) = [0 0 50 80]; params(1,2,:) = [30 50 80 120]; params(1,3,:) = [50 80 120 180]; params(1,4,:) = [80 120 180 250]; % 其余指标按同样方式定义,此处省略 % 计算评价矩阵R R = zeros(6, 4); for i = 1:6 for j = 1:4 abcd = squeeze(params(i,j,:))'; R(i,j) = trapmf_single(X(i), abcd); end end % 权重向量A(可由熵权法得到,也可根据规程经验设定) A = [0.25 0.20 0.15 0.15 0.15 0.10]; % 模糊合成:加权平均型算子 B = A * R; % 1x4 综合隶属度向量 B = B / sum(B); % 归一化,便于横向比较 % 最大隶属度原则判定 [~, idx] = max(B); fprintf('综合隶属度分布:\n'); for j = 1:4 fprintf(' %s:%.4f\n', V{j}, B(j)); end fprintf('评估结论:该变压器当前状态为 —— %s\n', V{idx});

逻辑说明:外层循环遍历6个指标,内层循环遍历4个状态等级,逐个调用trapmf_single计算隶属度。这里params是一个三维数组,第一维是指标编号,第二维是状态等级,第三维是梯形四个转折点。注意到评价矩阵R的每一行是同一个指标对四个等级的隶属度,理想情况下这一行之和应该接近1,说明该指标的“状态归属”是完备的。

权重向量A在这里先用一组经验值做演示,实际课程设计建议用熵权法从数据里算出来,见3.4节。B = A * R这一步用的是普通矩阵乘法,它就是加权平均型算子。归一化B是因为模糊算子算出来的结果不一定恰好和为1,归一化后各等级隶属度可以解释成“百分比”形式,报告里更好表达。

3.4 熵权法确定权重:少一点主观,多一点数据支撑

答辩的时候老师常问“权重为什么这么定?”。如果权重全靠专家经验拍脑袋,解释起来很虚。常见做法是用熵权法从数据本身提取权重。熵权法的思想是:某个指标在样本间的差异越大,说明它携带的区分信息越多,权重就越高。

function w = entropy_weight(X) % ENTROPY_WEIGHT 熵权法计算指标权重 % 输入: % X - n个样本x m个指标的数据矩阵 % 输出: % w - 1 x m 权重向量,和为1 [n, m] = size(X); % 指标正向化处理:避免逆向指标影响熵值计算 X_forward = X; for j = 1:m if 判断为逆向指标 % 越小越优的指标,如气体浓度、不平衡率 X_forward(:,j) = max(X(:,j)) - X(:,j); end end % 归一化,消除量纲影响 X_norm = (X_forward - min(X_forward)) ./ (max(X_forward) - min(X_forward) + eps); % 计算每个样本占该指标总和的比重 P = X_norm ./ sum(X_norm, 1); % 计算信息熵,eps防止log(0) E = -sum(P .* log(P + eps), 1) / log(n); % 由熵值计算权重 w = (1 - E) ./ sum(1 - E); end

逻辑说明:函数首先生成随机样本矩阵X,然后对指标做正向化,也就是把“越小越优”的指标转成“越大越优”,否则熵权法会把数值小的样本误判为“差异小”。归一化把每个指标压缩到0到1区间,解决量纲问题。P是每个样本在该指标总和中所占的比例,E是信息熵,熵值越小说明该指标差异越大,权重w越大。

参数说明:函数里的eps是为了防止某些样本归一化后为0,导致log(0)得到无穷大,这个细节是新手最容易翻车的地方,不加eps,10个样本里有一个值等于最小值时整个计算结果就是NaN。另外,熵权法对数据量有下限要求,样本太少时算出来的权重不稳定,一般建议至少20条样本。如果课程设计数据只有十几条,那么权重用专家经验加熵权法的平均值更稳妥。

4. 全部数据怎么用:字段表、预处理与参数设定的一次性对照

4.1 数据文件里的字段与含义

课程设计配套的数据一般是一张或多张excel表格,每一行是一台变压器样本,每一列是一个状态量。拿到数据后,第一步是核对字段是否完整。常见的字段列表如下:

字段名单位说明评估方向
样本编号-变压器唯一标识-
氢气浓度μL/L油中溶解氢气含量越小越优
乙炔浓度μL/L油中乙炔含量越小越优
总烃浓度μL/L总烃含量越小越优
一氧化碳μL/L可用于辅助判断越小越优
顶层油温℃运行中变压器顶层油温越小越优
介质损耗tanδ%绝缘介质损耗角正切越小越优
绝缘电阻MΩ绕组绝缘电阻越大越优
吸收比-60秒与15秒绝缘电阻比越大越优
绕组直流电阻不平衡率%三相绕组直流电阻偏差越小越优
状态标签-可选,用于验证评价结果-

注意上表里既有越小越优指标,也有越大越优指标。做评价矩阵时,绝缘电阻和吸收比的隶属度函数要使用偏大型梯形,也就是数值越大,属于“正常”等级的隶属度越高。很多课程设计代码里直接对所有指标套同一个隶属度函数,这是最容易出错的坑,后面第5章会专门讲。

数据文件里如果有“状态标签”列,那是给验证用的,比如某台变压器实际发生过故障,标签标记为“严重”。你的评价结果应该与标签趋势大体一致,完全一致反而不正常,因为模糊综合评价本来就是多指标的综合判断,单指标与标签矛盾是合理的。

4.2 数据预处理:缺失值、异常值和去量纲

读入数据后,先执行以下三步预处理。

第一步是缺失值处理。如果某一列有几个空值,最常见做法是用该列的中位数填充,而不是均值。原因是指标数据往往偏态分布,个别极大值会把均值拉高,中位数更稳健。如果整列缺失超过30%,考虑直接删掉这个指标,勉强填充只会造出虚假规律。

第二步是异常值筛查。用箱线图或3σ原则找出离群样本,但不要直接删除,而是回到原始记录里核对。比如某台变压器氢气浓度500μL/L,别的样本都在100以下,这很可能是一个真实的告警样本,恰恰是评价模型最应该识别出的“严重”状态,删掉它反而让模型失去了区分能力。

第三步是量纲处理。模糊综合评价本身不依赖量纲,因为隶属度函数已经把所有输入映射到[0,1]区间,数据文件的原始量纲只需要在读入参数时用对即可。有些代码会在预处理时先把数据归一化,再用归一化后的值做隶属度计算,这种做法是错误的——归一化后的值和隶属度函数的abcd边界值对应不上,评价结果就会整体偏移。

4.3 参数设定的两个核心问题

运行mask仿真之前,有两个参数必须明确写在代码注释或报告里。第一个是各指标隶属度函数的abcd边界值,第二个是权重向量A。

关于边界值,前面已经给了氢气浓度的示例参数。电力规程里对变压器油中气体有推荐的注意值,比如氢气150μL/L、乙炔5μL/L、总烃150μL/L,这些数值可以直接作为“正常”和“注意”等级的边界参考。但规程注意值不是梯形端点值,隶属度函数里的abcd要比注意值更宽。比如乙炔浓度注意值是5μL/L,正常等级的梯形参数可以设abcd = [0 0 3 6],意思是低于3完全正常,3到6是过渡带,超过6开始属于注意等级。过渡带太窄会导致评价结果对噪声敏感,太宽则会让异常样本被“平滑”成正常,一般建议过渡带宽度取注意值的30%到50%。

另一个权重问题更实际。课程设计报告里权重公式可以不用太复杂,但要有一个明确的推导来源。经验权重适合体现“状态量对故障的敏感度”,比如氢气对局部放电敏感、乙炔对电弧放电敏感,这两种气体权重应偏高。熵权权重适合体现“本数据集里哪些指标区分度大”。我的建议是最终权重取二者加权平均,权重系数各占50%,然后在报告里写清楚这个组合方式。这样既有领域经验支撑,又有数据驱动证据,评审老师追问时两头都能解释。

5. 避坑专项:变压器模糊综合评价落地最容易翻车的5个位置

5.1 评价结果全是“正常”,永远评不出异常样本

现象:不管输入什么样的样本,哪怕是乙炔浓度已经超了标准好几倍,综合评价结论始终是“正常”或“注意”,模型完全没有区分度。

原因:最常见的原因是隶属度函数边界设得太宽。“正常”等级的梯形上底右端点c设得过大,比如氢气浓度c设成160μL/L,那所有氢气低于160的样本在“正常”等级上的隶属度都是1,其他等级的隶属度全部为0。评价矩阵R每一行都变成了[1 0 0 0],权重再怎么加权,综合向量B都是[1 0 0 0],结果自然是永远正常。

解决:先统计每个指标的实际分布范围,用分位数来定边界。比如氢气浓度数据25%分位数是30,75%分位数是85,那么“正常”等级的上限应该设在75%分位数附近,“注意”等级的中段设在90%分位数附近。我在实际调试时会先不跑完整评价,只打印每个指标的隶属度向量,看它是不是能把不同样本区分开,再决定要不要收窄边界。

5.2 矩阵维度对不上:程序报错却不知道错在哪

现象:运行到B = A * R时MATLAB报错“Matrix dimensions must agree”,检查代码觉得A是1行6列,R是6行4列,维度明明能乘。

原因:A确实写成了一维向量,但在定义时用了分号分隔元素,变成6行1列,也就是列向量。列向量和R矩阵做乘法,维度自然对不上。另一个常见原因是R的定义出了问题,比如用zeros(4,6)初始化却按6行4列填充,形状不对但循环没报错,最终乘法时报维度错误。

解决:在乘法之前加一行断言,不满足维度直接报出明确错误。平时调试时养成看size的习惯,size(A)和size(R)各打印一次。矩阵维度这类问题在模糊综合评价里出现频率极高,因为因素集数量和评语集数量往往不相等,一个是6一个是4,稍微马虎就会把行和列搞反。我在把脚本改成函数时都会显式传入维度参数,避免写死。

5.3 熵权法算出的权重和常识冲突

现象:经验上氢气浓度和乙炔浓度最重要,但熵权法算出来权重最高的反而是绕组直流电阻不平衡率,氢气权重几乎为0。

原因:熵权法吃的是“数据差异度”而不是“物理意义”。如果数据集里各样本的氢气浓度都差不多,比如都在30到40之间波动,而绕组不平衡率从0.5到5跨度很大,熵权法会认为氢气不携带区分信息,给出很低的权重。这在数学上没错,但在变压器状态评估里是反直觉的——氢气浓度哪怕整体不高,一旦超过阈值就是严重预警信号。

解决:不要直接使用纯熵权权重。我一般有两种处理:一是给熵权权重设定下限,比如所有指标权重不低于0.08,防止某些物理重要指标被压到0;二是用组合权重,也就是经验权重与熵权权重各取一半再归一化。组合权重既保留数据信息,又能把领域经验压进去。课程设计报告里建议把三类权重都列出来,再说明为什么最后选组合权重,这是一个加分点。

5.4 归一化和不归一化,结论竟然不同

现象:两组代码用了同样的数据和权重,一组在模糊合成前把R的每一行做了归一化,另一组没做,最后评价结论一个判“正常”,一个判“异常”。

原因:R矩阵的每一行是某个指标对四个等级的隶属度。理论上,如果四个等级的隶属度函数把整个数值区间完全覆盖了,这一行之和应该约等于1,归一化前和归一化后差别不大。但实际写参数时,四个等级的abcd区间往往没有完全覆盖整个数域,比如氢气浓度超过250μL/L后,四个等级的隶属度全都是0,这一行的和是0,归一化就会出问题。

解决:统一规则——隶属度矩阵R不按行归一化,只在模糊合成之后对B向量做归一化。R的原始值代表“绝对的隶属程度”,B归一化是为了把综合隶属度向量解释成百分比。这个规则确定下来后,整个代码只在一处做归一化,不会两边互相冲突。如果你发现某个样本的R有一整行全为0,这说明该指标数值超出了所有等级区间的覆盖范围,要么是数据的极端异常,要么是隶属度函数边界没有设够,需要回头补一个“严重”等级的右端点。

5.5 最大隶属度原则失效:两个等级隶属度接近时判级不稳

现象:某样本综合隶属度向量B = [0.43 0.40 0.11 0.06],按最大隶属度原则判定为“正常”,但“注意”等级也有0.40,两者只差0.03。换一组相近数据后,结论又变成“注意”,模型非常不稳定。

原因:最大隶属度原则只关注最大值,忽略了第二大的信息。当两个隶属度接近,说明该样本正处在等级边界附近,模型给不出清晰结论。变压器状态评估里,大量数据恰恰分布在“正常”和“注意”的边界,因为那些状态非常极端的数据不需要模型也能判别。

解决:引入置信度指标。定义置信度c = (B_max - B_second) / B_max,当c大于0.2时直接采用最大隶属度原则;当c小于0.2时,改用加权平均原则,给四个等级赋分C = [90, 70, 50, 30],用综合评分S = B * C',再按S落在哪个分数区间来判定等级。这种做法相当于给模型加了一层“犹豫判定”的缓冲,会在课程设计报告的“改进措施”里成为一个亮点。

6. 进阶与验证:用敏感性分析和注入样本验证你的仿真结论

模型跑通只是第一步,让课程设计的结论站得住脚是另一回事。我习惯做两类验证:第一类是敏感性分析,把权重向量A的每个分量在±20%范围内扰动,看评价结论是否稳定。如果某个样本本来判“注意”,权重扰动后变成“异常”,说明该样本本身就处在状态边界,不是模型错误,而是物理上确实模糊;如果权重大幅扰动下结论始终不变,说明评价结果可靠。这个扰动实验用循环几十行代码就能跑完,把每次的判定结果记录成表格,放进报告里非常有说服力。

第二类是注入样本验证。选一条状态为“正常”的样本,手动把乙炔浓度从2μL/L改到15μL/L,其余指标不变,重新运行评价函数,结论应该从“正常”迁移到“异常”或“严重”。这验证的不是模型拟合能力,而是模型对单一指标严重劣化的响应是否合理。反过来,把一台“严重”样本的氢气浓度改成正常值,再看结论是否降级,这里要注意结论不一定降级——因为严重判定可能是由多个指标共同支撑的,单项好转不足以改变状态,这和变压器的真实运维逻辑是一致的。

画图呈现时,除了综合隶属度柱状图,我建议加一个雷达图,把6个指标在“正常”等级上的隶属度画在同一张图上。雷达图能直观看出样本在哪几个指标上偏离最大,答辩时讲起来非常省力。报告里结论部分写清楚“状态等级、主要扣分指标、建议运维策略”三行话。

最后说一个我自己调这套仿真的血泪经验:代码本身不难,难的是数据分布和隶属度边界不对齐。我第一次跑通全部流程后,把一台明显异常的样本评成了正常,折腾了两个晚上才发现是“正常”等级的梯形上底设太宽,问题根本不在权重。后来养成了先打印指标分布再定参数的习惯,就再没翻过车。你拿到这套源码和全部数据后,最先要动的也应该是数据统计和边界参数,而不是急着改模型,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询