代理模型优化算法

2023-05-16

已剪辑自: https://zhuanlan.zhihu.com/p/99609634

微信公号:Mat物语科研数据分析

☆阅读本文最好需要提前了解(一点点)的一些知识点(不懂也可以阅读)

(1)插值法:利用函数f (x)在某区间中插入若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。

(2)神经网络:一种万能逼近模型。当代人工智能、深度学习的核心。这个概念没接触过的同学一两句话肯定解释不清楚。

(3)克里金模型:最早于地质统计学领域被提出,一种实用空间估计技术,也属于插值法的一种。

(4)响应面模型:采用多元回归方程来拟合因素与响应值之间的函数关系,通过对回归方程的分析来寻求最优工艺参数。

(5)径向基函数:一种将试验点与未知点之间的欧氏距离作为径向函数的输入。通过借用欧氏距离作为中转机制,将多维问题转换成一维问题,从而降低了模型的复杂度。满足这些条件的函数都可以看为径向基函数,所以径向基函数有很多种。

在试验中试图构建数学模型时,有时会遇到以下情况:

1、存在实际的数学模型,但我们并不知道其具体的、显式的表达式(类别),无法参数化表达式。手上只获得了一些数据,且数据的获得成本很高。这种普遍存在的现象称之为“黑箱”。打个比方,设计汽车并测试碰撞安全,设计参数(车速、框架结构、刹车等)和碰撞程度间存在的准确数学模型未知。如何获得更多数据?只要用这些参数造一辆汽车再往墙上一撞就欧啦。好家伙,获得一组数据需要报废一辆车。这就叫数据获得成本高。

2、已知实际的数学模型类型,但其非常复杂,因此在变量具有较高维度时,计算速度十分缓慢(即使是用计算机来计算)。这也叫数据获得成本高(时间成本)。

代理优化,或者叫代理模型,指在分析和优化设计过程中可替代那些复杂而费时的模型的近似学习模型。最早,代理模型的雏形是多项式响应面模型(用的人很多,其实往往你已经在采用代理模型的思维方式,只是你自己没有意识到)。随着技术的发展,代理模型不再仅仅是简单的替代,而是构成了一种基于历史数据来驱动样本点加入,以逼近全局最优解的优化机制。同时,复杂多维问题的代理模型不必在整个设计空间都具有高近似度,而是只需要在全局最优解附近实现高近似度[1]。

代理模型目前已经发展出多项式响应面、多项式插值、克里金插值、径向基函数插值、神经网络、支持向量机回归等多种方法。

这其中,多项式响应面、多项式插值接近于回归拟合领域,比较简单。支持向量机回归(相对于分类支持向量机)其应用较少,在此不做讨论。

神经网络作为一套独立的体系,应该说其对原模型的近似程度最高,随着节点和隐含层的增多,实现模型的完美逼近。不过其运算速度也不会很快,且可解释性差,很多网络本身就是一个黑箱。最终,你用一个黑箱,逼近了另一个黑箱。

克里金插值和径向基函数插值是目前应用较多的两种方法。克里金模型又称高斯随机过程模型。我在之前的一篇文章中已经做了较详细的描述。(功能强大的回归模型——高斯过程回归)为啥名称有差别?我个人的理解是克里金的叫法强调插值的思路,高斯过程回归强调回归的思路。在强大的“高斯过程核(比如matern核)”的作用下,插值和回归的区别已经不那么显著了。

本文主要介绍径向基函数代理优化算法(以下简称代理优化)。

首先需要注意的是:代理优化算法必须具有边界约束。如果所求问题不具有边界约束,则可以选择以-1000到1000作为默认边界。目标函数不一定非要是平滑的,但当目标函数是连续的时,算法的效果最好。代理优化的目的是尝试仅使用很少次的目标函数计算,来寻找目标函数的全局最小值。为此,算法将试图在“探索”和“速度”两个目标之间平衡本次优化过程。

代理优化算法分为串行算法和并行算法。其中串行算法是基础和核心,本文只介绍串行代理优化。

算法将在两个阶段之间交替进行。以下是简述版步骤:

(1)构造代理阶段:首先在边界范围内,创建数个随机的点(较少),并在这些点上计算目标函数。通过这些点,插值一个径向基函数来构造目标函数的一个“代理函数”。

