2023 “华为杯”研赛C题,建模解析,小鹿学长带队指引全代码文章与思路

在这里插入图片描述

问题重述

问题一:在大规模创新类竞赛中,如何设计最佳的评审专家分配方案,确保每份作品都由足够多的不同评审专家进行独立评审,以最大程度提高评审结果的一致性和可比性?考虑到3000支参赛队和125位评审专家,以及每份作品需要由5位专家评审。

问题二:针对大规模创新类竞赛,标准分评审方案可能存在不适用的问题,因为不同评审专家评审的作品集合通常只有小部分重叠。请选择两种或两种以上的评审方案,并利用提供的竞赛数据,分析评审专家的原始成绩、调整后的成绩分布特点,然后比较这些方案的优劣,最终设计一个更适合大规模创新类竞赛的标准分计算模型。

问题三:大规模创新类竞赛的特点是创新性,评审专家对作品的评分可能存在较大差异(极差),特别是在高分段作品中。请探讨两阶段评审方案相对于不分阶段评审的优劣,分析两阶段评审成绩和极差的整体变化,并建立一个极差模型,以处理非高分段但极差较大的作品,使评审更具科学性。

问题四:针对“创新类”竞赛,设计一个全面的评审模型,考虑如何优化评审流程并提高评审结果的准确性。同时,讨论如何利用提供的数据来研究和解决这一问题,以及提出改进现有评审方案的具体建议,包括需要收集哪些额外的数据。

问题一

解决问题一需要建立一个数学模型来优化评审专家的交叉分发方案。首先,我们可以定义一些符号和参数:

  • N N N:评审专家的数量,这里是125。
  • M M M:作品的数量,这里是3000。
  • K K K:每份作品需要被评审的专家数量,这里是5。
  • X i j X_{ij} Xij:表示评审专家 i i i是否被分配给作品 j j j,如果分配了则为1,否则为0。这是一个二进制变量。
  • C i j C_{ij} Cij:表示专家 i i i和作品 j j j之间的可比性指标,可以是一致性分数或其他度量。
  • Y i j Y_{ij} Yij:表示作品 j j j的总得分,由于多位专家评审,可以考虑对其进行平均得分。

下面是建立模型的思路:

  1. 目标函数:我们的目标是最小化交叉评审的次数,同时最大化评审结果的一致性。可以构建以下目标函数:

    Minimize  Z = ∑ i = 1 N ∑ j = 1 M X i j ⋅ C i j \text{Minimize } Z = \sum_{i=1}^{N}\sum_{j=1}^{M} X_{ij} \cdot C_{ij} Minimize Z=i=1Nj=1MXijCij

    这个目标函数表示了交叉评审的总次数,其中 X i j X_{ij} Xij 表示是否分配了专家 i i i 给作品 j j j C i j C_{ij} Cij 表示专家 i i i 和作品 j j j 之间的可比性。

  2. 约束条件:我们需要添加一些约束条件来确保模型的合理性和可行性。以下是一些可能的约束条件:

    • 每份作品必须由 K K K 位专家评审:

      ∑ i = 1 N X i j = K , ∀ j = 1 , 2 , … , M \sum_{i=1}^{N} X_{ij} = K, \quad \forall j=1,2,\ldots,M i=1NXij=K,j=1,2,,M

    • 每位专家可以同时评审多个作品:

      ∑ j = 1 M X i j ≤ 1 , ∀ i = 1 , 2 , … , N \sum_{j=1}^{M} X_{ij} \leq 1, \quad \forall i=1,2,\ldots,N j=1MXij1,i=1,2,,N

    • 专家之间的交叉评审不能超过一定限制:

      ∑ j = 1 M X i j ⋅ X i k ≤ 上限 , ∀ i , k = 1 , 2 , … , N , i ≠ k \sum_{j=1}^{M} X_{ij} \cdot X_{ik} \leq \text{上限}, \quad \forall i,k=1,2,\ldots,N, i \neq k j=1MXijXik上限,i,k=1,2,,N,i=k

      这个约束可以控制交叉评审的数量。

  3. 可比性度量:需要确定 C i j C_{ij} Cij 的具体计算方法,这可能需要依赖于实际的可比性度量,例如一致性分数、相关性系数等。

  4. 求解方法:使用整数线性规划(Integer Linear Programming,ILP)等数学优化方法来求解目标函数。这将为每位专家分配作品,并确保约束条件得到满足。

  5. 模型评估:完成模型求解后,需要对最终的评审专家分配方案进行评估。可以考虑模拟实验或交叉验证,以检验方案的有效性和可行性。

pip install pulp
import pulp

# 定义问题
prob = pulp.LpProblem("ExpertAllocation", pulp.LpMinimize)

