Prédire

POST http://localhost:5000/v2/clients/{client-id}/predict

Obtient l’action suivante recommandée à partir d’un cerveau exporté Bonsai .

Paramètres de chemin d’accès

client-id

Type Longueur min. Longueur maximale Utilisation
Chaîne UTF-8 1 64 OBLIGATOIRE

Chaîne définie par l’utilisateur qui identifie de façon unique le client qui effectue la demande d’API. Les demandes suivantes du même client doivent utiliser la même chaîne d’ID.

Important

Les ID client doivent être des chaînes HTTP valides qui peuvent être incluses dans le cadre de l’URL du point de terminaison. Par exemple, les caractères spéciaux tels que / et les espaces blancs doivent être correctement encodés en URL en tant que %2F (pour / ) ou %20 (pour les espaces).

Réponses HTTP

Response code Type de réponse Description
200 (OK) Objet réponse pertinent POST appel terminé avec succès
400 (Demande incorrecte) Message d’erreur Une erreur dans la demande est incorrecte
500 (erreur interne) Message d’erreur Une exception non gérée s’est produite
503 (service non disponible) Message d’erreur Les contraintes de ressources ont empêché le cerveau de répondre

Objet Requête

Bonsai personnalise le modèle JSON suivant lors de l’exportation en fonction du fichier INKLING utilisé pour l’apprentissage du cerveau.

{
  'state': [ 
    {
      'StateName1' : 'StateData1',
      'StateName2' : {
        'Subfield1': 'SubData1'
        'Subfield2': 'SubData2'
      },
      'StateName3' : 'StateData3',
      ...
      'StateNameN' : 'StateDataN',
    }
  ]
}

Jetons de modèle

par jeton Description
StateName FACULTATIF. Nom de la variable d’entrée du concept.

Corps de la demande

state
OBLIGATOIRE

Données d’État que le cerveau doit utiliser pour son évaluation. Si vous choisissez de fournir des données d’État sans le champ nom d’état correspondant, les valeurs doivent être répertoriées dans le même ordre que celui dans lequel elles apparaissent dans le fichier INKLING correspondant.

Objet Réponse

Bonsai personnalise le modèle JSON suivant lors de l’exportation en fonction du fichier INKLING utilisé pour l’apprentissage du cerveau.

{
  'concepts': {
    'ConceptName1': {
      'action' : {
        'ActionName1' : 'Result1',
        'ActionName2' : 'Result2',
        'ActionName3' : {
          'Subfield1': 'SubResult1',
          'Subfield2': 'SubResult2'
        },
        ...
        'ActionNameN' : 'ResultN'
      },
    },
    'ConceptName2': {
      'action': [Result1, Result2, ... ResultN]
    }
    ...
    'ConceptNameN': {
      'action' : {
        'ActionName1' : 'Result1'
      }
    }
  }
}

Jetons de modèle

par jeton Description
ActionName Nom de la variable de sortie du concept.
ConceptName Nom de INKLING concept .

Response body

concepts

Résultats d’action du Bonsai cerveau, organisés par nom de concept.


action

Liste de variables de sortie du concept et données de résultat correspondantes.

Exemples

Supposons que vous ayez les définitions suivantes dans votre fichier INKLING :

inkling "2.0"

using Math
using Goal

# Pole and track constants
const TrackLength = 0.5
const MaxPoleAngle = (12 * Math.Pi) / 180

# State info from the simulator
type SimState {
  CartPosition: number,         # Position of cart in meters
  CartVelocity: number,         # Velocity of cart in meters/sec
  PoleAngle: number,            # Current angle of pole in radians
  PoleAngularVelocity: number, # Angular velocity of the pole in radians/sec
}

# Possible action results
type SimAction {
  # Amount of force in x direction to apply to the cart.
  Command: number<-1 .. 1>
}

# Define a concept graph with a single concept
graph (input: SimState): SimAction {
  concept BalancePole(input): SimAction {
    curriculum {
      source simulator (Action: SimAction): SimState {
        package "Cartpole"
      }

      # The objective of training is expressed as a goal with two
      # objectives: keep the pole from falling over and stay on the track
      goal (State: SimState) {
        avoid `Fall Over`:
          Math.Abs(State.pole_angle) in Goal.RangeAbove(MaxPoleAngle)
        avoid `Out Of Range`:
          Math.Abs(State.cart_position) in Goal.RangeAbove(TrackLength / 2)
      }
    }
  }
}
import requests
import json

# General variables
url = "http://localhost:5000"
predictPath = "/v2/clients/{clientId}/predict"
headers = {
  "Content-Type": "application/json"
}

# Set a random UUID for the client.
# The same client ID will be used for every call
myClientId = str(uuid.uuid4())

# Build the endpoint reference
endpoint = url + predictPath.replace("{clientId}", myClientId)

# Set the request variables
requestBody = {
  "state": {
    "CartPosition": 3,
    "CartVelocity": 1.5,
    "PoleAngle": 0.75,
    "PoleAngularVelocity": 0.1
  }
}

# Send the POST request
response = requests.post(
            endpoint,
            data = json.dumps(requestBody),
            headers = headers
          )

# Extract the JSON response
prediction = response.json()

# Access the JSON result: full response object
print(prediction)

# Access the JSON result: all concepts
print(prediction['concepts'])

# Access the JSON result: specific field
print(prediction['concepts']['BalancePole']['action']['Command'])