(2)搜索最小值阶段:在边界范围内,随机抽样较多个点。根据这些点的“代理值”以及它们与目标函数已知的点之间的距离,来估计一个优值函数(merit function)。以优值函数的全局最优点作为“候选点”。在“候选点”计算目标函数。并称之为“适应点”。以此值更新代理,并再次搜索。在一定条件下,进行“代理重置”,返回步骤(1)

以下是算法的详细内容:

一、术语

(1)目标函数:真实的模型。代理优化最终的目的,还是要求目标函数的全局最优值。代理优化和其它模型最大的不同,就是目标函数是未知的,或者虽然可以求解,但计算起来昂贵、费时。

(2)代理函数(Surrogate function,“S”):目标函数的“代理”,化繁为简。此处采用径向基插值函数作为代理函数。

(3)当前值:目标函数最近一次被计算过的点。

(4)在职点(Incumbent point):在最近的一次“代理重置”后,目标函数值最小的点。这个翻译是我暂译的。Incumbent point是理解模型的关键概念。

(5)最优点:算法开始以来所有计算目标函数值中的最小的点。算法结束时的最优点就是我们最终的全局最优解。

(6)初始点:在算法开始之前,你传递给算法的一些已知目标函数值的点,初始点不是必须的。

(7)随机点:构造代理阶段,算法将在这些点计算目标函数。一般来说,算法会从伪随机序列中获取这些点,并进行缩放和位移。以保证在边界的要求范围内。特别的,当变量极多时(往往需要超过500个),算法将从拉丁超立方体序列中获取点。(关于拉丁超立方体,请看实验设计方法(二)——拉丁超立方体简介)

(8)自适应点:即“搜索最小值”阶段的点。在此处,算法对目标函数求值。

(9)优值函数(merit function):后面详细介绍。这个翻译是我暂译的。

(10)已计算点:或者叫已知值点,即目标函数已知的所有点,包括初始点、构造代理点和搜索最小值阶段计算过的点。

(11)采样点:即算法在最小值搜索阶段对“优值函数”求值的点,这些点计算过的是优值函数,而不是目标函数。

(12)比例(scale):搜索最小值阶段的一个量化参数。

二、算法步骤
算法将在两个阶段之间交替进行。

1、构造代理阶段

算法首先会在边界内选择一些准随机点。如果你有一些初始点,那么算法会用上这些点。获得总共N个点(这个数也是由你设置的),随后,算法将在这些点上计算目标函数。因为计算目标函数的代价高昂,因此N并不需要选择太大。

径向基函数代理优化算法采用径向基函数(RBF)插值器,以构造目标函数的插值代理。常用的径向基函数均可以在代理优化模型中选择。比如:

img

但Matlab选了最适合的一个。其使用的是一个带有线性尾部的立方RBF,此函数使得图像颠簸的程度最小化。读到这里大家已经有一个疑问了。为什么要选RBF函数呢?因为RBF有几个方便的属性,使他是最适合构建代理的函数。

(1)RBF插值器在任意维数、任意点数的情况下,都使用相同的定义公式。

(2)在被计算的点一定可以取到指定的值。意思就是这些点一定可以用RBF进行插值拟合。

(3)计算一个RBF插值器在时间上的花费极少。

(4)当你已经有了一个RBF插值器,那么在已有插值表达式中添加一个点所需要的时间相对较少。

(5)构造一个RBF插值器将涉及到求解一个N*N的线性系统方程组。其中N是代理点的数量。对于RBF,该系统有唯一解。

img

构造代理阶段的示意图(1)在边界内以伪随机方式取点(2)在这些点计算目标函数 (3)使用插值创建“代理”

2、搜索最小值阶段

算法通过一个局部搜索的过程,来搜索目标函数的最小值。“比例(scale)”类似于模式搜索中的“半径”或者“网格”的大小。Matlab里,比例的初始值一般设置为0.2。算法会从“在职点”开始进行。在职点是最近一次代理重置以来,目标函数的最小值所在点。

算法搜索“优值函数”的最小值。优值函数是一个同时关联代理和已搜索值的距离的函数,以平衡“最小化代理”和“搜索空间(广泛度)”两个任务。

