【数学模型】TOPSIS

文章目录

回顾:层次分析法的一些局限性  

一、模型介绍

1.1 引例:

一个简单的想法:

一个较好的方法:

1.2 增加指标:

统一指标类型 

标准化处理

计算得分

二、TOPSIS的介绍

第一步:将原始矩阵正向化

第二步:正向化矩阵标准化

第三步:计算得分并归一化

三、拓展:添加权重

 *熵权法对TOPSIS模型的修正

度量信息量的大小

信息熵的定义 

熵权法的计算步骤

熵权法背后的原理

四、代码实现

*熵权法加权


TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法。

TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距

回顾:层次分析法的一些局限性  

1. 评价的决策层不能太多,太多的话n会很大,判断矩阵和 一致矩阵差异可能会很大。

我们上面提到过的RI指标也只到了15:

n123456789101112131415
R000.520.891.121.261.361.411.461.491.521.541.561.581.59

2. 如果决策层中指标的数据是已知的,那么我们如何利用这些数据来使得评价的更加准确呢? 

该方法仍具有较强的主观性,判断/比较矩阵的构造在一定程度上是凭感觉决定的,一致性检验只是检验 感觉 有没有自相矛盾得太离谱。 


如果题目中有已经提供了的数据,那就暗示我们不要用层次分析法了,我们可以通过分析这些数据内在的特征来进行建模。这就是TOPSIS方法应用于评价类问题与层次分析法不同之处。


一、模型介绍

1.1 引例:

坤坤宿舍共有四名同学,他们第一学期的高数成绩如下表所示:

姓名成绩
坤坤89
菜菜60
小徐74
鸡哥99

请为这四名同学进行评估,该评分能合理的描述其高数水平的高低。

一个简单的想法:

姓名成绩等级level排名评分
坤坤89233/10=0.3
菜菜60411/10=0.1
小徐74322/10=0.2
鸡哥99144/10=0.4

可见,鸡哥成绩最高,最后评估得分0.4也是最高的。

但该方法存在一些问题:哪怕菜菜只得了0分,他的评价分数也是0.1,只与鸡哥差0.3分。

一个较好的方法:

我们构造评分公式:

\frac{x-min}{max-min}

其中,最高成绩max:99,最低成绩min:60。

则有:

姓名成绩归一化前的评分归一化后的评分
坤坤89(89-60)/(99-60) = 0.740.74/2.1 = 0.35
菜菜60(60-60)/(99-60) = 00
小徐74(74-60)/(99-60) = 0.360.36/2.1 = 0.17
鸡哥99(99-60)/(99-60) = 11/2.1 = 0.48

这样的话,菜菜考得再低,鸡哥考得再高,评分还是不变的。

其实,按卷子满分是max:100,最低min:0。

姓名成绩归一化前的评分归一化后的评分
坤坤890.890.28
菜菜600.600.19
小徐740.740.23
鸡哥990.990.30

这样显然更合理一些,菜菜最后的评分也不是0分了。

但是我们依然选择max:99,最低成绩min:60,而不是max:100,最低min:0。原因如下:

  • 比较的对象一般要大于两个,例如比较一个班级的成绩。
  • 比较的指标也往往不只是一个方面的,例如成绩、工时数、课外竞赛得分等。
    • 菜菜的成绩是0,但也许他的其它项就把评分弥补回来了。
  • 有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指标:GDP增速。

评分的公式:

\frac{x-min}{max-min}

1.2 增加指标:

新增加了一个指标,现在要综合评价四位同学,并为他们进行评分。

姓名成绩发生矛盾次数
坤坤892
菜菜600
小徐741
鸡哥993
  • 成绩是越高(大)越好,这样的指标称为极大型指标(效益型指标)
  • 发生矛盾次数越少(越小)越好,这样的指标称为极小型指标(成本型指标)

统一指标类型 

为了方便评分,我们需要统一指标类型(就比如最开始成绩第一等级给他level4);

将所有的指标转化为极大型称为指标正向化(最常用) :

姓名成绩发生矛盾次数正向化后的争吵次数
坤坤8921
菜菜6003
小徐7412
鸡哥9930
指标类型极大型极小型极大型

