2021.11.23

 

完成了MADDPG的理论模型创建,针对actor-critic的创建有了清晰的了解。否定了之前的设计问题,之间设计的reward并不能让agent往整体更好的方向靠拢,忽略了整体的奖励。

确定了critic与actor的输入与输出,感觉critic的输入过于复杂,可能会出现不收敛的情况。想在考虑到整体的情况下减少critic的输入。

2021.11.25

阅读完MADDPG的环境和算法的代码,了解到大致的算法流程,对比自己的需求,最大的难点在于环境的创建。OpenAI采取的是动态小球的环境,还可以根据自己的要求改变。自己设计代码有如下问题:

问题一:如何根据需要创建对应的agent,并且确保每一个agent对应一个微服务

问题二:对于actor与critic的设计是否可以更清晰简洁

问题三:如何设计MADDPG的reward部分,完成reward的计算

问题四:如何设计环境,让环境与actor产生交互,时间步的设计也是问题

问题五:为什么这么多问题

2021.12.6

距离上次更新都过去10天了。。。搞了一周的开题,终于可以继续强化学习了。

写完了environment函数,environment函数是与环境的交互,修改起来还是比较方便,毕竟对于资源管理来说,状态的获取就是读文件,动作的执行就是采集信息的代码稍加改动。

init函数读取初始状态,将service做了几个对应的字典映射,reset函数重置环境,执行最大化配置就可完成,step函数先执行动作,后返回状态,计算reward,set_action函数执行动作。其他小函数都是简单的信息获取。

下一步要进行model创建了吧,看了一下model创建的代码,毫无头绪。。。

2021.12.7

完成了actor与critic网络的创建,对于actor网络,输入是agent自己的状态,经过两个含有20个参数的全连接层,最后经过tanh函数输出。critic网络输入所有agent的动作与状态(与原文略有改动),经过4*1,步长为3的卷积核处理,得到12*3的数组,再经过两个20的全连接层,最后输出预测的Q值。

感觉critic的设计在自己改写之后与原来相差很大,争取先跑起来试试吧,不收敛再按照原版修改。

2021.12.23

忘了更新进度,已经完成了训练部分的创建,并且采集到1w+的信息,开始跑代码。但是现在的准确率不理想,所以将模型以及训练过程向FIRM靠拢,毕竟FIRM也是基于DDPG实现的,有共同之处。训练速度较慢是个大问题,训练期间需要长时间的等待。

刚写完代码的时候,拿一条数据训练,发现输出一直不变,然后就调了2天,还以为是共享参数不更新,但是始终没想到一条数据怎么能完成训练。浪费了两天的时间。但是却因此终于明白了AC的网络结构。A的前一部分跟C的前一部分都是相同的全连接层,所以可以共享参数,所以Actor可以通过Q函数进行更新。

修改了很多细节,等训练结果理想之后再做个总结吧。