算法将成百上千个长度为比例(比如0.2)的伪随机向量。加在在职点上。以得到样本点。这些向量为正态分布的,再在每个维度上依据边界进行移动和缩放。如果的采样点掉到了边界外,算法将会改变采样点。使它们保持在边界内。

然后,算法在这些样本点,计算优值函数。

上一步中,优值函数最低的点被称为自适应点。算法将在自适应点计算目标函数值,并用该值更新“代理”。如果“自适应点”处的目标函数值低于在职点,则算法认为本次搜索“成功”。并将自适应点设为新的在职点。否则,算法认为搜索失败,不会改变在职点。(好吧,在职点这个翻译真的不怎么样,大家将就一下,记住英文Incumbent point)

当满足以下条件时,算法将改变“比例”的值。

(1)自上一次比例变化以来,已经进行了累计三次成功的搜索。此时将比例加倍。直到最大比例,其长度为边界所框定的箱型大小的0.8倍。

(2)在上一次比例变化后,已有max(5,n)次不成功的搜索(n为变量维度)。此时,将比例减半。直到最小比例长度为边界所框定的箱型大小的0.00001倍。

如此反复,随机搜索将最终集中在目标函数值最小的在职点附近。并且最终比例将减小到最小规模。

需要注意的是,算法不会计算任何与已知值点距离在一定范围内的优值函数。而当所有的样本点都在已知值点的这个特定范围内时,算法从搜索最小值阶段重新切换到构造代理阶段。这就叫做“代理重置”。通常这种重置发生在算法的scale缩小以后,因此所有的样本点都紧紧聚集在在职点的周围。

img

搜索最小值阶段的示意图(1)在在职点周围取样 (2)计算优值函数 (3)在自适应点计算目标函数 (4)更新插值代理和比例

三、优值函数(merit function)简介
优值函数是代理优化的重要概念。优值函数同时关联代理和已搜索值的距离的函数,以平衡“最小化代理”和“搜索空间(广泛度)”两个任务。优值函数fmerit(x)是以下两项的加权组合:

(1)“比例化代理”:定义Smin为采样点之间的“最小代理值”。Smax为采样点之间的“最大代理值”。Sx为x处的代理值。则比例化代理S(x)为:

img

S(x)非负,且代理值最小的样本点S(x)值为0。(最小化代理的能力)

(2)“比例化距离”:定义xj为k个已知值点,定义dij为点i与已知值点

dmin = min(dij)

dmax = max(dij)

即对于所有ij的极大和极小距离,则规范化距离D(x)为

img

其中d(x)为点x到已知值点的最小距离

D(x)非负,且当点x距离所有已知值点最远时,D(x)为0.

因此,最小化D(x),算法就会去找那些离已知值点最远的点。(搜索空间的能力)

优值函数为以上两项的加权和。对于一个小于1的权重w,优值函数

img

(1)较大的w将使算法重视代理,将导致搜索趋向代理的最小值。

(2)较小的w将使算法重视探索较远的新领域,从而将搜索引向新区域。在Matlab中,默认w将在0.3、0.5、0.7、0.95这四个数上依次循环。这样就做到了兼顾两种目的。

四、总结
代理优化算法是专门用于应对高代价而耗时的目标函数的一种近似算法。一个代理模型是一个近似于目标函数的函数(至少在最小值点附近如此)。代理模型只需要很少的时间来计算。要搜索目标函数最小化的点。只需要在较多个点上对代理函数进行求值。并将最佳值作为目标函数最小化值的近似值。代理优化算法已被证明可以收敛于有界域上连续目标函数的全局最优解。不过其收敛并不快(还是比直接计算目标函数的算法快的多)。

目前来说,代理优化算法应用的范围相对较少,属于十分冷门的一种算法。相对应的,关于代理优化算法的论文也较少。然而,我个人比较看好它在未来的发展,将会越来越多地被应用在各领域的模型试验中。最终,代理优化发展成一门通用优化模型。成为面对任务未知问题时的一种研究策略。是的,这不仅仅是一种模型,也是一种战略上思维的方式。

这应该是我在2019年的最后一篇文章,感谢各位小伙伴不离不弃,一直以来的支持。各位,我们2020再见。

img

在论文数据库中搜索以“代理优化”为关键词的中文论文只有3篇,若以Surrogate optimization为关键词搜索英文论文,则搜到513篇

