【D题完整论文】2024美赛完整论文+代码参考(无偿分享)

D题:资源可用性和性别比例


第一问:

要求考虑五大湖的以及各个河流的水位在一年当中的最优位置,并且要考虑到多个不同主体的需求。那么在这个当中不同主体的需求也是不同的,有的希望是稳定的高,有的希望是稳定的低,这里需要注意一点,也就是在这个问题当中,不同的人群,它究竟是对河流的水位提出的需求,还是对湖水的水位提出的需求。

从这个图里面我们也可以看出来不同的人它的需求点也是不同的,比如这里的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

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值