2024华数杯国际赛B题高质量参考论文+所有小问数据代码+数据集整合

发布时间:2024年01月17日

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(完整版在文末)? ?ICMB题

该题目出题的难度与方向都与美赛?ICM?的题型高度相似,将本次竞赛当做美赛的?练手赛,个人认为是非常合适的一种选择。同时?28?号就可以出成绩,也可以在美赛前 实现查漏补缺,提前预祝大家比赛顺利,美赛都可以取得好成绩。下面,我们开始详细?的解读一下本次竞赛的?B?题。

B?题本次的难度远低于?A?题,这势必会导致?B?题的选题认识会比?A?题多很多,但?是比赛的最终成绩是获奖率。无论都是每个赛题选择人数多少,每个赛题获奖的人数都??50%,因此不存在选择人少的赛题好获奖这种情况,都是比例获奖。我可以保证跟着?本人的思路,获奖是没有任何问题的,至于能获得什么奖项,主要还是看对于每一问选?择的模型复杂度的高低以及队伍可视化的能力。基本每一问都会给两三种实现方式,上?中下三种实现方式,即使最简单的方式,也是可以保证获奖的。但是很难保证获得很好?的奖项。

数据收集

在正式开始题目之前必须明白,对于美赛这种?ICM?题目,很大程度的上的难点并不在?于题目本身而是,需要我们自行收集数据,由于大家之前没有自己找过数据,所以这一关会?难倒很多很多的人群。本团队会为大家收集一套完整的数据,供大家选择。至于选择这套数?据集中的何种数据,就因队伍而已,因此一千个队伍可能有一千种选择方式。所以,从一开?始的选择数据开始,大家就会各不相同。因此,无需担心查重率过高的问题。

本文目前,已经为大家收集了问题一和问题四的数据,如下所示。稍后也将为大家专门?收集关于光伏发电相关的数据,完成对于问题三四的数据收集。

1.2 Yeo-Johnson??转换

为了防止建立的模型过拟合以及提高模型的泛化能力,?需要对数据的分布情况进行?探索分析,力求保证数据集分布情况一致,首先将数据导入,运用?Python?判断每一列?数据的分布类型是否属于正态分布,本代码通过 SciPy ?库中的 stats.skew()?函数来 判断数据是否需要进行 Yeo-Johnson ?转换。Skewness(即偏度) 是衡量某一个样本数值?相对于平均数的偏离程度的统计量, 它可以用来描述数据的分布形态是否对称。偏度为?0 ?表示数据分布是对称的, 偏度大于 0??表示数据分布偏向右侧, 偏度小于?0??表示数据?分布偏向左侧。

问题三代码:

import gurobipy as gp
from gurobipy import GRB

def create_photovoltaic_model(P_values, G_values, C_b_values, C_o_values, A_values, B, total_available_land):
    # 创建模型
    model = gp.Model("MaxPhotovoltaicPower")

    # 决策变量
    N = {}
    for i in range(len(P_values)):
        N[i] = model.addVar(vtype=GRB.INTEGER, name=f"N_{i}")

    # 目标函数
    model.setObjective(gp.quicksum((P_values[i] * G_values[i] - C_b_values[i] - C_o_values[i]) * N[i] for i in range(len(P_values))), sense=GRB.MAXIMIZE)

    # 地理约束
    model.addConstr(gp.quicksum(A_values[i] * N[i] for i in range(len(P_values))) <= total_available_land, name="land_constraint")

    # 预算约束
    model.addConstr(gp.quicksum((C_b_values[i] + C_o_values[i]) * N[i] for i in range(len(P_values))) <= B, name="budget_constraint")

    return model, N

def solve_photovoltaic_model(model):
    # 求解模型
    model.optimize()

    # 输出结果
    if model.status == GRB.OPTIMAL:
        return True
    else:
        print("未找到最优解")
        return False

def get_optimal_solution(N):
    # 获取最优解
    optimal_N = {i: N[i].x for i in range(len(N))}
    optimal_Z = model.objVal
    return optimal_N, optimal_Z

def main():
    # 示例数据
    P_values = [0.1, 0.15, 0.12]
    G_values = [100, 120, 90]
    C_b_values = [2000, 2500, 1800]
    C_o_values = [100, 120, 80]
    A_values = [5000, 6000, 4500]
    B = 50000
    total_available_land = 20000

    # 步骤1: 创建模型
    model, N = create_photovoltaic_model(P_values, G_values, C_b_values, C_o_values, A_values, B, total_available_land)

    # 步骤2: 求解模型
    if solve_photovoltaic_model(model):
        # 步骤3: 获取最优解
        optimal_N, optimal_Z = get_optimal_solution(N)
        print("最优建设数量 (N):", optimal_N)
        print("最优总发电量 (Z):", optimal_Z)

if __name__ == "__main__":
    main()

2024华数杯B题五小问完整思路+四问数据代码+数据可视化图表

?

文章来源:https://blog.csdn.net/weixin_66003076/article/details/135657068
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。