极小型指标转换为极大型指标的公式: max - x

标准化处理

姓名成绩正向化后的争吵次数
坤坤891
菜菜603
小徐742
鸡哥990

为了消去不同指标量纲的影响, 需要对已经正向化的矩阵进行标准化处理

如果我们直接计算,很明显成绩的数值大小远大于争吵次数,这就会导致结果过于倾向于成绩的高低,而争吵次数的影响微乎其微,因此,我们要对其进行 标准化处理

标准化公式:

假设有n个要评价的对象,m个评价指标(已经过正向化处理),构成矩阵X:

那么对其标准化的矩阵记为Z,Z中每个元素:

z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^{n}}x_{ij}^{2}}

如:

计算得分

姓名成绩正向化后的争吵次数
坤坤0.54370.2673
菜菜0.36650.8018
小徐0.45200.5345
鸡哥0.60480

当只有一个指标的时候,我们:

\frac{x-min}{max-min}

他可以看作:

\frac{x-min}{(max-x)+(x-min)}

即:

x与最小值的距离 / (x与最大值的距离+x与最小值的距离)

我们以 D^{+} 表示与最大值的距离, D^{-} 表示与最小值的距离,则:

对于坤坤:

  • D^{+} = \sqrt{(0.6048-0.5437)^{2}+(0.8018-0.2673)^{2}} = 0.5380
  • D^{-} = \sqrt{(0.3665-0.5437)^{2}+(0-0.2673)^{2}} = 0.3206

对于菜菜:

  • D^{+} = \sqrt{(0.6048-0.3665)^{2}+(0.8018-0.8018)^{2}} = 0.2382
  • D^{-} = \sqrt{(0.3665-0.3665)^{2}+(0-0.8018)^{2}} = 0.8018

对于小徐、鸡哥:略

得到下表:

姓名D^{+}D^{-}归一化前的评分归一化后的评分排名
坤坤0.53800.32060.37340.18573
菜菜0.23820.80180.77090.38341
小徐0.30780.54130.63750.31702
鸡哥0.80180.23820.22910.11394

想不到,最后居然是成绩最低的菜菜综合测评排名第一!

当然,如果本学校更加看重成绩,也可以在第二步:标准化处理时设置权重。

二、TOPSIS的介绍

C.L.Hwang 和 K.Yoon 于1981年首次提出 TOPSIS (Technique for  Order Preference by Similarity to an Ideal Solution),可翻译为逼近理想解排序法,国内常简称为优劣解距离法

TOPSIS 法是一种常用的综合评价方法,能充分利用原始数据的 信息,其结果能精确地反映各评价方案之间的差距。

基本过程为先将原始数据矩阵统一指标类型(一般正向化处理) 得到正向化的矩阵,再对正向化的矩阵进行标准化处理以消除各指 标量纲的影响,并找到有限方案中的最优方案和最劣方案,然后分 别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对 象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法 对数据分布及样本含量没有严格限制,数据计算简单易行。

第一步:将原始矩阵正向化

最常见的四种指标:

指标名称指标特点例子
极大型(效益型)指标越大(多)越好成绩、GDP增速、企业利润
极小型(成本型)指标越小(少)越好费用、坏品率、污染程度
中间型指标越接近某个值越好水质量评估时的PH值
区间型指标落在某个区间最好体温、水中植物性营养物量

所谓的将原始矩阵正向化,就是要将所有的指标类型统一转化为极大型指标。(转换的函数形式可以不唯一)

  • 极小型指标 --> 极大型指标:

max-x     或者    \frac{1}{x}(\forall x>0)

  • 中间型指标 --> 极大型指标:

        \begin{Bmatrix} x_{i} \end{Bmatrix} 为一指标序列,x_{best} 为最佳指标; 

M=max\begin{Bmatrix} |x_{i}-x_{best}| \end{Bmatrix}, \: \: \: \widetilde{x}_{i}=1-\frac{|x_{i}-x_{best}|}{M}

        如:

PH值(转换前)PH值(转换后)
61-\frac{|6 - 7|}{2}=\frac{1}{2}
71-\frac{|7 - 7|}{2}=1
81-\frac{|8 - 7|}{2}=\frac{1}{2}
91-\frac{|9 - 7|}{2}=0

        其中 x_{best} = 7M=max\begin{Bmatrix} |6-7|,|7-7|,|8-7|,|9-7| \end{Bmatrix} = 2

  • 区间型指标 --> 极大型指标

        \begin{Bmatrix} x_{i} \end{Bmatrix} 为一指标序列,[a,b]  为最佳区间;

        M=max\begin{Bmatrix} a-min(\begin{Bmatrix} x_{i} \end{Bmatrix}),max(\begin{Bmatrix} x_{i} \end{Bmatrix})-b \end{Bmatrix}

x_{i}=\left\{\begin{matrix} 1-\frac{a-x_{i}}{M} & x_{i}<a\\ 1 & a\leq x_{i}\leq b\\ 1-\frac{x_{i}-b}{M}& x_{i}>b \end{matrix}\right.

        如:

体温(转换前)体温(转换后)
35.20.4286
35.80.8571
36.61
37.10.9286
37.80.4286
38.40

        其中:a=36,b=37,M = max\begin{Bmatrix} 36-35.2,\: 38.4-37 \end{Bmatrix}=1.4

注意:正向化的公式不唯一,大家也可以结合自己的数据进行适当的修改。

第二步:正向化矩阵标准化

标准化的目的是消除不同指标量纲的影响。

 假设有n个要评价的对象,m个评价指标(已经过正向化处理),构成矩阵X:

那么对其标准化的矩阵记为Z,Z中每个元素:

z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^{n}}x_{ij}^{2}}

注意:标准化的方法有很多种,其主要目的就是去除量纲的影响,未来我们还可能见到更多 种的标准化方法,例如:(x‐x的均值)/x的标准差;具体选用哪一种标准化的方法在多数情况下 并没有很大的限制,这里我们采用的是前人的论文中用的比较多的一种标准化方法。

第三步:计算得分并归一化

注意:

  • 要区别开归一化和标准化。归一化的计算步骤也可以 消去量纲的影响,但更多时候,我们进行归一化的目的是为 了让我们的结果更容易解释,或者说让我们对结果有一个更 加清晰直观的印象。例如将得分归一化后可限制在0‐1这个区 间,对于区间内的每一个得分,我们很容易的得到其所处的比例位置。
  • 这里还没有考虑指标的权重,后面的内容会考虑指标的权重来进行计算。

三、拓展:添加权重

在我们计算x与最大值的距离 和 x与最小值的距离之前,也就是刚刚标准化完数据之后,可以指标进行权重的设置。

可以使用之前学的层次分析法来确定权重

此时,我通过查阅资料,询问走访,自己一拍脑门对含氧量,PH值,细菌总个数,植物营养物量进行了打分(我自己乱打的分,略了)

权重结果含氧量PH值细菌总个数植物营养物量
含氧量1
PH值1
细菌总个数1
植物营养物量1

那么我们在代码中添加: # 加入权重的部分

 

上图也说了,我们也可以把权重加在标准化处理完成后的矩阵上,而不是距离公式上,结果几乎相同。 

 *熵权法对TOPSIS模型的修正

之前说过层次分析法判断矩阵的确定有很强的主观性

熵权法是一种客观赋权方法

依据的原理: 指标的变异程度越小,所反映的信息量也越少,其对应的权值也应该越低。

(客观 = 数据本身就可以告诉我们权重)

(一种极端的例子:对于所有的样本而言,这个指标都是相同的数值, 那么我们可认为这个指标的权值为0,即这个指标对于我们的评价起不到任何帮助)

度量信息量的大小

小例子: 

小红和小明是两个高中生,小明学习很差,小红学习很好,高考结束后二人都考上了清华。对于小红大家觉得这很正常,而小明考上了清华这就不一样了,这里面包含的信息量就非常大。

这个例子告诉我们: 

越有可能发生的事情,信息量越少, 越不可能发生的事情,信息量就越多。

那么我们怎么衡量事情发生的可能性大小?

概率

信息熵的定义 

对于熵权法而言, 信息熵越大,信息量越小。因为我们关注的是已有的信息。

