前言
'全球校园人工智能算法精英大赛'是江苏省人工智能学会举办的面向全球具有正式学籍的全日制高等院校及以上在校学生举办的算法竞赛。其中的算法巅峰赛属于产业命题赛道,这是第 3 赛季,这次优化题的主题是'碳中和'。

题目描述
给你 N 个任务和 M 台服务器,需要决定:
- 哪些任务要执行
- 每个执行的任务分配到哪台服务器
核心约束
- 功耗约束 每台服务器的实际总功耗 ≤ 该服务器的功耗上限
- 热量约束 每台服务器的实际承受总热量 ≤ 该服务器的热量阈值
- 热量传导规则 服务器排成一排,相邻服务器会互相传导热量。
热量计算方式: 服务器 p 承受的热量 = 服务器 p 任务的热量总和 + 左邻热量和 × K + 右邻热量和 × K 注:左右两侧服务器的特殊情况,非环,且没有传递性。
核心目标
在满足所有限制条件下,最大化总收益。
输入数据
第一行
N M K
N:任务数量(1-4000) M:服务器数量(1-800) K:热量传导系数(0.0-1.0)
任务数据(N 行,每行 3 个数字)
收益 功耗 热量
服务器数据(M 行,每行 2 个数字)
功耗上限 热量阈值
数据输出
a_1, a_2, a_3, …, a_n
其中 $a_i \in [0, M]$,0: 该任务 i 不执行,1-M: 该任务 i 分配到几号服务器。
Sample
输入
3 2 1.0 10 3 4 8 4 3 5 2 2 5 7 7 8
输出
1 2 0
思路分析
该问题属于带约束的多维度资源分配优化问题,是组合优化问题。
该问题可以视为二维费用的 0-1 多重背包的变形问题。
高分思路
贪心策略
- 任务 task 按照收益从高到低排序
- 按需为每个 task 寻找第一个满足约束限制的服务器 server 节点,进行分配
# task 按收益从高到低排序
tasks.sort(key=lambda x: -x.val)
# 遍历每个任务
for task in tasks:
for server in servers:
server.satisfy(task):
task -> server



