【理想解法学习笔记】
目录
- 理想解法
- 原理简介
- 算法步骤
- 属性值规范化方法
- 代码示例
理想解法
原理简介
TOPSIS(Technique for Order Preference by Simi larity to IdealSolution)法是一种逼近理想解的排序方法。其基本的处理思路是:首先建立初始化决策矩阵,而后基于规范化后的初始矩阵,找出有限方案中的最优方案和最劣方案(也就是正、负理想解),然后分别计算各个评价对象与最优方案和最劣方案的距离,获得各评价方案与最优方案的相对接近程度,最后进行排序,并以此作为评价方案优劣的依据。
设多属性决策方案集为 D = { d 1 , d 2 , . . . , d m } D=\left \{ d_1,d_2,...,d_m \right \} D={d1,d2,...,dm},衡量方案优劣的属性变量为 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn。,这时方案集 D D D中的每个方案 d i ( i = 1 , 2 , ⋯ , m ) d_i(i=1,2,⋯,m) di(i=1,2,⋯,m)的 n n n个属性值构成的向量是 [ a i 1 , a i 2 , . . . , a i n ] \left [ a_{i1},a_{i2},...,a_{in} \right ] [ai1,ai2,...,ain],它作为 n n n维空间中的一个点,能唯一地表征方案 d i d_i di。正理想解 C ∗ C^* C∗是一个方案集 D D D中并不存在的虚拟的最佳方案,它的每个属性值都是决策矩阵中该属性的最优值;而负理想解 C 0 C^0 C0则是虚拟的最差方案,它的每个属性值都是决策矩阵中该属性的最差值。在 n n n维空间中,将方案集 D D D中的各备选方案 d i d_i di.与正理想解 C ∗ C^* C∗和负理想解 C 0 C^0 C0的距离进行比较,既靠近正理想解又远离负理想解的方案就是方案集D中的最优方案,并可以据此排定方案集D中各备选方案的优先序。对比备选方案和理想解需要定义适合的距离测度,TOPSIS所用的是欧几里得距离。
算法步骤
假设初始的决策矩阵 A A A为:
A = [ a 11 … a 1 j … a 1 n ⋮ ⋮ ⋮ ⋮ ⋮ a i 1 … a i j … a i n ⋮ ⋮ ⋮ ⋮ ⋮ a m 1 … a m j … a m n ] A=\begin{bmatrix} a_{11}& \dots& a_{1j}& \dots &a_{1n} \\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{i1}& \dots& a_{ij}& \dots &a_{in}\\ \vdots& \vdots& \vdots& \vdots&\vdots\\ a_{m1}& \dots& a_{mj}& \dots &a_{mn}\\ \end{bmatrix} A=⎣⎢⎢⎢⎢⎢⎢⎡a11⋮ai1⋮am1…⋮…⋮…a1j⋮aij⋮amj…⋮…⋮…a1n⋮ain⋮amn⎦⎥⎥⎥⎥⎥⎥⎤
(1)对初始决策矩阵 A A A的所有备选方案的每一个属性进行规范化处理,即对 A A A的每一个列向量 [ a 1 j , a 2 j , . . . , a m j ] T , j ∈ 1 , . . . , n \left [ a_{1j},a_{2j},...,a_{mj} \right ]^T,j\in 1,...,n [a1j,a2j,...,amj]T,j∈1,...,n规范化处理得到规范化的决策矩阵 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij)m×n.
b i j = a i j ∑ i = 1 m a i j 2 , i = 1 , . . . , m , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2}},i=1,...,m,j=1,...,n bij=∑i=1maij2aij,i=1,...,m,j=1,...,n
(2)构造加权规范阵,假设 n n n个属性的权重构成的权重向量为 ω = [ ω 1 , ω 2 , . . . , ω n ] ⊤ \omega=\left [ \omega_1,\omega_2,...,\omega_n \right ]^\top ω=[ω1,ω2,...,ωn]⊤,将规范化的决策矩阵 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij)m×n的每一行与权重向量对应相乘即得到加权规范阵 C = ( c i j ) m × n C=\left ( c_{ij} \right )_{m\times n} C=(cij)m×n。
c i j = b i j ∗ ω j , j = 1 , . . . , n , i = 1 , . . . , m c_{ij}=b_{ij}\ast \omega_j,j=1,...,n,i=1,...,m cij=bij∗ωj,j=1,...,n,i=1,...,m
(3)确定正理想解 C ∗ C^* C∗和负理想解 C 0 C^0 C0,对于成本型属性,选择最小值,对于效益型属性,选择最大值。遍历 C C C的每一列 C j ( j = 1 , . . . , n ) C_j(j=1,...,n) Cj(j=1,...,n),根据指标类型选择每一列的最大值或最小值。
c j ∗ = { max { C j } , j 为 效 益 型 指 标 min { C j } , j 为 成 本 型 指 标 c_{j}^*=\begin{cases} \max\left \{ C_{j} \right \},j为效益型指标 \\ \min\left \{ C_{j} \right \},j为成本型指标 \end{cases} cj∗={max{Cj},j为效益型指标min{Cj},j为成本型指标
c j 0 = { min { C j } , j 为 效 益 型 指 标 max { C j } , j 为 成 本 型 指 标 c_{j}^0=\begin{cases} \min\left \{ C_{j} \right \},j为效益型指标 \\ \max\left \{ C_{j} \right \},j为成本型指标 \end{cases} cj0={min{Cj},j为效益型指标max{Cj},j为成本型指标
其中 c j ∗ , c j 0 c_j^*,c_j^0 cj∗,cj0分别表示正、负理想解的第 j j j个元素取值。
(4)计算各方案到两个理想解的距离,即计算加权规范阵 C C C的每一行 C i ( i = 1 , . . . , m ) C_i(i=1,...,m) Ci(i=1,...,m)与理想解 C ∗ , C 0 C^*,C^0 C∗,C0的距离。
-
距离正理想解的距离 s i ∗ s_i^* si∗
s i ∗ = ∑ j = 1 n ( c i j − c j ∗ ) 2 s_i^*=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^* \right )^2 } si∗=j=1∑n(cij−cj∗)2 -
距离负理想解的距离 s i 0 s_i^0 si0
s i 0 = ∑ j = 1 n ( c i j − c j 0 ) 2 s_i^0=\sqrt{\sum_{j=1}^{n}\left ( c_{ij}-c_j^0 \right )^2 } si0=j=1∑n(cij−cj0)2
(5)计算各方案的排序指标值,按照指标值大小确定方案排序
f i ∗ = s i 0 s i 0 + s i ∗ , i = 1 , . . . , m f_i^*=\frac{s_i^0}{s_i^0+s_i^*},i=1,...,m fi∗=si0+si∗si0,i=1,...,m
属性值规范化方法
数据的预处理又称属性值的规范化。
作用:
- 在综合评价之前将属性的类型作一致化处理使得表中任-属性下性能越优的方案变换后的属性值越大;
- 在用各种多属性决策方法进行分析评价时需要排除量纲的选用对决策或评估结果的影响;
- 为了便于采用各种多属性决策与评估方法进行评价’需要把属性值表中的数值归一化,即把表中数值均变换到 [ 0 , 1 ] \left [ 0,1 \right ] [0,1]区间上。
常见方法:
设原始的决策矩阵为 A = ( a i j ) m × n A=\left ( a_{ij} \right )_{m\times n} A=(aij)m×n,变化后的决策矩阵为 B = ( b i j ) m × n B=\left ( b_{ij} \right )_{m\times n} B=(bij)m×n。
-
标准化处理
在实际问题中,不同变量的测量单位往往不同,为了消除量纲效应,使每个变量都具有同等的表现力,数据分析中常对数据进行标准化处理,即
b i j = a i j − μ j s j , i = 1 , . . . , m , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-\mu_{j}}{s_j},i=1,...,m,j=1,...,n bij=sjaij−μj,i=1,...,m,j=1,...,n
其中 μ j = 1 m ∑ i = 1 m a i j \mu_{j}=\frac{1}{m}\sum_{i=1}^{m}a_{ij} μj=m1∑i=1maij表示第 j j j列均值, s j = 1 m − 1 ∑ i = 1 m ( a i j − u j ) 2 s_j=\sqrt{\frac{1}{m-1}\sum_{i=1}^{m}\left ( a_{ij}-u_j \right )^2} sj=m−11∑i=1m(aij−uj)2表示第 j j j列方差, j = 1 , . . . , n j=1,...,n j=1,...,n。 -
线性变换
-
效益型属性
b i j = a i j a j m a x , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{a_j^{max}},j=1,...,n bij=ajmaxaij,j=1,...,n
其中 a j m a x a_j^{max} ajmax表示决策矩阵 A A A第 j j j列的最大值。 -
成本型属性
b i j = 1 − a i j a j m a x , j = 1 , . . . , n b_{ij}=1-\frac{a_{ij}}{a_j^{max}},j=1,...,n bij=1−ajmaxaij,j=1,...,n
-
-
标准0-1变换
-
效益型属性
b i j = a i j − a j m i n a j m a x − a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_{ij}-a_j^{min}}{a_j^{max}-a_j^{min}},j=1,...,n bij=ajmax−ajminaij−ajmin,j=1,...,n
其中 a j m a x , a j m i n a_j^{max},a_j^{min} ajmax,ajmin分别表示初始的决策矩阵 A A A第 j j j列的最大值、最小值。 -
成本型属性
b i j = a j m a x − a i j a j m a x − a j m i n , j = 1 , . . . , n b_{ij}=\frac{a_j^{max}-a_{ij}}{a_j^{max}-a_j^{min}},j=1,...,n bij=ajmax−ajminajmax−aij,j=1,...,n
-
-
区间属性变换
对于区间属性,设第 j j j个属性最优属性区间为 [ a j 0 , a j ∗ ] \left [ a_j^0,a_j^* \right ] [aj0,aj∗],无法容忍下限为 a j l b a_j^{lb} ajlb,无法容忍上限为 a j u b a_j^{ub} ajub,则
b i j = { 1 − ( a j 0 − a i j ) ( a j 0 − a j l b ) , a j l b ≤ a i j < a j 0 1 , a j 0 ≤ a i j ≤ a j ∗ 1 − ( a i j − a j ∗ ) ( a j u b − a j ∗ ) , a j ∗ < a i j ≤ a j u b 0 , o t h e r b_{ij}=\begin{cases} 1-\frac{\left ( a_j^0-a_{ij} \right ) }{\left ( a_j^0-a_j^{lb} \right )} & \text{ , } a_j^{lb}\le a_{ij}< a_j^0 \\ 1& \text{ , } a_j^{0}\le a_{ij}\le a_j^* \\ 1-\frac{\left ( a_{ij}-a_{j}^* \right ) }{\left ( a_j^{ub}-a_j^{*} \right )}& \text{ , } a_j^*< a_{ij}\le a_j^{ub} \\ 0& \text{ , } other \end{cases} bij=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧1−(aj0−ajlb)(aj0−aij)11−(ajub−aj∗)(aij−aj∗)0 , ajlb≤aij<aj0 , aj0≤aij≤aj∗ , aj∗<aij≤ajub , other -
向量规范化
b i j = a i j ∑ i = 1 m a i j 2 , j = 1 , . . . , n b_{ij}=\frac{a_{ij}}{\sqrt{\sum_{i=1}^{m}a_{ij}^2} },j=1,...,n bij=∑i=1maij2aij,j=1,...,n
规范化后,各方案同一属性值的平方和为1。
代码示例
假设现有5个高校的数据,需要根据这些数据对高校进行评估。
| 人均专著/(本/人) | 生师比 | 科研经费/(万元每年) | 逾期毕业率/% | |
|---|---|---|---|---|
| 1 | 0.1 | 5 | 5000 | 4.7 |
| 2 | 0.2 | 6 | 6000 | 5.6 |
| 3 | 0.4 | 7 | 7000 | 6.7 |
| 4 | 0.9 | 10 | 10000 | 2.3 |
| 5 | 1.2 | 2 | 400 | 1.8 |
对上面的4个指标进行分析,人均专著、科研经费属于效益型指标,逾期毕业率属于成本型指标,而生师比属于区间型指标,假设生师比最优区间为 [ 5 , 6 ] \left [ 5,6 \right ] [5,6],无法容忍下限为2,无法容忍上限为12,需要对其中一些指标进行转换。给出python代码如下:
import numpy as npA = np.array([[0.1, 5, 5000, 4.7],[0.2, 6, 6000, 5.6],[0.4, 7, 7000, 6.7],[0.9, 10, 10000, 2.3],[1.2, 2, 400, 1.8]])# 师生比的最优区间
opt_range = [5, 6]
# 师生比的容忍上下限
to_lb = 2
to_ub = 12# 属性的权向量
omega = np.array([0.2, 0.3, 0.4, 0.1])# 对师生比进行区间属性进行规范化处理
def range_trans(param, opt_range, lb, ub):""":param param: 待转换的元素值:param opt_range: 最优区间:param lb: 无法容忍下限:param ub: 无法容忍上限:return:"""if lb <= param < opt_range[0]:return 1 - (opt_range[0] - param)/(opt_range[0] - lb)elif param <= opt_range[1]:return 1elif param <= ub:return 1 - (param - opt_range[1])/(ub - opt_range[1])else:return 0# Press the green button in the gutter to run the script.
if __name__ == '__main__':# 方案数m,属性数nm, n = np.shape(A)# 对师生比作区间变换for i in range(m):A[i, 1] = range_trans(A[i, 1], opt_range, to_lb, to_ub)# 对逾期毕业率做标准0-1变换a4_max = max(A[:, 3])a4_min = min(A[:, 3])for i in range(m):A[i, 3] = (a4_max - A[i, 3])/(a4_max - a4_min)# 属性进行向量规范化B = np.zeros([m, n])for i in range(m):for j in range(n):B[i, j] = A[i, j] / np.linalg.norm(A[:, j])# 构建加权规范阵omega_mat = np.tile(omega, (m, 1))C = B * omega_mat# 求正、负理想解。前两个属性以及第三个max_vec = np.amax(C, axis=0)min_vec = np.amin(C, axis=0)# 计算各方案与正、负理想解之间的距离res_array = np.zeros([m])for i in range(m):d0 = np.linalg.norm(max_vec - C[i, :])d1 = np.linalg.norm(min_vec - C[i, :])res_array[i] = d1/(d0 + d1)print(res_array.tolist())
运行结果如下:
[0.5240156414355697, 0.5725615802335773, 0.61086314578445, 0.7027067250301631, 0.32916727350419983]
从运行结果上来看,数值越大说明对该高校的评估结果越好,具体的排名为 [ 4 , 3 , 2 , 1 , 5 ] \left [ 4,3,2,1,5 \right ] [4,3,2,1,5],因此第4所高校总体来说评价最好。
相关文章:
【理想解法学习笔记】
目录 理想解法原理简介算法步骤属性值规范化方法代码示例 理想解法 原理简介 TOPSIS(Technique for Order Preference by Simi larity to IdealSolution)法是一种逼近理想解的排序方法。其基本的处理思路是:首先建立初始化决策矩阵,而后基于规范化后的初…...
98.在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图
在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图 前言 在 Web GIS(地理信息系统)应用开发中,地图的 Resolution(分辨率)是一个重要的概念。不同的 Resolution 适用于不同的地图层级,有时…...
Docker 部署 Vaultwarden
一、前言 1. 官网 1.1 Vaultwarden https://github.com/dani-garcia/vaultwarden https://github.com/wcjxixi/Vaultwarden-Wiki-Chn https://hub.docker.com/r/vaultwarden/server https://rs.ppgg.in/ # Vaultwarden Wiki 中文版 https://geekdaxue.co/read/Vaultward…...
Smart contract -- 自毁合约
在区块链开发中,Solidity 语言提供了强大的功能,其中自毁合约是一个独特且重要的特性。今天,就让我们深入探讨一下 Solidity 中的自毁合约,以及如何使用 selfdestruct 函数。 注意:使用继承时请确保代码的正确性&#…...
unity学习64,第3个小游戏:一个2D跑酷游戏
目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材,且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…...
Python Flask 在网页应用程序中处理错误和异常
Python Flask 在网页应用程序中处理错误和异常 Python Flask 在网页应用程序中处理错误和异常 Python Flask 在网页应用程序中处理错误和异常 在我们所有的代码示例中,我们没有注意如何处理用户在浏览器中输入错误的URL或向我们的应用程序发送错误的参数集的情况。…...
模板方法模式的C++实现示例
核心思想 模板方法设计模式是一种行为设计模式,它定义了一个算法的框架,并将某些步骤的具体实现延迟到子类中。通过这种方式,模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的核心在于: …...
水下机器人推进器PID参数整定与MATLAB仿真
水下机器人推进器PID参数整定与MATLAB仿真 1. PID控制原理 目标:通过调节比例(P)、积分(I)、微分(D)参数,使推进器输出力快速稳定跟踪期望值。传递函数(示例):推进器动力学模型可简化为: [ G(s) = \frac{K}{\tau s + 1} \cdot e^{-Ts} ] 其中:K为增益,τ为时间常…...
在本地部署DeepSeek等大模型时,需警惕的潜在安全风险
在本地部署DeepSeek等大模型时,尽管数据存储在本地环境(而非云端),但仍需警惕以下潜在安全风险: 1. 模型与数据存储风险 未加密的存储介质:若训练数据、模型权重或日志以明文形式存储,可能被物…...
智能焊机监测系统:打造工业安全的数字化盾牌
在现代工业生产中,焊机作为核心设备之一,其稳定性和安全性直接关系到生产效率和产品质量。德州迪格特科技有限公司推出的智能焊机监测系统,通过先进的技术手段,为工业生产构筑了一道坚固的安全防线。 智能监测,保障焊…...
【redis】string类型相关操作:SET、GET、MSET、MGET、SETNX、SETEX、PSETEX
文章目录 二进制存储编码转换SET 和 GETSETGET MSET 和 MGETSETNX、SETEX 和 PSETEX Redis 所有的 key 都是字符串,value 的类型是存在差异的 二进制存储 Redis 中的字符串,直接就是按照二进制数据的方式存储的 不仅仅可以存储文本数据,还可…...
GaussDB安全配置指南:从认证到防御的全方面防护
一、引言 随着企业数据规模的扩大和云端化进程加速,数据库安全性成为运维的核心挑战之一。GaussDB作为一款高性能分布式数据库,提供了丰富的安全功能。本文将从 认证机制、权限控制、数据加密、审计日志 等维度,系统性地讲解如何加固 Ga…...
总结学习课程
1. 数据加载与预处理 PyTorch工具加载和预处理数据(如MNIST数据集)。 2. 定义模型 - 使用nn.Module构建神经网络,定义各层和前向传播。 3. 损失函数与优化器: 选择损失函数(如交叉熵损失)和优化…...
Ubuntu20.04搭建gerrit code review
一、环境准备 1. 安装 Java 环境 Gerrit 依赖 Java 运行环境(推荐 JDK 8): sudo apt install openjdk-11-jdk 验证安装: java -version 2. 安装 Git sudo apt install git 3. 可选依赖 数据库:Gerrit …...
MacOS安装FFmpeg和FFprobe
按照网上很多教程安装,结果都失败了,后来才发现是路径问题,其实安装过程很简单(无奈) 第一步: 在官网下载 打开页面后,可以看到FFmpeg、FFprobe、FFplay和FFserver的下载图标 第二步࿱…...
Redis7系列:设置开机自启
前面的文章讲了Redis和Redis Stack的安装,随着服务器的重启,导致Redis 客户端无法连接。原来的是Redis没有配置开机自启。此文记录一下如何配置开机自启。 1、修改配置文件 前面的Redis和Redis Stack的安装的文章中已经讲了redis.config的配置…...
SpringAI介绍及本地模型使用方法
博客原文地址 前言 Spring在Java语言中一直稳居高位,与AI的洪流碰撞后也产生了一些有趣的”化学反应“,当然你要非要说碰撞属于物理反应也可以, 在经历了一系列复杂的反应方程后,Spring家族的新成员——SpringAI,就…...
Zookeeper实践指南
Zookeeper实践指南 1. 什么是 Zookeeper? Zookeeper 是 Apache 旗下的一个开源分布式协调框架,主要用于解决分布式系统中的一致性问题,提供高效可靠的分布式数据管理能力。 1.1 Zookeeper 的核心特性 顺序一致性:客户端的更新…...
Unity 基础知识总结(持续更新中...)
引擎基础 Unity有哪几个主要窗口? Scene窗口 用于场景搭建和UI界面拼接 Game窗口 游戏运行预览 Hierarchy窗口 查看和调整场景对象层级结构 Project窗口 游戏工程资源 Inspector创建 属性查看器,属性设置、脚本组件挂载 Unity提供了几种光源…...
IDEA接入阿里云百炼中免费的通义千问[2025版]
安装deepseek 上一篇文章IDEA安装deepseek最新教程2025中说明了怎么用idea安装codeGPT插件,并接入DeepSeek,无奈接入的官方api已经不能使用了,所以我们尝试从其他地方接入 阿里云百炼https://bailian.console.aliyun.com/ 阿里云百炼是阿…...
中级网络工程师面试题参考示例(1)
一、基础理论 1. OSI七层模型与TCP/IP四层模型的区别是什么?请举例说明第三层(网络层)和第四层(传输层)的核心协议。 参考答案: OSI七层模型分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用…...
主流大语言模型中Token的生成过程本质是串行的
主流大语言模型中Token的生成过程本质是串行的 flyfish 1. 串行生成 自回归模型的核心逻辑: 大模型(如GPT-2)采用自回归架构,每个Token的生成必须基于已生成的完整历史序列。例如,生成“今天天气很好”时:…...
3.03-3.09 Web3 游戏周报:Sunflower Land 周留存率 74.2%,谁是本周最稳链游?
回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【3.03–3.09】Web3 游戏行业动态 Sui 背后开发公司 Mysten Labs 宣布收购游戏开发平台 ParasolYescoin 创始人因合伙人纠纷被警方带走,案件升级为刑事案件Animoca B…...
高级java每日一道面试题-2025年2月18日-数据库篇-MySQL 如何做到高可用方案?
如果有遗漏,评论区告诉我进行补充 面试官: MySQL 如何做到高可用方案? 我回答: 在Java高级面试中,讨论MySQL如何实现高可用性方案是一个重要话题。这不仅涉及到数据库的稳定性和可靠性,还关系到系统的整体性能和用户体验。以下是结合提供的信息进行综…...
【编程题】7-5 堆中的路径
7-5 堆中的路径 1 题目原文2 思路解析3 代码实现 1 题目原文 题目链接:7-5 堆中的路径 将一系列给定数字插入一个初始为空的最小堆 h h h。随后对任意给定的下标 i i i,打印从第 i i i 个结点到根结点的路径。 输入格式: 每组测试第 1 1 1 行包含 …...
Scala 中的访问修饰符
在Scala中,面向对象的权限控制主要通过访问修饰符来实现。Scala提供了以下几种访问修饰符来控制类、对象、成员变量和方法的访问权限: 1. 默认访问权限(无修饰符) 如果没有指定任何访问修饰符,成员默认是public的&…...
flask_restx 定义任意类型参数
之前定义的content只是string,现在需要支持即可以string也可以list from flask_restx import fieldsclass Messages:def get_model(api):return api.model("Message",{"role": fields.String(requiredTrue, description"The role of messa…...
Unity3D网格简化与LOD技术详解
前言 在Unity3D游戏开发中,网格简化(Mesh Simplification)和细节层次(Level of Detail, LOD)技术是优化渲染性能的关键手段,尤其在处理复杂场景和高精度模型时至关重要。这两种技术通过减少模型的几何复杂…...
爬取数据时如何处理可能出现的异常?
在爬取数据时,处理可能出现的异常是确保爬虫稳定运行的关键。以下是一些常见的异常处理策略和具体实现方法,这些方法可以帮助你在爬虫开发中更有效地应对各种问题。 1. 使用 try-catch 块捕获异常 在PHP中,try-catch 块是处理异常的基本工具…...
TCP/IP原理详细解析
前言 TCP/IP是一种面向连接,可靠的传输,传输数据大小无限制的。通常情况下,系统与系统之间的http连接需要三次握手和四次挥手,这个执行过程会产生等待时间。这方面在日常开发时需要注意一下。 TCP/IP 是互联网的核心协议族&…...
