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'])