2023年美国大学生数学建模竞赛
E题 光污染
原题再现:
背景
光污染被用来描述任何过度或不良地使用人造光。我们所说的一些光污染现象包括光侵入、过度照明和光杂波。在大城市,这些现象最容易被观测到的是太阳落山后天空中的一道辉光; 然而,它们也可能出现在更偏远的地区。
光污染会改变我们对夜空的看法,对环境产生影响,并影响我们的健康和安全。例如,植物的成熟可能会延迟或加速,野生动物的迁徙模式也会受到影响。过多的人造光可能会混淆我们的昼夜节律,导致睡眠质量差,可能还会导致身心健康问题。人造光引起的眩光可能会导致一些机动车事故。
社区官员或当地团体可能会实施干预策略,以减轻光污染的负面影响。然而,人造光既有正面影响,也有负面影响,会以不同的方式影响不同的地点。例如,为了避免上面列出的光污染的负面影响,一些社区选择低光社区,这反过来可能会导致犯罪率上升。光污染的影响可能取决于该地区的发展水平、人口、生物多样性、地理和气候等因素。因此,评估任何干预策略的影响程度和潜在影响都必须针对特定的地点进行调整。
要求
COMAP的照明控制任务(ICM)正在努力提高人们对光污染影响的认识,并制定干预策略以减轻这些影响。为了支持这一ICM工作,您的任务是解决测量和减轻光污染的影响各个地点,包括人类和非人类的问题。具体来说,你应该:
制定一个广泛适用的度量标准,以确定一个地点的光污染风险水平。
应用您的度量标准,并在以下四个不同类型的地点上解释其结果:
受保护的土地位置,
一个农村社区,
一个郊区社区,
一个城市社区。
描述解决光污染的三种可能的干预策略。讨论实施每一项策略的具体行动,以及这些行动对光污染总体影响的潜在影响。
选择你的两个地点,并使用你的指标来确定你的干预策略对每个地方最有效。讨论所选的干预策略如何影响该地点的风险水平。
最后,对于你确定的一个地点及其最有效的干预策略,制作一页纸的传单来推广该地点的策略。
整体求解过程概述(摘要)
光污染是人类活动造成的一种环境污染,对野生动物、植物和人类健康产生负面影响。随着城市化和工业化的不断发展,光污染问题日益严重。因此,评估和改善光污染的风险水平尤为重要。
首先,我们收集了来自55个地区的十个指标的数据,并将这十个指标分为三个领域:光、社会和自然。然后结合层次分析法、熵权法和变异系数法计算这些指标的组合权重,构建光污染指数(LPI)公式,进而构建LSN评价模型。 最后,我们使用模糊聚类分析将所有位置分为四类,从而将光污染水平分为四类。
其次,我们选择纽约市,贝尔维尤,塞多纳和黄石国家公园作为每种位置类型的代表。使用LSN评估模型,他们的LPI被计算为35.55,41.33,76.94,84.18。因此,它们的光污染水平分别获得I级,II级,III级,IV级。
第三,提出了3种干预策略及其具体行动,构建了PIA-NN模型,研究了具体行动对光污染效应的潜在影响。这三种干预策略是:降低人造光强度,加强宣传教育,扩大植被面积。我们结合斯皮尔曼相关系数和BP神经网络模型,定量反映了三种干预策略对光污染效应的“潜在影响”。
接下来,我们选择了两个具有代表性的地区,塞多纳和纽约市,使用PIA-NN模型和LSN评估模型探索三种干预策略对两个地区光污染水平的影响。结果表明,对于这两个区域,降低人造光强度是降低光污染风险水平的最有效干预策略。
最后,我们将选择纽约市作为活动的地点,并围绕其相应的最有效的干预策略设计精美的传单。
模型假设:
假设1:在本文中,LPI(光污染指数)被定义为一个地区光环境的得分。LPI值越高,该地区的光污染水平越低。
理由:一个地区的光污染水平越低,该地方的光环境越好。根据人们的使用习惯,更好的调味品通常对应于更高的分数。
假设2:在相关性分析中,仅保留相关性强的因子,删除相关性较小的因子。
理由:影响光污染的因素很复杂。如果将相关性较小的因素也考虑在内,将使研究结果不那么重要,甚至可能产生误导性的结论。
假设3:假设从互联网收集的数据是真实可靠的。
理由:在研究光污染的过程中,我们选择了世界上最典型的区域,因此保证了数据的广泛性;所有数据均来自官网,因此数据的可靠性得到了保证。
问题重述:
光污染最早由天文学家在1950年代提出[1],随着城市化和经济发展的加速,对夜间照明的需求逐渐增加。同时,人类在夜间过度使用或使用人造光源,从而消除了自然的黑暗。根据国际黑暗天空协会的数据,全球超过80%的人口生活在受光污染影响的地区,[2]欧洲和美国约99%的城市居民无法在夜间观测银河系。[3]在全球许多大城市,夜间的亮度甚至可以达到白天的水平。
光污染问题正日益影响人们的日常生活,包括工作和休闲活动。它不仅破坏了我们夜空的美丽景色,而且对人类健康、安全和生态环境产生了负面影响。根据天文学研究,没有光污染的晴朗天空可以显示大约7颗星星,而在大城市中只能看到000-20颗星星。夜间过多的人造光会扰乱生物体的昼夜节律,导致睡眠质量差和失眠率升高。此外,人眼过度暴露在光线下会损害视网膜和虹膜,导致视力急剧下降。光线充足的城市街道上的远光灯也会对街道对面的行人或司机造成短暂的“视觉损失”,从而导致交通事故的发生率更高。此外,光污染还会改变植物的生长周期并影响野生动物的迁徙模式。
因此,光污染问题需要全球紧急关注和监管
我们的工作
首先,我们提出了光-社会-自然(LSN)评估模型,用于评估一个地点的光污染风险水平。具体而言,该模型考虑了许多反映光污染的指标。根据这些指标,我们建立了二级评估系统。考虑到不同的方法有其局限性,指标的权重由层次分析法(AHP)、熵权重法(EWM)和变异系数法(CVM)的组合确定。我们选择了全球55个代表性地点,并根据相关数据计算其光污染指数,并通过模糊聚类确定不同程度的光污染。
其次,我们选择了美国四种不同类型的地点,并使用LSN评估模型计算了每个地点的光污染指数,并结合当地实际情况分析了结果的合理性。
然后,在我们之前构建的指标中,我们提出了三种干预策略,同时考虑到其可行性。对于每种干预策略,都提供了具体的行动。我们还建立了一个PIA-NN模型来分析这些行为对光污染影响的潜在影响。结果将被可视化并分析其合理性。
此后,我们从任务2中选择两个地点作为研究对象,并使用PIA-NN模型和LSN评估模型分析三种干预策略对其光污染风险水平的影响,并进行相应的分析。
最后,我们将选择纽约市作为活动的地点,并围绕其相应的最有效的干预策略设计精美的传单。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:(代码和文档not free)
import urllib2
import numpy
from sklearn import datasets, linear_model
from math import sqrt
import matplotlib.pyplot as plt
#read data into iterable
target_url = "red.csv"
data = urllib2.urlopen(target_url)
xList = []
labels = []
names = []
firstLine = True
for line in data:
if firstLine:
names = line.strip().split(";")
firstLine = False
else:
#split on semi-colon
row = line.strip().split(";")
#put labels in separate array
labels.append(float(row[-1]))
#remove label from row
row.pop()
#convert row to floats
floatRow = [float(num) for num in row]
xList.append(floatRow)
#divide attributes and labels into training and test sets
indices = range(len(xList))
xListTest = [xList[i] for i in indices if i%3 == 0 ]
xListTrain = [xList[i] for i in indices if i%3 != 0 ]
labelsTest = [labels[i] for i in indices if i%3 == 0]
labelsTrain = [labels[i] for i in indices if i%3 != 0]
xTrain = numpy.array(xListTrain); yTrain = numpy.array(labelsTrain); xTest = numpy.array(xListTest); yTest = numpy.array(labelsTest)
alphaList = [0.1**i for i in [0,1, 2, 3, 4, 5, 6]]
rmsError = []
for alph in alphaList:
wineRidgeModel = linear_model.Ridge(alpha=alph)
wineRidgeModel.fit(xTrain, yTrain)
rmsError.append(numpy.linalg.norm((yTest-wineRidgeModel.predict(xTest)), 2)/sqrt(len(yTest)))
print("RMS Error alpha")
for i in range(len(rmsError)):
print(rmsError[i], alphaList[i])
#plot curve of out-of-sample error versus alpha
x = range(len(rmsError))
plt.plot(x, rmsError, 'k')
plt.xlabel('-log(alpha)')
plt.ylabel('Error (RMS)')
plt.show()
#Plot histogram of out of sample errors for best alpha value and scatter plot of actual versus predicted
#Identify index corresponding to min value, retrain with the corresponding value of alpha
#Use resulting model to predict against out of sample data. Plot errors (aka residuals)
indexBest = rmsError.index(min(rmsError))
alph = alphaList[indexBest]
wineRidgeModel = linear_model.Ridge(alpha=alph)
wineRidgeModel.fit(xTrain, yTrain)
errorVector = yTest-wineRidgeModel.predict(xTest)
plt.hist(errorVector)
plt.xlabel("Bin Boundaries")
plt.ylabel("Counts")
plt.show()
plt.scatter(wineRidgeModel.predict(xTest), yTest, s=100, alpha=0.10)
plt.xlabel('Predicted Taste Score')
plt.ylabel('Actual Taste Score')
plt.show()