信息熵越大,说明它的值越大,能给你补充的信息量就越大,说明已有的信息量越小。

熵权法的计算步骤

1.  判断输入的矩阵中是否存在负数,如果有则要重新标准化到非负区间

我们前面所学,标准化得到Z

z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^{n}}x_{ij}^{2}}

本次我们需要去判断矩阵中是否存在负数(本身就是极大型),如果存在,则需要对X使用另一种标准化方法

\widetilde{z}_{ij} = \frac{x_{ij}-min\begin{Bmatrix} x_{1j},x_{2j},...,x_{nj} \end{Bmatrix}}{max\begin{Bmatrix} x_{1j},x_{2j},...,x_{nj} \end{Bmatrix}-min\begin{Bmatrix} x_{1j},x_{2j},...,x_{nj} \end{Bmatrix}}

2. 计算第j项指标下第i个样本所占的比重,并将其看作相对熵计算中用到的概率。

此时我们有了非负矩阵 Z,计算概率P:

p_{ij}=\frac{\widetilde{z}_{ij}}{\sum_{i=1}^{n}\widetilde{z}_{ij}}

注:这个还有上面和下面的公式都是固定列(指标)对所有行(对象)进行计算,即每一列所有的数据。 

3. 计算每个指标的信息熵,并计算信息效用值,并归一化得到每个指标的熵权。

对于第j个指标而言,其信息熵的计算公式为:

e_{j}=-\frac{1}{\ln n}\sum_{i=1}^{n}p_{ij}ln(p_{ij})  

定义: 0log0=0

熵权法背后的原理

我们可以用指标的标准差来衡量样本的变异程度,指标的标准差越大,其信息熵越小。

四、代码实现

题目:评价下表中20条河流的水质情况。

注:含氧量越高越好;PH值越接近7越好;细菌总数越少越好;植物性营养物量介于10‐20之间最佳,超 过20或低于10均不好

我们先将其指标正向化,再标准化再计算得分归一化,啪,就完成了。

ps: 下面代码可以设计得更智能一些,比如加入个input让你输入需要正向化的列是多少、正向化的方法是什么、是否加入权重、加入的权重又是多少,输入是否有误... 不过我觉得没必要。 

import numpy as np
import pandas as pddata = pd.read_excel('20条河流的水质情况数据.xlsx')
matrix = data.loc[:, '含氧量(ppm)':].values# matrix第一列是极大型指标 我们对第二三四列进行正向化
# 注:正向化的公式不唯一,大家也可以结合自己的数据进行适当的修改。# 正向化类,这里返回拷贝后的result,也可以直接在原矩阵上进行修改。
class Index_calculation:def __init__(self, array):# 初始化指标序列self.array = array# 极小型 --> 极大型def samll_to_big(self):max_num = max(self.array)result = max_num - self.array# result = 1/self.arrayreturn result# 中间型 --> 极大型def middle_to_big(self, best):M = max(abs(self.array - best))result = 1 - abs(self.array - best) / Mreturn result# 区间型 --> 极大型def interval_to_big(self, a, b):M = max([a - min(self.array), max(self.array) - b])result = self.array.copy()result[result < a] = 1 - (a - result[result < a]) / Mresult[(a < result) & (result < b) | (result == a) | (result == b)] = 1result[result > b] = 1 - (result[result > b] - b) / Mreturn resultif __name__ == '__main__':# PH值越接近7越好col_2 = matrix[:, 1]# 细菌总数越少越好col_3 = matrix[:, 2]# 植物性营养物量介于10‐20之间最佳,超过20或低于10均不好。col_4 = matrix[:, 3]# 正向化matrix[:, 1] = Index_calculation(col_2).middle_to_big(7)matrix[:, 2] = Index_calculation(col_3).samll_to_big()matrix[:, 3] = Index_calculation(col_4).interval_to_big(10, 20)# 标准化for i in range(4):matrix[:, i] = matrix[:, i] / np.sqrt(sum(matrix[:, i] ** 2))# 求出 x与最大值的距离 和 x与最小值的距离D_big = np.sqrt(sum((max(matrix[:, i]) - matrix[:, i]) ** 2 for i in range(4)))D_small = np.sqrt(sum((min(matrix[:, i]) - matrix[:, i]) ** 2 for i in range(4)))# 得到未归一化前的得分s = D_small / (D_big + D_small)# 得分归一化fina_res = s / sum(s)