http://weixin.qq.com/r/QB21rSLE5H_brWbO90hS (二维码自动识别)

参考文献:

1.韩忠华.Kriging模型及代理优化算法研究进展.航空学报,2016,37(11).

2.[https://ww2.mathworks.cn/help/gads/surrogate-optimization-algorithm.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代理模型优化算法 的相关文章

  • 【Python全栈100天学习笔记】Day47 Django中间件使用

    中间件的应用 实现登录验证 我们继续来完善投票应用 在上一个章节中 xff0c 我们在用户登录成功后通过session保留了用户信息 xff0c 接下来我们可以应用做一些调整 xff0c 要求在为老师投票时必须要先登录 xff0c 登录过的
  • 【Python全栈100天学习笔记】Day48 前后端分离开发入门

    前后端分离开发入门 在传统的Web应用开发中 xff0c 大多数的程序员会将浏览器作为前后端的分界线 将浏览器中为用户进行页面展示的部分称之为前端 xff0c 而将运行在服务器 xff0c 为前端提供业务逻辑和数据准备的所有代码统称为后端
  • 【Python深度学习之路】-3.1性能评价指标

    1 理解混淆矩阵 所谓混淆矩阵 xff0c 是指将模型对各个测试数据的预测结果分为真阳性 真阴性 假阳性和假阴性并对符合各个观点的预测结果的数量进行统计的一种表格 其中 xff0c 真阳性和真阴性表示机器学习模型的回答是正确的 xff0c
  • 【Python深度学习之路】-3.2PR曲线

    1 何谓PR曲线 所谓PR曲线是指用横轴表示召回率 xff0c 纵轴表示精确率 xff0c 将数据绘制成图表的形式所得到的曲线 召回率和准确率两个指标成反比关系 xff0c 所谓反比关系 xff0c 指的是当提升精确率时 xff0c 召回率
  • 【Python深度学习之路】产生随机数

    随机数的生成 1 设置种子 计算机是根据被称为 种子 seed 的数据来生成随机数的 所谓种子 xff0c 是指在生成随机数的过程中所使用的初始值 xff0c 如果种子的值固定不变 xff0c 生成的随机数序列也是不变的 通过使用相同的随机
  • 【Python深度学习之路】时间序列数据

    1 datetime类型 对于时间序列数据进行处理时 xff0c 需要使用表示时间的方法 在P樱桃红中提供了datetime数据类型来对日期和实践进行处理 指定datetime datetime 年 xff0c 月 xff0c 日 xff0
  • caffe学习笔记

    一 mnist例程 https blog csdn net bestrivern article details 85101303 二 cifar10例程 附录 xff1a caffe常见问题及注意事项 https blog csdn ne
  • 我的创作纪念日

    机缘 提示 xff1a 可以和大家分享最初成为创作者的初心 例如 xff1a 实战项目中的经验分享日常学习过程中的记录通过文章进行技术交流 收获 提示 xff1a 在创作的过程中都有哪些收获 例如 xff1a 获得了多少粉丝的关注获得了多少
  • Python数据分析常用30段优化代码

    1 重复元素判定 以下方法可以检查给定列表是不是存在重复元素 xff0c 它会使用 set 函数来移除所有重复元素 def all unique lst return len lst 61 61 len set lst x 61 1 1 2
  • Python妙用小工具:2行Python给图片加水印

    filestools库介绍 今天给大家介绍的Python库 xff0c 叫做filestools xff0c 由小小明开发 xff0c 直接使用如下命令 xff0c 安装后使用 pip install filestools index ur
  • 在Excel中调用Python脚本,实现数据自动化处理

    说起Excel xff0c 那绝对是数据处理领域王者般的存在 xff0c 尽管已经诞生三十多年了 xff0c 现在全球仍有7 5亿忠实用户 xff0c 而作为网红语言的Python xff0c 也仅仅只有700万的开发人员 Excel是全世
  • Python数据分析中常用的工具类和方法【持续更新系列】

    本文主要记录在工作和学习中 xff0c 做数据分析常用到的一些简单的工具函数和类 span class token comment 判断是否为浮点数 span span class token keyword def span span c
  • 【Python深度学习之路】-1 机器学习概论

    Python深度学习之路 1 机器学习概论 1 1 机器学习简介 机器学习火热的原因是 xff1a 人类无论如何也做不到在短时间内实现从大量数据中自动地计算出正确结果的操作 所谓机器学习 xff1a 通过对数据进行反复的学习 xff0c 来
  • 【Python深度学习之路】-2.1 机器学习的流程

    2 1 机器学习的流程简介 进行机器学习的整体流程 xff1a 数据收集 数据清洗 xff08 清洗重复或缺失的数据 xff0c 以提高数据的精读 xff09 运用机器学习算法对数据进行学习 xff08 获取基准 xff09 使用测试数据进
  • 【Python深度学习之路】-2.2 过拟合与集成学习

    2 3 过拟合 计算机对数据进行了过度的学习而产生的状态 xff0c 简称 过拟合 避免过拟合的方法 xff1a 深度学习中会使用 Dropout 的方法 xff0c 而在常规解决方案中 xff0c 我们通常会使用 归一化 来消除对存在偏差
  • 【Python深度学习之路】-4 监督学习

    Python深度学习之路 4 监督学习 4 1 了解监督学习 xff08 分类 xff09 监督学习 xff1a 根据积累的经验数据对新的数据或将来的数据进行预测 xff0c 或者进行分类的一种学习方式 无监督学习 xff1a 对积累的经验
  • 【Python】string模块之ascii_letters、digits(用于生成验证码)

    方法概述 xff1a 1 ascii letters方法的作用是生成全部字母 xff0c 包括a z A Z 2 digits方法的作用是生成数组 xff0c 包括0 9 span class token keyword import sp
  • 傅里叶变换

    傅里叶变换 目录 滤波傅里叶变换简介傅里叶变换的性质快速傅里叶变换 xff08 FFT xff09 一 xff1a 滤波 滤波是将信号中特定波段频率滤除的操作 xff0c 是抑制和防止干扰的一项重要措施 是根据观察某一随机过程的结果 xff
  • centos 常用的网络登录端口测试工具

    ssh 登录 last lastb who users w lastlog ac d ac p lsof lsof i 443 ngrep ngrep port 80 ngrep q 39 GET HTTP 1 01 39 ngrep q

随机推荐

  • 基于stm32的半实物仿平台开发——FreeRTOS、PID控制电机

    目录 一 系统方案 1 1 系统基本方案 1 2 程序结构方案设计 二 系统理论分析计算 2 1控制算法的分析 三 硬件的选型 3 1编码器电机的选型 四 源代码 摘要 本文基于STM32F103ZET6开发板开发了一个直流电机的实物控制系
  • vnc viewer使用方法

    首先需要配置ip xff0c 网络适配器配置那个ipv4到同一网段 1 双击打开exe 2 输入目标ip 端口 3 输入密码 服务器管理工具 这里写目录标题 一 VNC管理工具1 1 工具介绍1 2 使用步骤1 3 使用截图 二 KVM安装
  • 【Unity Shader】用Cubemap实现天空盒和环境映射

    1 关于Cubemap Cubemap在实时渲染中有很多应用 xff0c 最常见的就是实现天空盒 xff08 Skybox xff09 和环境映射 xff08 Environment Mapping xff09 2 实现天空盒 2 1 实现
  • ubuntu samba搭建教程

    1 更新当前软件 sudo apt get upgrade sudo apt get update sudo apt get dist upgrade 2 安装samba服务器 sudo apt get install samba samb
  • 大数据学习路径

    第一阶段linux 43 搜索 43 hadoop体系 Linux基础 shell编程 高并发架构 lucene solr搜索 hadoop体系 HDFS mapreduce hbase zookeeper hive flume sqoop
  • 【Windows11来了】WIN11抢先体验,使用VMware虚拟机安装WIN11

    2021 6 30更新 xff1a 解决安装时出现 Operating System not found 的问题 2021 6 26更新 xff1a 解决了不同VMware版本可能默认引导方式不同造成启动不成功的问题 2021 6 25更新
  • 斜杠、反斜杠、双斜杠、反双斜杠的区别和使用方法及范围

    背景 这边我就找了两篇大神写的文章 xff0c 讲得非常清晰明了 文章主要讲了一些历史缘故和我们面对各种斜杠时的疑惑 斜杠 和反斜杠 深入探讨正斜杠和反斜杠 概念 1 斜杠 34 34 是URL地址中用到的分隔符 xff0c 并且在linu
  • C语言中int占几个字节,指针占几个字节,由什么决定呢?

    int占几个字节 今天心血来潮 xff0c 想要了解一下C语言中各整型占用几个字节 先上代码测试两个环境 xff1b include lt stdio h gt include lt stdlib h gt int main printf
  • 虚拟串口模拟器和串口调试助手使用教程

    虚拟串口 xff08 虚拟 COM 端口 xff09 xff0c 应该很多人都知道 xff0c 也就是一种模拟物理串行接口的 软件 它完全复制了硬件 COM 接口的功能 xff0c 并且将被操作系统和串行应用程序识别为真实端口 以前的电脑
  • 在Ubuntu上安装Boost的五种方法(全网最全,建议收藏)

    问题描述 我在Ubuntu上 xff0c 并且想安装Boost 我尝试过 sudo apt get install boost 但是没有这样的软件包 在Ubuntu上安装Boost的最佳方法是什么 xff1f 最佳方法 您可以使用apt g
  • 编程入门指南:零基础如何自学编程?

    注明一下 xff1a 本文适用于零基础 xff0c 想自学编程的伙伴 xff0c 重点在于盘清底层逻辑以及整理一些学习途径 编程学习如何入门 xff1f 第一步 xff1a 做好心理建设 首先要告诉你一个坏消息 xff1a 自学编程的弯路多
  • Clion中控制台中文出现乱码怎么解决?

    为什么会出现乱码 xff0c 肯定是字符的编码方式不匹配导致的 我们知道 xff0c 现在比较新一点的编辑器和IDE基本都是默认UTF 8编码了 xff0c 但是在Windows下 xff0c 控制台中的中文编码格式是GBK xff0c 因
  • Pandas教程(非常详细)

    文章目录 教程特点阅读条件 Pandas是什么Pandas主要特点Pandas主要优势Pandas内置数据结构 Pandas库下载和安装Windows系统安装Linux系统安装1 Ubuntu用户2 Fedora用户 MacOSX系统安装
  • Pygame教程(非常详细)

    文章目录 教程特点阅读条件 Pygame是什么扩展知识 Pygame下载和安装1 pip包管理器安装2 二进制安装包安装 第一个Pygame程序初始化程序创建Surface对象事件监听游戏循环 Pygame Display显示模块详解Pyg
  • 如何系统地入门学习stm32?

    来自 xff1a https www zhihu com question 46616925 心得 xff1a 本人当初学习STM32的时候有一些跟风的因素 xff0c 自以为学的芯片越多就越厉害 61 61 其实 xff0c 学习嵌入式重
  • 一口气从零读懂CAN总线以及应用

    在各种总线通信中 xff0c 很多都是点对点的通信方式 xff0c CAN总线是一种去中心化的多主控通信方式 xff0c 在汽车领域应用很多 xff0c 因此有必要了解一下 概要 上世纪八十年代以来 xff0c 汽车ECU越来越多 xff0
  • 开源免费录屏和直播软件OBS Studio教程

    转载于 xff1a https zhuanlan zhihu com p 107720665 OBS Studio是目前比较主流的免费开源录屏和直播软件 xff0c 它提供了丰富的功能特性 xff0c 可以媲美一些受欢迎的同类商业软件 如果
  • KY-RTI分布仿真技术教程

    已剪辑自 https blog csdn net sillysunny article details 84197424 第一章 简介 高层体系结构 xff08 High Level Architecture xff0c HLA xff09
  • 自动化测试框架知识,读这一篇就够了!怎么构建属于自己的自动化测试框架

    已剪辑自 https segmentfault com a 1190000022693251 自动化测试因其节约成本 提高效率 减少手动干预等优势已经日渐成为测试人员的 潮流 xff0c 从业人员日益清楚地明白实现自动化框架是软件自动化项目
  • 代理模型优化算法

    已剪辑自 https zhuanlan zhihu com p 99609634 微信公号 xff1a Mat物语科研数据分析 阅读本文最好需要提前了解 xff08 一点点 xff09 的一些知识点 xff08 不懂也可以阅读 xff09