赞
踩
第一问:
要求考虑五大湖的以及各个河流的水位在一年当中的最优位置,并且要考虑到多个不同主体的需求。那么在这个当中不同主体的需求也是不同的,有的希望是稳定的高,有的希望是稳定的低,这里需要注意一点,也就是在这个问题当中,不同的人群,它究竟是对河流的水位提出的需求,还是对湖水的水位提出的需求。
从这个图里面我们也可以看出来不同的人它的需求点也是不同的,比如这里的shipping companies。他们主要是对河流的水位需要希望尽可能的高。还有这个人群是希望旁边的一条河能够尽量的低。环境学家则是希望河水的水位是呈现出周期变化。recreational bottles and fishing boats,他主要是希望在湖水的水位呢是比较稳定的一周期。而氢能发电则更加的需要是水的流量比较大。
在处理好数后,我们就可以开始着手进行建模的工作了,对于这一个建模问题呢,我们要搞清楚水位和水流量之间的关系。那么水位本质上反映的是湖水的体积,我们可以看到。附件当中所提供的弧的截面图,我们可以把它抽象成一个圆锥体。啊,利用圆锥体去估算这个湖的体积。当然你也可以把它看成是抛物,面对它去求体积,这样子的话呢会复杂一些,我们如果为了简单起见可以使用。
为了保证流量之间的一个平衡,我们就需要去对网络流去进行一个构建。那么解决网络最大流,事实上就可以保证网络当中每条河的流量是最大的,这恰恰满足了氢能发电这样一个主体的需求。
- import pandas as pd
- import numpy as np
- data=pd.read_excel("Problem_D_Great_Lakes.xlsx")
- a=np.array(data)[6:,1:]
- lakes=['Lake Superior','Lake Michigan and Lake Huron','Lake St. Clair','Lake Erie','Lake Ontario']
- lakedata={}
- for name in lakes:
- data=pd.read_excel("Problem_D_Great_Lakes.xlsx",sheet_name=name)
- a=np.array(data)[6:,1:]
- lakedata[name]=a.flatten()
- lakedata=pd.DataFrame(lakedata)
- lakedata.index=pd.date_range(end='20230101',periods=276,freq='1M')
- lakedata.to_excel("湖水水位数据.xlsx")
- rivers=["St. Mary's River","St. Clair River","Detroit River","Niagara River","Ottawa River","St. Lawrence River"]
- riverdata={}
- for name in rivers:
- data=pd.read_excel("Problem_D_Great_Lakes.xlsx",sheet_name=name)
- a=np.array(data)[6:,1:]
- riverdata[name]=a.flatten()
- riverdata=pd.DataFrame(riverdata)
- riverdata.index=pd.date_range(end='20230101',periods=276,freq='1M')
- riverdata.to_excel("河水流量数据.xlsx")
- import networkx as nx
- import matplotlib.pyplot as plt
- graph=nx.Graph()
- graph.add_nodes_from([0,1,2,3,4,5,6])
- graph.add_weighted_edges_from([(0,1,1473),(1,2,4714),(2,3,5170),(3,4,6690),(4,5,1924),(4,6,6541)])
- nx.draw(graph,with_labels=True)
- plt.show()
- data=pd.read_excel("整合数据.xlsx")
- data=data.replace('---',pd.NA)
- data.dropna()
问题二:
针对该问题,开发算法时,考虑湖泊的自然补给(如降雨和雪融水)和人为排放(如水库排放)。算法需要能够动态调整,以响应气候变化和人为干预的不确定性。同时,考虑数据的实时更新,确保算法能够及时反映最新的水文情况。
问题二当中需要维持不同的河流以及不同湖泊的水位,那么本质上是在第一问的基础上做了一个扩展,需要针对不同的时间序列,在每一个时间出去求解一次优化问题。使得水位能够维持住的限制条件就包括相邻两个湖泊存在高度差,流量不得超过高度之差,这一部分的体积限制。这是一个比较基础的扩展,事实上,只要把问题一能够解答出来,问题二也是可以迎刃而解的。
最后答案如图所示:
- import pandas as pd
- import numpy as np
- data=pd.read_excel("Problem_D_Great_Lakes.xlsx")
- a=np.array(data)[6:,1:]
- lakes=['Lake Superior','Lake Michigan and Lake Huron','Lake St. Clair','Lake Erie','Lake Ontario']
- lakedata={}
- for name in lakes:
- data=pd.read_excel("Problem_D_Great_Lakes.xlsx",sheet_name=name)
- a=np.array(data)[6:,1:]
- lakedata[name]=a.flatten()
- lakedata=pd.DataFrame(lakedata)
- lakedata.index=pd.date_range(end='20230101',periods=276,freq='1M')
- lakedata.to_excel("湖水水位数据.xlsx")
- rivers=["St. Mary's River","St. Clair River","Detroit River","Niagara River","Ottawa River","St. Lawrence River"]
- riverdata={}
- for name in rivers:
- data=pd.read_excel("Problem_D_Great_Lakes.xlsx",sheet_name=name)
- a=np.array(data)[6:,1:]
- riverdata[name]=a.flatten()
-
- from scipy.optimize import minimize
- cons=({'type':'ineq','fun':lambda x:x[0]+x[5]},
- {'type':'ineq','fun':lambda x:x[1]-x[5]+x[6]},
- {'type':'ineq','fun':lambda x:x[2]-x[6]+x[7]},
- {'type':'ineq','fun':lambda x:x[3]-x[7]+x[8]},
- {'type':'ineq','fun':lambda x:x[4]-x[8]+x[9]+x[10]})
- def L(x):
- return sum(x[6:])+x[0]*4/(np.pi*244*244)
- a=np.array([1521.74,4785.54,5400.02,6570,1881,7560.59,183.09,176.04,175.08,174.40,74.62])-1
- b=np.array([1473.32,4714.75,5170.65,6690,1924,6541.19,183.01,175.99,175.02,174.39,74.80])+1
- bound=[(min(a[i],b[i]), max(a[i],b[i])) for i in range(len(a))]
- res=minimize(L,x0=a,bounds=bound,constraints=cons,method='SLSQP')
- data=data.dropna()
- data=data.drop(['Unnamed: 0'],axis=1)
- data=data.reset_index(drop=True)
- data
- result=[]
-
针对该问题,通过历史数据(如2017年的数据)进行模拟测试,评估新算法在不同水文条件下的表现。比较新算法预测的水位与实际记录的差异,分析算法在极端气候事件(如干旱或洪水)中的表现。
问题三,需要探讨针对2017年的数据去进行灵敏性分析,并且探究通过你所给出的优化模型,它与实际数据哪个更好,你这个时候需要不遗余力的去说明你的数据会比问题3的数据要更好,比实际情况更好,
- ## 第三问论证好处,评价类模型
- def AHP(A):
- m=len(A) #获取指标个数
- n=len(A[0])
- RI=[0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51]
- R= np.linalg.matrix_rank(A) #求判断矩阵的秩
- V,D=np.linalg.eig(A) #求判断矩阵的特征值和特征向量,V特征值,D特征向量;
- list1 = list(V)
- B= np.max(list1) #最大特征值
- index = list1.index(B)
- C = D[:, index] #对应特征向量
- CI=(B-n)/(n-1) #计算一致性检验指标CI
- CR=CI/RI[n]
- if CR<0.10:
- print("CI=", CI.real)
- print("CR=", CR.real)
- print('对比矩阵A通过一致性检验,各向量权重向量Q为:')
- sum=np.sum(C)
- Q=C/sum #特征向量标准化
- print(Q.real) # 输出权重向量
- return Q.real
- else:
针对该问题,研究算法对环境变化的响应能力,特别是在极端天气条件下,如持续降雨、极端低温导致的冰堵。考虑这些因素如何影响水位和流量,以及算法是否能够有效预测和调节这些变化。
首先对于降雨湖泊,从降雨当中可以得到水量补充,这一水量补充与湖泊的表面积有关。湖水的面积乘以雨水的密度,事实上就等于它所获得的降水量补充在第一问的模型里面,我们除了流进流出的一个损失以外,还需要去加上天空降雨给他进行的水量补充,重新去修正我们的优化类模型。
对于冬季结冰湖泊的流量会减小,那么水流量减小的状况之下,我们可以在原有基础之上去成一个比例系数。也就是在结冰以后,水的流通性会怎么变?这一个比例系数我们可以分别探究当系数为0.1、 0.05、 0.01是他们的变化趋势。
- ## 第三问论证好处,评价类模型
- def AHP(A):
- m=len(A) #获取指标个数
- n=len(A[0])
- RI=[0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51]
- R= np.linalg.matrix_rank(A) #求判断矩阵的秩
- V,D=np.linalg.eig(A) #求判断矩阵的特征值和特征向量,V特征值,D特征向量;
- list1 = list(V)
- B= np.max(list1) #最大特征值
- index = list1.index(B)
- C = D[:, index] #对应特征向量
- CI=(B-n)/(n-1) #计算一致性检验指标CI
- CR=CI/RI[n]
- if CR<0.10:
- print("CI=", CI.real)
- print("CR=", CR.real)
- print('对比矩阵A通过一致性检验,各向量权重向量Q为:')
- sum=np.sum(C)
- Q=C/sum #特征向量标准化
- print(Q.real) # 输出权重向量
- return Q.real
- else:
- print("对比矩阵A未通过一致性检验,需对对比矩阵A重新构造")
- return 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。