前面已经分享过一个仿真项目,但是基于policy gradient方法实现的,考虑到许多人从零到一实现DQN方法有点难度,所以这次分享一个基于DQN实现的仿真项目,非常简单。
这里之所以简单主要得益于它是用pytorch实现的,而pytorch各个版本之间差异不是非常大,可以互用。
这里没有之前那么复杂的建模,首先是任务类
class Task(object):
# 任务类
def __init__(self, jobID, index, CPU, RAM, disk, runtime, status):
import time
self.parent = []
self.child = []
self.jobID = jobID
self.index = index
self.CPU = CPU
self.RAM = RAM
self.disk = disk
self.status = status # -1: rejected, 0: finished, 1: ready, 2: running
self.runtime = runtime
self.ddl = time.time() + self.runtime * 5
self.endtime = 0
然后构建DAG,因为云计算中的任务大多是具有关联性的,是有向无环图
class DAG(object):
def __init__(self, fname, num_task):
self.fname = fname
# 任务数量
self.num_task = num_task
self.job = []
self.task = []
def readfile(self):
# 读取任务数据
num_task = 0
with open(self.fname, 'r') as f:
task = []
for line in f:
if line[0] == 'J':
if len(task) != 0:
self.job.append(task)
task = []
else:
info = list(line.split(',')