国赛 · 2026E
SEM 广告投放策略
依据搜索广告的历史展现、点击与转化数据,在预算约束下确定关键词出价与预算分配,使投放效果最优。
2 个关联模型拆解这道题 →
指标数据完整,希望权重由数据自身的离散程度客观决定,常与 TOPSIS 组合使用。
依赖见代码开头;示例在自己的 Python 环境运行,页面不执行代码。用于理解方法,正式参赛请补齐数据检验与误差分析。
# 依赖: numpy
import numpy as np
def entropy_weight(X, benefit=None):
X = np.asarray(X, dtype=float)
if X.ndim != 2 or X.shape[0] < 2 or X.shape[1] < 1 or not np.isfinite(X).all():
raise ValueError('需要至少两个方案和一个指标,且数据必须有限')
benefit = np.ones(X.shape[1], dtype=bool) if benefit is None else np.asarray(benefit, bool)
if benefit.shape != (X.shape[1],):
raise ValueError('指标方向数量与列数不一致')
span = np.ptp(X, axis=0)
active = span > 1e-12
if not active.any():
raise ValueError('所有指标均为常量,无法从差异中确定熵权')
Xn = (X - X.min(axis=0)) / np.where(active, span, 1)
Xn[:, ~benefit] = 1 - Xn[:, ~benefit]
P = (Xn + 1e-12) / (Xn + 1e-12).sum(axis=0, keepdims=True)
divergence = np.maximum(0, 1 + (P*np.log(P)).sum(axis=0) / np.log(len(X)))
divergence[~active] = 0 # 无区分度的常量指标不获得权重
if divergence.sum() <= 1e-12:
raise ValueError('差异不足以稳定确定熵权')
return divergence / divergence.sum()
print('权重 =', entropy_weight([[1, 10], [2, 20], [3, 12]], benefit=[True, False]).round(4))
依据搜索广告的历史展现、点击与转化数据,在预算约束下确定关键词出价与预算分配,使投放效果最优。
用摄像头采集的骨骼关键点数据判断学生体测动作是否规范,建立评分模型并给出辅助判定流程。