Mi programa contiene esto

print("hyy")
print(self.reward, self.gamma, max_val)
print(self.reward + (self.gamma * max_val))

Aquí self.reward es -0.25, self.gamma es 1 y max_val es 0.

Cuando ejecuto el código, mi salida es:

hyy
-0.25 1 0.0
    ans = goal.value_iteration()
  File "/Users/mac/Desktop/MDP-master/value.py", line 237, in value_iteration
    print(self.reward + (self.gamma * max_val))
TypeError: can't multiply sequence by non-int of type 'float'

Las primeras dos líneas se compilan con éxito. ¿Por qué no la tercera línea de mi bloque de código? ¿Cómo puedo solucionar esto?

1
Maqruis1 16 oct. 2018 a las 16:22

2 respuestas

La mejor respuesta

self.gamma no es numérico. Muy probablemente, es una cuerda. Aquí hay un ejemplo mínimo que reproduce su error:

a, b, c = -0.25, '1', 0.0

a + b * c  # TypeError: can't multiply sequence by non-int of type 'float'

Se define multiplicar una cadena por un entero, p. 'a' * 2 == 'aa', pero no es multiplicar una cadena por un flotante como 0.0. Para convertir a numérico, puede usar float:

a + float(b) * c  # -0.25
2
jpp 16 oct. 2018 a las 13:25

¿Estás seguro de que todas las variables son del tipo correcto? Intenta usar print(type(value))

Para determinar este hecho. Siempre puedes usar el flotador de lanzamiento (variable)

0
Bartosz Lipiński 16 oct. 2018 a las 13:27