国赛 · 2026E
SEM 广告投放策略
依据搜索广告的历史展现、点击与转化数据,在预算约束下确定关键词出价与预算分配,使投放效果最优。
2 个关联模型拆解这道题 →
多方案多指标排序,尤其已经通过 AHP 或熵权法拿到权重之后,需要给出综合排序结果。
依赖见代码开头;示例在自己的 Python 环境运行,页面不执行代码。用于理解方法,正式参赛请补齐数据检验与误差分析。
# 依赖: numpy
import numpy as np
def topsis(X, w, benefit=None):
X, w = np.asarray(X, float), np.asarray(w, float)
if X.ndim != 2 or min(X.shape) < 1 or not np.isfinite(X).all():
raise ValueError('输入必须是非空、有限的二维矩阵')
if w.shape != (X.shape[1],) or not np.isfinite(w).all() or np.any(w < 0) or w.sum() <= 0:
raise ValueError('权重须与列数对应、非负且总和为正')
benefit = np.ones(X.shape[1], bool) if benefit is None else np.asarray(benefit, bool)
if benefit.shape != (X.shape[1],):
raise ValueError('指标方向数量与列数不一致')
norm = np.linalg.norm(X, axis=0)
Z = X / np.where(norm > 0, norm, 1) # 全零列保持为 0
Z[:, ~benefit] *= -1
V = Z * (w / w.sum())
d_best = np.linalg.norm(V - V.max(axis=0), axis=1)
d_worst = np.linalg.norm(V - V.min(axis=0), axis=1)
total = d_best + d_worst
# 所有方案无差异时约定同分 0.5,不制造 NaN 或虚假的排序。
return np.divide(d_worst, total, out=np.full(len(X), .5), where=total > 1e-12)
print(topsis([[9, 3], [7, 5], [6, 8]], w=[.6, .4], benefit=[True, False]).round(4))
依据搜索广告的历史展现、点击与转化数据,在预算约束下确定关键词出价与预算分配,使投放效果最优。
由太阳位置与镜场几何推导光学效率与输出功率,优化镜场布局与镜面尺寸参数以提高单位面积输出。