2023年电工杯数学建模
B题 人工智能对大学生学习影响的评价
原题再现:
人工智能简称AI,最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。
2016年,人工智能AlphaGo 4:1战胜韩国围棋高手李世石,期后波士顿动力公司的人形机器人Atlas也展示了高超的感知和控制能力。2022年,人工智能绘画作品《太空歌剧院》获得了美国科罗拉多州博览会艺术比赛一等奖。2023年3月16日,百度公司推出人工智能新产品“文心一言”。
为抢抓人工智能发展的重大战略机遇,国务院2017年发布《新一代人工智能发展规划》,指出科技强国要发挥人工智能技术的力量,部署构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国。教育部2018年发布《教育信息化2.0行动计划》,提出实现“智能化领跑教育信息化”行动指南,强调发展智能教育。
人工智能的发展对社会各个层面均有不同程度的影响,也影响着大学生的学习。为了解人工智能在不同侧面对大学生学习的影响情况,我们设计了调查问卷,详见附件1,调查反馈结果详见附件2。
请根据你们感兴趣的某个侧面,结合附件1和附件2所给出的数据,建立相应的数学模型,分析人工智能对大学生学习的影响,解决以下问题:
1.对附件2中所给数据进行分析和数值化处理,并给出处理方法;
2.根据你们对数据的分析结果选取评价指标,从优先级、科学性、可操作性等方面论述其合理性,并构建评价指标体系;
3.建立数学模型,评价人工智能对大学生学习的影响,给出明确、有说服力的结论;
4.根据调查问卷的数据,结合你们对人工智能的了解、认知和判断,以及对未来人工智能发展的展望,写一份人工智能对大学生学习影响的分析报告,可以包括但不限于积极或消极的影响。
附件1.调查问卷
附件2.调查数据
整体求解过程概述(摘要)
随着科技的高速发展以及社会的进步,人工智能的迅速发展,正在对各个领域的发展产生深远的影响,并不断深入人们的工作以及生活中,在人们的工作与生活中扮演着不可或缺的角色。为了解人工智能在不同侧面对大学生学习的影响情况,通过问卷调查的形式获取大学生对人工智能工具的调查的一个情况,通过数字化处理得到了数据量化的一个情况,以此来选取人工智能相关的二级指标以及三级指标以此来选取评价指标,人工智能对大学生学习生活的影响指标,构建多综合评价体系,建立熵权法的方法确定各级指标的权重,并利用 AHP 计算以此来量化相应的数值,建立群决策模型对最终得分进行计算,最终总结人工智能对学生学习的影响。
问题一:对附件 2 的数值按照学生的不同属性,如年级的不同以及专业的不同作为分类指标以此对数据进行统计,分别对各个类别的指标进行统计,从而得到各个指标的数据量化值,详见附件 3 中。通过处理后的数据可以得出,大多数学生对网络信息是愿意接受,并从使用时长来看大学生对人工智能的使用处于较为依赖的状态。
问题二:题中要求评价人工智能对学生学习的影响,需先定义指标筛选原则中的优先级、科学性、可操作性,其次选择对网络的接触程度 A1,对于学习软件的接触程度A2,网络资料的接触熟悉程度 A3,对于人工智能学习工具的使用意愿 A4,对人工智能学习工具的认可度 A5,对人工智能学习工具与传统教学的对比和认可 A6 作为二级指标。随后使用皮尔逊相关性分析检验变量之间是否存在共线性,发现各指标并无相关性,六个指标可以使用
问题三:根据上述综合评价体系,使用熵权法进行计算六个指标的六个熵权,其次利用层次分析法对指标进行赋权,结合两次赋权后的权重与量化政策的对应指标数值相乘得到各学生的得分,建立群决策模型,将权重及数据代入模型进行计算样本分数,求解不同类型学生综合分数平均值,根据最终结果进行判断所受人工智能影响大的因素,
问题四:根据上述问题的结论,描述了当前人工智能对大学生的影响,并从附件 2的数据通过学生对人工智能的依赖性、期待、适用范围,是否有利学习以及优缺点等方面进行分析;并结合现有的信息对人工智能的利弊进行了一系列的阐述,最后根据利弊结合社会各方面提出干预意见,形成了人工智能对大学生学习影响的分析报告。
模型假设:
1.假设所有调查问卷样本结果真实有效
2.假设样本之间存在相互独立性
问题分析:
问题一问题分析
当今社会,人工智能的不断发展对社会各个层面均有不同程度的影响,也影响着大学生的学习。人工智能的飞速发展之下,不断的深入学习,可以培养许多传统教育上不能学习到的东西,不同的方面对于大学生学习有不一样的影响。由于个体的不同可能会对研究结果产生相对的影响。对于问卷调查结果回收后,首先应需要对题目中附件 2 中所收集的问卷调查结果进行整体的数据分析以及判断数据的合理性,可信性,如是否存在异常值或者有缺失值出现,亦或是出现了存在问卷调查结果中出现了全为单一选项的问卷或出现随意答卷和一人多卷或者多人同一答案问卷的情况出现。
综合上述的分析,对于数据的预处理操作如下:
1.缺失值的处理方法
通过使用 Excel 软件对题目附件 2 中的各项数据进行缺失值的数据统计。对于缺失值而言,在本文中附件来自于学校学生的情况调查,不同于社会性调查结果存在差异性过大的情况。考虑的数据可能会对整体数据的影响并不采用直接将数据进行删除的方法,本文采用众数法进行处理,相对于各项指标相似的同学而言,缺失值对应的指标大概率是相同的情况,使用相同的指标进行填充为众数法。由于大数据统计调查结果为学生的可靠性更高,在此使用众数法来进行补充缺失值使其完整,避免删除样本数据和避免破坏数据的完整性,降低误差,使得数据的其他指标更具有意义。
2.异常值的处理方法
通过使用 Excel 软件对题目附件 2 中进行异常值的判断,对附件 2 中每行数据进行逻辑分析,对于调查问卷的结果中是否存在前后逻辑矛盾的数据视为异常值认为该数据失真,对于该数据的处理采用与缺失值相同的方法众数法进行处理,避免删除样本数据和避免破坏数据的完整性,降低误差,使得数据的其他指标更具有意义。通过上述方法进行完成对于题中数据的预处理操作,完成操作后,数据经检验无异常。
问题二问题分析
由于需要构建一个关于人工智能对大学生学习的影响的评价体系, 所以需要对不同数据样本做区分处理, 才能做出不同的评价结果。
首先, 我们需要把原始问卷中所有的题目进行分类, 30 个题目主要属于如下四个方面的考察:
1. 基础信息了解:
题号:1、2、3、4、25.
2. 上网习惯了解:
题号: 5、6、7、8、9、10、11、23.
3. 对人工智能的了解程度:
题号: 12、13、14、15、16、24.
4. 对人工智能的未来建议:
题号: 17、18、19、20、21、22、26、27、28、29、30
上述所有问题的问卷调查结果均不具有正向化的特征, 也不具有标准化的性质. 无法直接通过使用上面的问卷调查结果之间构建评价模型。因此, 接下来将利用上述调查结果进行新的指标构造。
指标的筛选方式
考虑到需要从优先级、科学性、可操作性等方面, 进行指标的筛选操作, 并论述选取的合理性,首先需进行对上述三个方面的相关定义。
优先级:定义优先级为选择的评价指标应当与大学生学习和人工智能的影响密切相关,并且具有重要性和优先级,以反映人工智能对学习的关键影响因素。
科学性:我们定义科学性为评价指标应基于科学理论或已有研究的基础上选取,以确保评价体系的科学性和可信度。
可操作性:评价指标应具有可操作性,即可以通过收集数据进行量化和测量,以便进行定量分析和比较。
问题三问题分析
为了能够对被量化的人工智能对大学生学习的影响进行评价,需要对各项指标的重要程度做出分析,即给出各个指标的权重。本文采用群决策方法,先使用熵权法对各个指标进行赋权,再利用层次分析法对指标赋权,最后结合两次赋权的权重与量化政策的对应指标数值相乘得到各学生的得分。
问题四问题分析
根据上诉评价模型并从多角度书写一份人工智能对大学生学习影响的分析报告。首先进行对人工智能在多领域的发展和应用背景的介绍,阐述人工智能对大学生学习的相对影响。接着说明调查问卷数据的分析,分别阐述人工智能对大学生学习的积极性和消极性,并结合现有信息以及对于人工智能的认知说明对于未来人工智能的看法。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
部分程序如下:
import math
import random
random.seed(0)
def rand(a,b): #随机函数
return (b-a)*random.random()+a
def make_matrix(m,n,fill=0.0):#创建一个指定大小的矩阵
mat = []
for i in range(m):
mat.append([fill]*n)
return mat
#定义sigmoid函数和它的导数
def sigmoid(x):
return 1.0/(1.0+math.exp(-x))
def sigmoid_derivate(x):
return x*(1-x) #sigmoid函数的导数
class BPNeuralNetwork:
def __init__(self):#初始化变量
self.input_n = 0
self.hidden_n = 0
self.output_n = 0
self.input_cells = []
self.hidden_cells = []
self.output_cells = []
self.input_weights = []
self.output_weights = []
self.input_correction = []
self.output_correction = []
#三个列表维护:输入层,隐含层,输出层神经元
def setup(self,ni,nh,no):
self.input_n = ni+1 #输入层+偏置项
self.hidden_n = nh #隐含层
self.output_n = no #输出层
#初始化神经元
self.input_cells = [1.0]*self.input_n
self.hidden_cells= [1.0]*self.hidden_n
self.output_cells= [1.0]*self.output_n
#初始化连接边的边权
self.input_weights = make_matrix(self.input_n,self.hidden_n) #邻接矩阵存边权:输入层->隐藏层
self.output_weights = make_matrix(self.hidden_n,self.output_n) #邻接矩阵存边权:隐藏层->输出层
#随机初始化边权:为了反向传导做准备--->随机初始化的目的是使对称失效
for i in range(self.input_n):
for h in range(self.hidden_n):
self.input_weights[i][h] = rand(-0.2 , 0.2) #由输入层第i个元素到隐藏层第j个元素的边权为随机值
for h in range(self.hidden_n):
for o in range(self.output_n):
self.output_weights[h][o] = rand(-2.0, 2.0) #由隐藏层第i个元素到输出层第j个元素的边权为随机值
#保存校正矩阵,为了以后误差做调整
self.input_correction = make_matrix(self.input_n , self.hidden_n)
self.output_correction = make_matrix(self.hidden_n,self.output_n)
#输出预测值
def predict(self,inputs):
#对输入层进行操作转化样本
for i in range(self.input_n-1):
self.input_cells[i] = inputs[i] #n个样本从0~n-1
#计算隐藏层的输出,每个节点最终的输出值就是权值*节点值的加权和
for j in range(self.hidden_n):
total = 0.0
for i in range(self.input_n):
total+=self.input_cells[i]*self.input_weights[i][j]
# 此处为何是先i再j,以隐含层节点做大循环,输入样本为小循环,是为了每一个隐藏节点计算一个输出值,传输到下一层
self.hidden_cells[j] = sigmoid(total) #此节点的输出是前一层所有输入点和到该点之间的权值加权和
for k in range(self.output_n):
total = 0.0
for j in range(self.hidden_n):
total+=self.hidden_cells[j]*self.output_weights[j][k]
self.output_cells[k] = sigmoid(total) #获取输出层每个元素的值
return self.output_cells[:] #最后输出层的结果返回
#反向传播算法:调用预测函数,根据反向传播获取权重后前向预测,将结果与实际结果返回比较误差
def back_propagate(self,case,label,learn,correct):
#对输入样本做预测
self.predict(case) #对实例进行预测
output_deltas = [0.0]*self.output_n #初始化矩阵
for o in range(self.output_n):
error = label[o] - self.output_cells[o] #正确结果和预测结果的误差:0,1,-1
output_deltas[o]= sigmoid_derivate(self.output_cells[o])*error#误差稳定在0~1内
#隐含层误差
hidden_deltas = [0.0]*self.hidden_n
for h in range(self.hidden_n):
error = 0.0
for o in range(self.output_n):
error+=output_deltas[o]*self.output_weights[h][o]
hidden_deltas[h] = sigmoid_derivate(self.hidden_cells[h])*error
#反向传播算法求W
#更新隐藏层->输出权重
for h in range(self.hidden_n):
for o in range(self.output_n):
change = output_deltas[o]*self.hidden_cells[h]
#调整权重:上一层每个节点的权重学习*变化+矫正率
self.output_weights[h][o] += learn*change + correct*self.output_correction[h][o]
#更新输入->隐藏层的权重
for i in range(self.input_n):
for h in range(self.hidden_n):
change = hidden_deltas[h]*self.input_cells[i]
self.input_weights[i][h] += learn*change + correct*self.input_correction[i][h]
self.input_correction[i][h] = change
#获取全局误差
error = 0.0
for o in range(len(label)):
error = 0.5*(label[o]-self.output_cells[o])**2 #平方误差函数
return error
def train(self,cases,labels,limit=10000,learn=0.05,correct=0.1):
for i in range(limit): #设置迭代次数
error = 0.0
for j in range(len(cases)):#对输入层进行访问
label = labels[j]
case = cases[j]
error+=self.back_propagate(case,label,learn,correct) #样例,标签,学习率,正确阈值
def test(self): #学习异或
cases = [
[0, 0],
[0, 1],
[1, 0],
[1, 1],
] #测试样例
labels = [[0], [1], [1], [0]] #标签
self.setup(2,5,1) #初始化神经网络:输入层,隐藏层,输出层元素个数
self.train(cases,labels,10000,0.05,0.1) #可以更改
for case in cases:
print(self.predict(case))
if __name__ == '__main__':
nn = BPNeuralNetwork()