我们可以画图看一下这几条河流得分:

import matplotlib.pyplot as plt
%matplotlib inlineplt.rcParams['font.sans-serif']=['SimHei'] 
plt.rcParams['axes.unicode_minus']=False x = data['河流'].values
y = fina_resfig = plt.figure(figsize = (9,6))
plt.title('标题',fontsize = 15)
plt.xlabel('x轴',fontsize = 12)
plt.ylabel('y轴',fontsize = 12)
plt.ylim(0,max(y)*1.1)
plt.axhline(min(y),linestyle='--',color = 'grey')
plt.axhline(max(y),linestyle='--',color = 'orange')
plt.bar(x,y,color = 'lightblue',width = 0.6,linewidth = 0.5,edgecolor = 'r',tick_label = [a for a in x])# 最后一个参数加不下 都是下面显示abcd
plt.show()

可以看到河流K得分最高,N得分最低。

*熵权法加权

一些写法看个人喜好,还有一些正向化及标准化方法不唯一。 

import numpy as np
import pandas as pddata = pd.read_excel('20条河流的水质情况数据.xlsx')
matrix = data.loc[:, '含氧量(ppm)':].values# 熵权法求权重weights
def get_weights(matrix):p = np.empty_like(matrix)for j in range(m):p[:, j] = matrix[:, j] / np.sum(matrix[:, j])e = np.empty(m)for j in range(m):array = p[:, j][p[:, j] != 0]  # 0*log0 = 0 我们直接把0去掉e[j] = -1 / np.log(n) * np.sum(array * np.log(array))d = 1 - eweights = d / np.sum(d)return weights# matrix第一列是极大型指标 我们对第二三四列进行正向化
# 注:正向化的公式不唯一,大家也可以结合自己的数据进行适当的修改。
# 正向化类,这里返回拷贝后的result,也可以直接在原矩阵上进行修改。
class Index_calculation:def __init__(self, array):# 初始化指标序列self.array = array# 极小型 --> 极大型def samll_to_big(self):max_num = max(self.array)result = max_num - self.array# result = 1/self.arrayreturn result# 中间型 --> 极大型def middle_to_big(self, best):M = max(abs(self.array - best))result = 1 - abs(self.array - best) / Mreturn result# 区间型 --> 极大型def interval_to_big(self, a, b):M = max([a - min(self.array), max(self.array) - b])result = self.array.copy()result[result < a] = 1 - (a - result[result < a]) / Mresult[(a < result) & (result < b) | (result == a) | (result == b)] = 1result[result > b] = 1 - (result[result > b] - b) / Mreturn resultif __name__ == '__main__':# PH值越接近7越好col_2 = matrix[:, 1]# 细菌总数越少越好col_3 = matrix[:, 2]# 植物性营养物量介于10‐20之间最佳,超过20或低于10均不好。col_4 = matrix[:, 3]# 正向化matrix[:, 1] = Index_calculation(col_2).middle_to_big(7)matrix[:, 2] = Index_calculation(col_3).samll_to_big()matrix[:, 3] = Index_calculation(col_4).interval_to_big(10, 20)n,m = matrix.shape# 标准化if np.min(matrix) < 0:for j in range(4):matrix[:, j] = (matrix[:, j] - np.min(matrix[:, j])) / (np.max(matrix[:, j]) - np.min(matrix[:, j]))else:for j in range(m):matrix[:, j] = matrix[:, j] / np.sqrt(sum(matrix[:, j] ** 2))# 调用函数 熵权法求解权重weights = get_weights(matrix)# 求出 x与最大值的距离 和 x与最小值的距离D_big = np.sqrt(sum(weights[j] * (max(matrix[:, j]) - matrix[:, j]) ** 2 for j in range(m)))D_small = np.sqrt(sum(weights[j] * (min(matrix[:, j]) - matrix[:, j]) ** 2 for j in range(m)))# 得到未归一化前的得分s = D_small / (D_big + D_small)# 得分归一化fina_res = s / sum(s)

