【发布时间】:2020-09-06 08:44:57
【问题描述】:
我实际上有多个相关的问题。
我有以下课程:
class environment_step:
def __init__(self,solar,battery,allocation,G1,G2):
self.solar = solar
self.battery = battery
self.allocation = allocation
self.G1 = G1
self.G2 = G2
def step(self):
self.residual = self.solar+self.battery-self.allocation
self.reward = min(0,max(self.residual*self.G1,self.residual*self.G2))
self.cost = -self.reward
self.battery = max(0,self.residual)
return self.reward, self.cost, self.battery
我是这样使用的
reward = []
B = np.zeros(1)
allocation = np.ones(1)*12
G1 = np.ones(24)
G2 = np.ones(24)*2
solar = np.random.rand(24)
for t in range(24):
environment = environment_step(solar[t], B, allocation, G1[t], G2[t])
R, C, B = environment.step()
reward.append(R)
其中太阳能、电池、分配、G1 和 G2 是 numpy 数组。当我检查 R 时,如果它为 0,那么我只会得到 0,但对于不同于零的东西,我会得到 [[-2.114]] 或任何数字。为什么我得到的是那个而不是[-2.114]?
我使用不同的条目值多次运行环境,并将R 附加到列表奖励中。该列表将如下所示:
[0, 0, array([[-2.114]], dtype = float32), 0, array([[-1.324]], dtype = float32)]。我通过reward = torch.tensor(reward, dtype=torch.float32) 将该列表奖励转换为pytorch 张量。当列表以 0 开头时,如我展示的示例列表中所示,它工作得很好。但是,如果列表以非零开头,例如[array([[-2.114]], dtype =float32) 0, 0, 0, array([[-1.324]], dtype = float32)],则会收到错误TypeError: not a sequence。我怀疑问题是数组的双括号,但我不确定。这就是为什么我想在之前解决这个问题(上一段)。
尽管我正在使用火炬张量,但我认为问题发生在数组之前。那么,假设[1.2, 1.42, 3.13] 和[array([1.2], dtype=float32), array([1.42], dtype=float32), array([3.13], dtype=float32)] 之间有什么区别?甚至相同但带有双括号(我的情况)。我知道列表是通用的并且承认文本,而数组只承认数字,但从这里似乎还有更多,但我不确定。如有任何帮助,我将不胜感激!
编辑:我添加了一个最小的工作示例。
【问题讨论】:
-
为什么要投反对票?我在问一些明显的事情吗?我做了一些谷歌搜索,但并没有真正找到答案,我一直在我的代码上尝试不同的东西,但没有任何效果。
-
你能提供最小的工作示例吗? (我没有投反对票)。
-
运行
environment = ...时solar、battery、allocation、G1和G2的值是多少?
标签: python arrays list numpy pytorch