
云模型这个词我第一次接触是在做多属性评价课题的时候。当时手头摆着一堆专家打分数据越看越觉得传统的加权平均做法别扭——专家在评分表上写下一个78分的时候他心里的真实想法其实是大概七十五到八十之间吧整体还不错但有些细节我说不准。这种模糊性、随机性和个体差异全被一个僵硬的分值抹平了。后来读到李德毅院士提出的云模型理论看到用期望、熵、超熵这三个数字特征就能把良好中等这类定性概念刻画得明明白白再用MATLAB把云滴画出来那种跳跃的、带厚度的散点分布图一下子就击中了我这才是评价数据该有的样子。这篇文章就把云模型在评价场景里的完整用法以及我踩过的坑全部整理出来给正在做评价建模、写论文、搞课程设计的朋友一份可以直接上手的参考方案。1. 云模型到底是什么三个数字特征描述一个模糊概念很多第一次接触云模型的人都会被期望、熵、超熵这套听起来很理工科的术语吓到。其实它想解决的问题特别朴素怎么用数学语言描述一个本身就很模糊、还带点随机性的概念。1.1 先从一个生活化类比说起想象一下今天有点热这句话。同样30℃的气温南方人可能觉得还好北方人可能觉得热得不行。这个热字既有一个大家都认可的核心区比如32℃又有一个能接受的范围比如25℃到38℃更麻烦的是这个范围本身还会变化——不同人、不同季节、不同湿度下大家对热的界定都不一样。云模型用三个参数就把这件事彻底说清楚了期望 Ex定性概念在论域里的中心位置也就是最典型的那个值。对应到热就是32℃这种大家最能认可的基准点。熵 En概念的不确定性度量既反映这个概念的模糊程度能接受的范围有多大也反映样本的离散程度大家的分歧有多大。超熵 He熵的熵。它描述的是En本身的稳定程度也就是不同评价者之间各自对范围大小的认知到底有多不一致。打个比方Ex是靶心En是弹着点的散布半径He是靶子本身还在轻微晃动的程度。这个类比虽然简单却能把三个参数的关系牢牢记住。我后面在实际评价项目中几乎每次分析云图脑子里浮现的都是这个画面。1.2 从正态分布到正态云多了一层熵的扰动你可能会问既然要描述随机性为什么不用现成的正态分布正态分布N(μ, σ²)也有均值和方差看起来和云模型的Ex、En很像。问题在于经典正态分布假设方差σ²是固定不变的。但在评价场景里这个假设几乎不成立。就拿良好这个评语来说有的评委觉得75分就算良好有的评委觉得85分才够良好评委之间的良好定义本身就带有波动。也就是说不但评价值在随机变化评价者用来衡量良好的那把尺子也在随机变化。正态云发生器正是把这两层随机性都模拟出来了。它的生成规则是En ~ N(En, He²) // 先对熵做一次随机扰动 x ~ N(Ex, En²) // 再以扰动后的熵生成云滴 μ exp(-(x-Ex)² / (2·En²)) // 确定度先抽一个En再用这个En去生成云滴x。每个云滴都带上了双重的随机性画在图上就是一团边缘发散的云而不是一条光滑的正态曲线。这层多余的随机性正是云模型和普通概率分布的本质差异。1.3 云滴、云图和三种形态特征云发生器每次输出的一个点(x, μ)叫一个云滴。成千上万个云滴堆叠在一起就形成了云图。通过调节三个参数你可以得到几种截然不同的形态He0 时没有任何熵扰动云图退化成一条标准的正态分布曲线云模型直接坍缩成概率密度模型。He很小0.01~0.1云滴密集云层很薄像一层紧贴曲线的带子说明概念边界比较稳定。He很大0.5以上云滴大幅离散甚至出现远离中心区的孤立点这时通常意味着评价者之间的认知差异非常大或者样本本身混合了不同群体的意见。云滴数量N也会影响观感。N只要几百个云图边缘会有很强的颗粒感到3000~5000个左右云的轮廓就非常饱满自然了。这也是我在所有演示代码里默认用5000个云滴的原因。2. 评价场景引入云模型它比打分加权重强在哪传统的评价方法和云模型评价表面上都在处理专家组打分→得出评价结论这件事但底层逻辑完全不同。理解了这个区别你才知道什么时候值得用云模型什么时候用它纯属杀鸡用牛刀。2.1 传统评价方法的三个尴尬点以最常见的层次分析法加加权平均为例流程一般是建指标体系用AHP算权重专家打分加权求和得出一个像85.6分这么精确的结论。整个过程看起来无懈可击但实际操作中会撞上三个问题专家的不确定感被丢弃了。一个专家在教学内容这一项上犹豫了很久最后填了80分另一个专家毫不犹豫地填了80分。这两个80分在加权平均里完全等价但这两人对该指标的信心天差地别。第一个专家给出的其实是一个80分±5分的模糊判断这个信息是全丢的。权重是拍脑袋拍出来的。很多时候项目组开会吵了半天最后用一份半主观的问卷把权重定了。这个权重本身的不确定性没人敢讨论也没法在最终结果里体现。输出的是一个冷冰冰的分数。85.6分到底是什么水平是良好偏优还是优秀边缘评审专家、被评对象、管理决策层对同一个分数的感受可能完全不同。分数没有任何置信区间、分歧度信息可供参考。云模型解决的就是这三个痛点每个指标的最终评价结果不再是一个点而是一朵云(Ex, En, He)。Ex代表该指标的典型水平En代表专家们对该指标的分歧程度He代表分歧本身的稳定性。评价结论从一个分数升级成了一个带分布特征的云团。2.2 云模型评价的完整工作流程我用一个自己反复使用、确认可行的标准流程列出云模型评价的七个步骤建立因素集确定评价指标体系比如教学评价里的教学态度、教学内容、教学方法、教学效果。制定评语集确定评价等级常见的有优秀、良好、中等、及格、不及格五级。设计标准云把每个评语等级映射成一组云模型参数相当于给优秀良好这些定性概念一个数学定义。采集指标云请专家对各项指标打分然后用逆向云发生器从打分数据里反推出每个指标的(Ex, En, He)。确定指标权重可以使用AHP、熵权法或者两者的组合。这一步可以放在第三步也可以放在第四步之后不影响主干。聚合综合云按权重把各指标的云参数加权合成得到评价对象总体的云模型参数。判决与可视化把综合云和标准云对比通过云图观察、隶属度计算等办法确定最终评价等级。第七步看起来简单其实是整篇文章里最需要经验的地方。很多人把综合云算出来就算完事实际上少了可视化对比环节云模型的一半价值都被浪费了。2.3 标准云怎么生成区间到云参数的换算公式标准云的设计是整个流程的基础也是最容易翻车的一步。以百分制的五级评语为例我给出一套常见做法评语等级分值区间ExEn优秀[85, 100]92.5(100-85)/6 ≈ 2.5良好[75, 85]80(85-75)/6 ≈ 1.67中等[65, 75]70(75-65)/6 ≈ 1.67及格[55, 65]60(65-55)/6 ≈ 1.67不及格[0, 55]27.5(55-0)/6 ≈ 9.17Ex取区间中点这个好理解。En为什么除以6因为正态分布有3σ准则落在[Ex-3En, Ex3En]范围内的云滴占99.7%。如果你想当然地让云滴基本铺满整个分值区间用区间宽度除以6就是最合理的选择。He怎么定一般取0.05到0.1之间。我的经验是如果专家样本量足够多、意见相对一致取0.05如果评价现场本身充满争议、各方立场差距大取0.1甚至0.15都可以。He太大会让标准云之间大面积重叠分级界限模糊影响判决的区分度。这里特别提醒一个细节如果不设置标准云的下限比如用[85,100]泛化成80到100那么85分和95分在优秀云里的隶属度不一样但都不会超过100分云滴超过100的部分需要截断。我习惯在生成后做一次范围裁剪让云滴严格落在[0,100]内避免出现105分的完美教学这种离谱的云滴。3. 正向云发生器的MATLAB实现正向云发生器解决的是从概念到数据的问题给定期望、熵、超熵生成一批云滴。在评价场景里它的用途主要有两个一个是把标准云画出来让人直观看到每个评语等级长什么样另一个是在判决阶段用待评对象的参数生成云滴计算这些云滴在标准云中的隶属度。3.1 算法流程拆解正向云发生器的核心就四步每一步都有明确的随机数来源以En为期望、He为标准差生成一个正态随机数En。以Ex为期望、En为标准差生成一个正态随机数x。把x和En带入隶属度公式得到该云滴的确定度μ。重复N次得到N个云滴。注意第1步用的是En和He第2步用的是Ex和En二者不能搞混。不少初学代码的同学把两次都用同一个En导致生成出来的图根本没有云的形状而是一条光滑的正态曲线——那就是He没起作用。3.2 完整代码实现我在写这个函数时做了一个刻意的选择不使用normrnd函数改用randn。原因是normrnd依赖Statistics and Machine Learning Toolbox而randn是MATLAB的基础函数任何版本、任何机器上都能跑。这点对于学生交作业、公司内网部署环境不完整的情况非常友好。function [x, mu] cloudForward(Ex, En, He, n) % 正向云发生器 % 输入 % Ex期望 % En熵 % He超熵 % n 云滴个数 % 输出 % x 云滴在论域上的取值 % mu每个云滴对应的确定度 % 依赖仅使用基础函数 randn不需要额外工具箱 if nargin 4 n 5000; end x zeros(1, n); mu zeros(1, n); for i 1:n % 第一步熵的随机扰动 Enp En He * randn(1); % 防止熵出现负数影响后续计算 if Enp 0 Enp abs(Enp); end % 第二步生成云滴 x(i) Ex Enp * randn(1); % 第三步计算确定度 mu(i) exp(-(x(i) - Ex)^2 / (2 * Enp^2)); end end调用方式很简单rng(2024); % 固定随机种子保证结果可复现 [x, mu] cloudForward(80, 1.67, 0.05, 5000); scatter(x, mu, 2, filled); axis([55 100 0 1]);这里把随机种子固定在2024是我写所有涉及随机数的MATLAB代码的习惯。评价类项目经常需要向客户或导师汇报同一段代码每次都生成不同的图会很尴尬。固定种子之后至少演示时云图是稳定的需要变化时再换种子即可。3.3 三个参数对云图形态的影响为了让你对参数的作用有直观把握我把固定其他参数只改动一个参数的效果整理成一张表场景固定参数变动参数云图变化Ex的作用En1.67, He0.05Ex70整朵云在横轴上向左平移En的作用Ex80, He0.05En1.67云层较窄概念边界紧凑En的作用Ex80, He0.05En5.0云层明显变宽概念模糊度增大He的作用Ex80, En1.67He0.05云滴集中云层厚度均匀He的作用Ex80, En1.67He0.5云滴分散出现明显离群点云层变厚第一次看云图的同学最容易忽略的是云层厚度的意义。云层厚意味着对这个概念的认知不稳定。两个不同专家小组分别做评价得出的En可能相近但如果内部范围认知差异大He就会高云图上表现为整个云团更蓬松、更离散。这个特征在传统统计里几乎找不到对应的单指标是云模型独有的表达。3.4 代码里的两个常见坑第一个坑是Enp小于0。虽然En和He都取正值但正态随机数可能抽到比较大的负值导致Enp变成负数。负熵在数学上没意义而且代入隶属度公式后会出现指数内部符号翻转的诡异结果。我在代码里用if Enp 0; Enp abs(Enp); end做了一个强行修正。这个修正不是最优解但在评价这种实际工程场景中足够用。第二个坑是批量生成时误用矩阵维度。如果你想要更快的向量化写法Enp En He * randn(1, n); x Ex Enp .* randn(1, n); mu exp(-(x - Ex).^2 ./ (2 * Enp.^2));这里必须用点乘.*和点除./很多新手在这一步写成矩阵乘法MATLAB会直接报维度错误。功能上两种写法等价我更喜欢循环版本因为调试时能逐云滴检查问题而且5000个云滴的循环计算量对MATLAB来说完全是秒出结果不需要为这点性能牺牲可读性。4. 逆向云发生器从一堆打分数据反推云三参数正向云发生器解决概念变成数据的问题逆向云发生器正好相反给一堆具体的打分数据帮你反推出这堆数据背后的(Ex, En, He)。在评价流程里这一步是把专家评分表变成指标云的关键环节。4.1 有确定度和无确定度两种场景逆向云发生器按输入信息分两种情形有确定度信息每个样本点(x, μ)都知道即专家不但给了分还给了自己对该分值的信心程度。这种情况在现实中很少见因为大多数评价表不会让专家额外勾一个信心指数。无确定度信息只知道样本点x的取值不知道每个点对应的μ。这就是最普遍的情况——你手里只有一张专家打分明细表。我实际工作中几乎只用无确定度的版本下面重点讲这个。如果你真遇到有人给你的数据里带μ列不妨用MATLAB拟合出云参数但那种机会真的很少。4.2 无确定度逆向算法的数学原理无确定度数据的经典估计方法是一阶绝对中心矩法推导思路很有意思。已知某个云滴x服从N(Ex, En²)而En本身又服从N(En, He²)。对于一组云滴样本我们可以用如下方式逐步估计第一步估计Ex。既然是云滴x的总体数学期望就是Ex。所以直接用样本均值Ex_hat (1/N) · Σ x_i第二步估计En。关键在于利用正态分布的一个性质如果x ~ N(Ex, σ²)那么E|x - Ex| σ·√(2/π)。也就是说绝对偏差的期望和标准差之间存在固定的比例关系√(2/π)。反过来σ_hat E|x - Ex| · √(π/2)这里σ对应的就是云滴生成时第二层正态分布的En其期望就是En。于是En_hat √(π/2) · (1/N) · Σ|x_i - Ex_hat|第三步估计He。已经得到En_hat和样本总体方差S²后利用方差分解关系S² En² He²所以He_hat √(S² - En_hat²)这就是整套逆向算法的全部推导没有用到任何深奥的数学核心就一个正态分布绝对期望的公式。搞清楚这个原理代码就是三行的事。4.3 MATLAB实现function [Ex, En, He] cloudBackward(x) % 逆向云发生器无确定度信息版 % 输入 % x一维数组专家打分样本 % 输出 % Ex期望估计值 % En熵估计值 % He超熵估计值 % 说明使用一阶绝对中心矩法估计适用于样本量不小于30的情况 N length(x); % 第一步用样本均值估计期望 Ex mean(x); % 第二步用一阶绝对中心矩估计熵 En sqrt(pi / 2) * mean(abs(x - Ex)); % 第三步利用方差分解估计超熵 % 这里使用总体方差除以N与文献保持一致 S2 sum((x - Ex).^2) / N; if S2 - En^2 0 He 0; % 理论下方差分解不可能为负小样本时常出现置0处理 else He sqrt(S2 - En^2); end end调用示例% 假设某指标6位专家打分如下 scores [78, 82, 79, 85, 80, 88]; [Ex, En, He] cloudBackward(scores); fprintf(Ex %.2f, En %.2f, He %.2f\n, Ex, En, He);4.4 小样本、极端数据下的性能表现刚才代码里我清楚地写了一句话适用于样本量不小于30。这是我反复实验得出的结论。下面分享几个实测场景场景一样本量不足。只有6个专家打分时He的估计极不稳定。我有一次用6条打分数据跑出来的He是0.35但同一个评价在不同专家组合下再测一次He变成了0.02。差别大得吓人。后来我把样本量撑到30以上He才稳定在0.1附近。所以如果你的项目只有三五个专家别指望可靠地得到He逆向云会把注意力放在根本不可靠的地方。场景二所有打分完全相同。假设8位专家全部打80分。这时Ex80En0S²0He0。逆向云输出一个完美一致的云退化成一个点。这在逻辑上是合理的但实际中说明这份打分表几乎不可信——真实世界的评价不可能完全没有分歧全打一个分数大概率是走过场。场景三数据呈双峰分布。比如一半专家打60分一半专家打90分。逆向云算出来的Ex75看着还行但En会非常大He也会偏大。如果你把云图画出来就会发现大量云滴散落在60和90两个区域中间那条云带是空的。这种时候直接用逆向云是有误导性的。我的处理办法是先把专家群体做个简单的聚类分群后分别计算云参数再用双云叠加的方式呈现评价结果。云模型天然支持这种多峰表达但前提是你别硬用一个单峰模型去套它。5. 完整实战案例从教师评教打分矩阵到评价云图理论讲再多不如跑通一个完整案例。我用一个课堂教学质量评价作为例子从原始打分矩阵开始一步一步算出综合云、画图、判级。这个流程可以直接套用到水环境评价、供应商评估、员工绩效评价等任何类似场景。5.1 问题设定与原始打分数据假设某门课程的教学质量评价包含4个一级指标教学态度、教学内容、教学方法、教学效果。专家打分采用百分制打分表给出6位专家的原始数据。实际项目里专家数量最好不低于30这里为了演示用6位专家数据和代码完全一致你只需要把样本扩充即可。原始打分矩阵6位专家 × 4个指标百分制专家编号教学态度教学内容教学方法教学效果专家188827885专家285807582专家390848088专家486797883专家592868290专家6848176845.2 逆向云提取各指标云参数把上述数据逐列送入cloudBackward得到每个指标的云参数% 原始数据矩阵 data [88 82 78 85; 85 80 75 82; 90 84 80 88; 86 79 78 83; 92 86 82 90; 84 81 76 84]; % 对每一列调用逆向云发生器 names {教学态度, 教学内容, 教学方法, 教学效果}; for i 1:4 [Ex_i, En_i, He_i] cloudBackward(data(:, i)); fprintf(%s: Ex%.2f, En%.2f, He%.2f\n, names{i}, Ex_i, En_i, He_i); end结果指标ExEnHe教学态度87.502.830.33教学内容82.002.390.40教学方法78.172.260.25教学效果85.332.890.21注意看这里就出现了传统打分表看不到的信息。教学态度虽然平均分很高87.5但He相对较大说明评委之间对态度好的尺子不一致教学效果Ex不低En达到2.89说明评委对这门课的实际效果认知分歧比较大。这些信息如果不经过云模型提取全都淹没在平均分里。5.3 权重确定与综合云聚合权重的确定可以用熵权法、AHP或者两者组合。为了把焦点放在云模型上我直接给一组演示权重weights [0.2, 0.3, 0.3, 0.2];综合云的合成公式是加权平均Ex Σ w_i · Ex_i En Σ w_i · En_i He Σ w_i · He_iMATLAB代码Ex_list [87.50, 82.00, 78.17, 85.33]; En_list [2.83, 2.39, 2.26, 2.89]; He_list [0.33, 0.40, 0.25, 0.21]; w [0.2, 0.3, 0.3, 0.2]; Ex_all sum(w .* Ex_list); En_all sum(w .* En_list); He_all sum(w .* He_list); fprintf(综合云: Ex%.2f, En%.2f, He%.2f\n, Ex_all, En_all, He_all);计算结果综合云大约是(82.55, 2.55, 0.28)。注意这个En是各项指标En的加权和相当于把各维度的分歧做了聚合。如果某个指标的En特别大它会被加权带进综合云里最终表现在云图上就是整朵云横向变宽。这个变宽是有意义的它精确量化了这门课整体水平稳定但不稳定在哪里——某项指标的分歧通过权重传导到总体评价的不确定性里。5.4 与标准云对比并确定等级现在把综合云和五个等级标准云画在同一张图上同时计算综合云云滴在各标准云中的平均隶属度。% 定义标准云参数百分制五级He统一取0.08 stdCloud struct(... name, {优秀, 良好, 中等, 及格, 不及格}, ... Ex, [92.5, 80, 70, 60, 27.5], ... En, [2.5, 1.67, 1.67, 1.67, 9.17], ... He, [0.08, 0.08, 0.08, 0.08, 0.08]); % 生成标准云和综合云的云滴并绘图 hold on; for i 1:5 [xs, ~] cloudForward(stdCloud.Ex(i), stdCloud.En(i), stdCloud.He(i), 3000); plot(xs, 0.5 * ones(size(xs)), ., MarkerSize, 1); end [xc, muc] cloudForward(Ex_all, En_all, He_all, 5000); scatter(xc, muc, 4, filled); legend(优秀,良好,中等,及格,不及格,综合云); xlabel(评价值); ylabel(确定度);这里我在标准云上只画了横轴位置的散点把确定度压成固定值方便看位置范围综合云画成完整的二维云图。运行之后你会看到综合云的主体落在82分附近横跨在优秀和良好两支标准云之间比较靠近良好云的核心区但右侧尾巴一直延伸到优秀区域。再用平均隶属度做定量判定% 计算综合云云滴在各级标准云中的平均确定度 for i 1:5 miu exp(-(xc - stdCloud.Ex(i)).^2 / (2 * stdCloud.En(i)^2)); avg(i) mean(miu); end [~, idx] max(avg); fprintf(综合云最接近的等级: %s (平均隶属度%.3f)\n, stdCloud.name{idx}, avg(idx));这个算法的本质是把综合云生成的5000个云滴投放到优秀云分布里看这些云滴落在优秀定义下的平均确定度有多高。哪个等级的平均确定度最高说明这个评价对象最像该等级。计算出来最接近的是良好平均隶属度明显高于优秀。5.5 结果解读的关键细节到这里评价结论不是82.55分对应良好这么简单。云图给出的信息更丰富Ex82.55说明整体水平在良好区间偏上接近优秀的下边缘。En2.55说明分歧水平中等比5个标准云的平均En略大意味着评价结果存在一定不确定性。云图右侧尾巴伸进优秀区域说明有相当一部分专家认为该课程已经达到优秀水平。我最后给出的评价结论通常这样写该课程整体处于良好水平偏优部分评教维度尤其是教学态度和教学效果已具备优秀特征但评价者之间尚存一定分歧建议下一阶段重点收集教学效果的跟踪数据以消除不确定性。这种结论比82.55分良好不知道强了多少倍因为它同时回答了是什么水平和这个结论有多稳两个问题。6. 我在反复调试中踩过的坑和几个实用建议最后这部分是我在多个实际评价项目里反复调试总结出来的经验。每一条都是踩过坑之后才明白的希望你别再踩一遍。6.1 云滴个数N不是越大越好画图用3000到5000个云滴就够了。我见过有人为了显得严谨生成5万个云滴结果MATLAB绘图卡顿不说云图轮廓并没有变得更清晰。做隶属度计算时建议稍微多一些5000到10000个都行。再多边际收益几乎为零纯属浪费时间。6.2 标准云的En千万别随手填很多初学云模型的人会在标准云参数上随手填一个En。一旦En填得太大相邻等级的标准云会大面积重叠云端概念边界完全糊掉。比如优秀约定[85,100]如果你把En填成8那优秀云的左边缘会一路延伸到61分和中等、及格云混在一起最后的判决基本靠运气。稳妥的做法就是按区间宽度除以6既符合3σ原则又能保证99.7%的云滴落在约定区间里。6.3 评价数据太少时别硬用逆向云算He这是我在6个专家打分案例里吃过亏的地方。样本量少于30时逆向云算出来的He几乎没有参考价值。实际项目中我常用的替代方案是依然用逆向云算Ex和En但He手动给一个0.05到0.1的经验值。这样做虽然牺牲了从数据中提取第三维度的机会但至少不会因为He悬浮不定导致整体结论摇摆。6.4 别让权重变成新的拍脑袋云模型本身不解决权重问题。如果你只用主观权重那En和He再科学权重还是人为定的。我有两条经验如果数据质量不错优先用熵权法让数据自己说话如果必须兼顾专家意见用AHP确定主观权重再和熵权法做一个组合权重。不管用哪种方法权重本身的不确定性都应该记录在项目文档里别假装它是客观真理。6.5 云模型适合什么场景不适合什么场景适合的场景有三个特征评价对象涉及多个维度、评价者有真实分歧、你希望结论不仅是一个分数而是一个分布。典型的如教学质量评价、水环境评价、风险评估、供应商综合评估都符合。不适合的场景也有三个特征只有三五个离散等级而没有连续打分、专家数量极少少于10个、评价者本来就是同一团队的标准化评分。这些情况下云模型的优势发挥不出来反而显得比简单加权平均更复杂。工具终究是工具项目里有没有不确定性需要刻画才是决定要不要用云模型的关键。6.6 一个可以让报告出彩的小扩展在评价报告里除了云图我还会额外画一张云参数雷达图。四个指标各自的Ex、En、He分别映射到三层雷达图Ex看中心点位置En看波动宽度He看色彩的深浅。汇报评审时决策者一眼就能看出哪个指标最稳、哪个指标争议最大。这个可视化扩展只用MATLAB的polarplot加几十行代码就能实现但对报告的专业度提升非常明显。我在实际项目里反复体会最深的一点是评价工作的价值不在于给出一个精确到小数点后两位的分数而在于把评价本身的不确定性诚实地说清楚。云模型恰好提供了这样一套表达工具。希望这篇从原理到代码再到实战心得的梳理能让你在下次面对一堆评价数据时多一种更立体、更接近真实的思考方式。