之前我们没有加权值,如今这四个指标的权重为:

array([0.14106059, 0.22667469, 0.44093378, 0.19133094])

同样,我们再画图看一下添加权重后20条河流的得分:

还是K最好,N最差。 

ps:求权重的方法不同、权重加在数据上或者距离公式上、正向化及标准化方法不同,都可能导致最终结果有一点变换。

下期预告:灰度关联分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49918.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【关于ChatGPT的30个问题】17、ChatGPT是否能够应用于不同类型的文本?/ By 禅与计算机程序设计艺术

17、ChatGPT是否能够应用于不同类型的文本? 目录 17、ChatGPT是否能够应用于不同类型的文本?

AI产品经理的工作内容及面试准备

ChatGPT的爆火&#xff0c;让人看到了新的生产力发展方向&#xff0c;微软也因此放弃了元宇宙&#xff0c;ALL In AI&#xff0c;各大巨头和资本也陆续进入&#xff0c;誓要打造中国版的ChatGPT&#xff0c;并觉得人工智能可以改写现有的程序应用场景&#xff0c;带来新的生产力…

分享一个图片展示特效

先上效果图&#xff1a; 备注&#xff1a;这个效果图太大了&#xff0c;压缩了一下效果有点不咋好看。感兴趣同学们可以自己运行代码看一下&#xff0c;保证不会失望~ 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta cha…

如何用手机快捷设计品牌宣传的海报图片和视频

随着移动互联网的普及&#xff0c;越来越多的品牌宣传企划活动方案&#xff0c;都需要用到各种精美的海报图片和宣传视频&#xff0c;这对企划工作来说是一个耗时又耗精力的工作&#xff0c;并且还不一定能做出风格迥异的作品。 得益于人工智能技术的进步&#xff0c;现在很多移…

推荐3款超好用的海报设计软件!

在现代社会&#xff0c;海报设计已经成为了一种非常重要的视觉传达方式。如果你需要制作一个引人注目的海报&#xff0c;但却没有设计师的技能和经验&#xff0c;那么在线海报设计图片软件就是你的最佳选择。下面我们将介绍 5 款最受欢迎的在线海报设计图片软件&#xff0c;它们…

使用QQ邮箱无法收到Github上发送的验证码?

设置域白名单 打开QQ邮箱&#xff0c;点击【设置】点击【反垃圾】点击【设置域白名单】在input框中输入【github.com】添加

欧洲站收到邮件:无法完成您的收款账户的所有权验证,该怎么办?

在注册欧洲站的过程中,有没有卖家收到过这样的邮件 然后你点开后台,在账户信息(account info)页面,就能看到相关提示

无法收到邮箱验证码怎么办

我们在注册&#xff0c;找回密码的时候&#xff0c;如果没有收到验证码&#xff0c;可以尝试以下几种方式解决 使用QQ邮箱注册 现在常用的邮箱应该是QQ邮箱&#xff0c;所以后台也是使用QQ邮箱给大家发送验证码&#xff0c;所以大家的接受邮箱也最后是qq邮箱 在垃圾箱中查找邮箱…

除了ChatGPT,还有哪些国内可用的强悍AI工具?

2023年&#xff0c;GPT带动着整个AI行业大卷特卷&#xff0c;市面上出现了越来越多能将AI功能发挥到极致的强悍工具&#xff0c;今天就给各位推荐5款用了后悔不早用的AI软件或工具。 第一款 AI助手 - OpenAI ChatGPT侧边栏 Edge安装 &#xff5c;Chrome安装 由于ChatGPT给出…

做Android开发,你后悔了吗?

前言 从去年、前年开始&#xff0c;大大小小的公司开始接二连三的出现裁员。找工作的好时候已经一去不复返了&#xff0c;不像前几年学个安卓、ios 培训班&#xff0c;出来轻松找个 2 万块钱的工作。 我是20年学的Android开发&#xff0c;没有赶上好的时候&#xff0c;也没有在…

iOS SKAN 4.0 时代的广告追踪优化:掌握隐私友好的营销策略