# 定义变量,X[i][j]表示专家i是否被分配给作品j
N = 125  # 评审专家数量
M = 3000  # 作品数量
K = 5  # 每份作品需要评审的专家数量
X = pulp.LpVariable.dicts("ExpertAssignment", ((i, j) for i in range(N) for j in range(M)), 0, 1, pulp.LpBinary)

# 定义目标函数,最小化交叉评审次数
# 假设可比性度量C[i][j]为随机值,这里简化为0和1之间的随机数
import random
C = {(i, j): random.random() for i in range(N) for j in range(M)}
prob += pulp.lpSum(X[i, j] * C[i, j] for i in range(N) for j in range(M))

# 添加约束条件
# 每份作品必须由K位专家评审
for j in range(M):
    prob += pulp.lpSum(X[i, j] for i in range(N)) == K

# 每位专家可以同时评审多个作品
for i in range(N):
    prob += pulp.lpSum(X[i, j] for j in range(M)) <= 1

问题二

问题二的建模思路是研究不同的评审方案,以及设计一个新的标准分计算模型,考虑到大规模创新类竞赛中不同评审专家对作品的评审差异。以下是问题二的具体建模思路:

  1. 分析现有评审方案:首先,选择两种或两种以上的现有评审方案,例如方案(1)和方案(2)或其他你认为合适的方案。你需要分析每种方案的评审结果,包括每位专家的原始成绩、成绩的分布特点以及最终的总成绩计算方法。这将有助于了解现有方案的优势和不足之处。

  2. 建立新的标准分计算模型:考虑到不同评审专家评审的作品集合通常只有小部分重叠,你需要设计一个新的标准分计算模型,以更好地反映评审结果的一致性和可比性。这个模型可以基于以下思路:

    • 评审专家权重:为每位评审专家分配一个权重,反映其评审的可信度或经验。这可以基于专家的历史评审表现来确定。

    • 原始成绩的调整:使用权重和原始成绩来计算每位专家的调整得分。一个示例公式可以是:

      调整得分 i = 权重 i × 原始成绩 i \text{调整得分}_i = \text{权重}_i \times \text{原始成绩}_i 调整得分i=权重i×原始成绩i

    • 总得分计算:将所有专家的调整得分相加,以获得每份作品的总得分:

      总得分 j = ∑ i = 1 N 调整得分 i \text{总得分}_j = \sum_{i=1}^{N} \text{调整得分}_i 总得分j=i=1N调整得分i

    • 标准分计算:使用总得分来计算标准分,以便比较不同作品的表现。标准分的计算可以考虑到所有作品的总得分分布,以便更好地区分作品之间的差异。

  3. 比较不同方案:使用你设计的新标准分计算模型,对同一批作品进行评审,比较不同方案的结果。你可以考虑以下因素来评估方案的优劣:

    • 评审结果的一致性:不同专家对相同作品的评审是否更一致?
    • 评审结果的可比性:不同作品之间的评审结果是否更容易比较?
    • 评审时间和成本:新方案是否更有效或更经济?
  4. 模型调优:根据比较结果,可以进一步调整新标准分计算模型中的参数和权重,以优化评审方案。

评审专家的调整得分:

调整得分 i = 权重 i × 原始成绩 i \text{调整得分}_i = \text{权重}_i \times \text{原始成绩}_i 调整得分i=权重i×原始成绩i

总得分计算:

总得分 j = ∑ i = 1 N 调整得分 i \text{总得分}_j = \sum_{i=1}^{N} \text{调整得分}_i 总得分j=i=1N调整得分i

标准分计算(示例,可以根据实际情况调整):

标准分 j = 总得分 j − 平均总得分 标准差 \text{标准分}_j = \frac{\text{总得分}_j - \text{平均总得分}}{\text{标准差}} 标准分j=标准差总得分j平均总得分

import numpy as np

# 虚构的评审数据(示例)
num_experts = 125
num_works = 3000
num_reviews = 5

# 生成虚构的原始评审分数数据(示例)
original_scores = np.random.rand(num_experts, num_works)

# 问题二的第一种现有方案:去掉最高分和最低分,取平均分
def existing_method_1(scores):
    sorted_scores = np.sort(scores, axis=0)
    trimmed_scores = sorted_scores[1:-1, :]  # 去掉最高分和最低分
    average_scores = np.mean(trimmed_scores, axis=0)
    return average_scores

# 问题二的第二种现有方案:标准分
def existing_method_2(scores):
    mean_scores = np.mean(scores, axis=0)
    std_dev = np.std(scores, axis=0)
    standardized_scores = (scores - mean_scores) / std_dev
    return np.mean(standardized_scores, axis=0)

完整版的思路和代码看看我的专栏哦~
2023 “华为杯”研赛建模解析,小鹿学长带队指引全代码文章与思路- CSDN 博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值