作者&#xff1a;ChatGPT(GPT-4) & iHTCboy 摘要&#xff1a;本文深入探讨了苹果的 SKAdNetwork&#xff08;SKAN&#xff09;以及它与 App Tracking Transparency&#xff08;ATT&#xff09;政策之间的关联&#xff0c;阐明了广告跟踪的限制以及如何在保护用户隐私的同时…

基于Android的外卖App系统设计

基于Android的外卖App系统设计 摘要 随着智能手机的快速普及&#xff0c;智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务&#xff0c;一种高效的办法就是将应用系统的功能拓展到手机终端上&#xff0c;让手机能够通过移动网以及互联网访…

OLLVM环境搭建-Ubuntu20.04

OLLVM环境搭建-Ubuntu20.04 注&#xff1a;这里没有使用配置NDK环境 什么是混淆和OLLVM&#xff1f; 关于OLLVM介绍这里极力推荐直接看这个Deobfuscation: recovering an OLLVM-protected program 早在1997年&#xff0c;学术界就开始了代码混淆的研究。目前使用最广泛的混…

Android音乐播放器的设计与实现

课程设计报告 实习名称 课程设计2 设计题目 Android音乐播放器的设计与实现 目录 摘要11 1 引言22 2 可行性分析22 2.1 技术可行性22 2.2 经济可行性33 2.3 管理可行性33 2.4 可行性分析结论33 3 系统需求分析44 3.1 功能分析44 3.2 数据流程分析44 4 系统功能设计66 4.1 播放器…

A Survey on Multimodal Large Language Models

本文是LLM系列的文章之一&#xff0c;主要是讲解多模态的LLM。针对《A Survey on Multimodal Large Language Models》的翻译。 多模态大语言模型的综述 摘要1 引言2 概述3 方法3.1 多模态指令调整3.1.1 引言3.1.2 前言3.1.3 模态对齐3.1.4 数据3.1.5 模态桥接3.1.6 评估 3.2 …

云存储,为 AI 创新提速

当下&#xff0c;如火如荼的 AI 大模型对算力和数据存储提出了更高的要求。在 6 月 1 日结束的“阿里云峰会粤港澳大湾区”上&#xff0c;阿里云智能资深产品专家彭亚雄在 AI 新范式与商业创新论坛上做了《云存储&#xff0c;为 AI 创新提速》的主题分享。彭亚雄认为&#xff0…

聊聊 AI 平台存储方案和选型

最近火爆全网的 ChatGPT 再次带来一股 AI 热潮。 过去的五年&#xff0c;AI 快速发展并应用到很多领域中。作为一家存储企业&#xff0c;我们也感受到了 AI 行业的活力&#xff0c;和我们交流团队中&#xff0c;AI 企业越来越多&#xff0c;有自动驾驶、蛋白质结构预测、量化投…

详解 Redisson 分布式限流的实现原理

本文分享自华为云社区《详解 Redisson 分布式限流的实现原理》&#xff0c;作者&#xff1a; xindoo。 我们目前在工作中遇到一个性能问题&#xff0c;我们有个定时任务需要处理大量的数据&#xff0c;为了提升吞吐量&#xff0c;所以部署了很多台机器&#xff0c;但这个任务在…

AI日报|哈佛“AI教授”即将上线;首个生成式AI技能专业证书来了;电话推销员很烦?AI帮你“制裁”他

今日值得关注的人工智能新动态&#xff1a; 将GPT-4用在课程设计中 哈佛大学“AI教授”即将上线 微软推出首个生成式AI技能专业证书 纽约州议会&#xff1a;伤害或羞辱他人的deepfake是非法的 阿诺德施瓦辛格&#xff1a;《终结者》中的AI已成现实 AI诊断“老年痴呆”&…

甜品网站界面

最开始就是logo部分和导航栏部分 logo部分就是用的div里面写img然后给浮动就可以了 第二个是导航栏部分 用的也是无序标签 代码如下&#xff1a; 轮播图部分 没做出来效果 甜蜜约会品牌简介 红色框框以外的我用的是 div img 和 p标签做的 这些很简单 就不展示代码了 红色边…