Calculateur de point de coin
Saisissez les coefficients de la fonction objectif et les sommets de la région réalisable pour voir lequel donne la plus grande valeur : pour 3x + 5y sur (0, 0), (0, 4), (3, 3) et (5, 0), c'est (3, 3), avec 24. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Objectif
- 3, 5
- Sommet optimal
- 3, 3
- Valeur objectif
- 24
- Indice
- 2
- Sommets évalués
- 4
Le calculateur de sommet optimal répond à la dernière étape de tout exercice de programmation linéaire : connaissant les coefficients de l'objectif et les sommets de la région réalisable, quel sommet maximise l'objectif, et quelle valeur atteint-il ? Un objectif linéaire sur un polytope convexe atteint toujours son optimum en un sommet : évaluer l'objectif en chaque sommet et garder le meilleur n'est donc pas une approximation, c'est la solution exacte. Vous envoyez le vecteur des coefficients et la liste des sommets ; le point d'accès calcule le produit scalaire en chaque sommet, applique une règle de départage déterministe et renvoie le sommet gagnant, sa valeur d'objectif et sa position dans votre liste. Il s'exécute en quelques millisecondes, ne conserve rien, et le même code tourne gratuitement dans votre navigateur sur cette page.
Pourquoi l'optimum est toujours un sommet
Le théorème fondamental de la programmation linéaire affirme que si un programme linéaire admet une solution optimale et que sa région réalisable possède au moins un sommet, alors un sommet est optimal. Un objectif linéaire se déplace par ensembles de niveau parallèles ; en poussant ces ensembles dans la direction d'amélioration, on finit par les plaquer contre un point extrême du polytope réalisable. C'est pourquoi les méthodes classiques — résolution graphique à deux variables, méthode du simplexe en dimensions supérieures — raisonnent exclusivement sur les sommets.
Si vous avez déjà énuméré les sommets de votre région réalisable, le travail restant est purement arithmétique : calculez c·x en chaque sommet et retenez le plus grand. Ce point d'accès fait exactement cela, avec une validation stricte pour qu'un sommet mal formé ou une dimension incohérente échoue bruyamment au lieu de corrompre silencieusement votre résultat. Comme il évalue chaque sommet, il vous indique aussi combien de candidats ont été comparés, ce qui est utile pour auditer une solution ou enseigner la méthode pas à pas.
Préparer les sommets à partir de vos contraintes
L'entrée est volontairement simple : un tableau d'objectif et un tableau de sommets, où chaque sommet est un tableau de nombres de même longueur que l'objectif. Obtenir ces sommets relève de vous — typiquement en intersectant des paires de droites de contrainte en deux dimensions, ou en lançant une routine d'énumération de sommets en dimensions supérieures. Chaque sommet envoyé doit être réalisable ; le point d'accès fait confiance à la liste fournie et ne revérifie pas les contraintes, car il ne les voit jamais.
Les égalités sont déterministes : quand deux sommets atteignent la même valeur maximale, celui qui apparaît en premier dans votre liste l'emporte, donc des appels répétés avec la même entrée renvoient toujours la même réponse, octet pour octet.
Lire le résultat et l'automatiser
L'index compte en pratique parce que les sommets portent souvent des étiquettes dans votre propre modèle — mélange machine A, portefeuille B — et la position permet de retrouver la réponse sans comparaison fragile de coordonnées. Les automatisations typiques incluent la notation de devoirs d'étudiants par rapport à une solution de référence, la vérification que l'optimum rapporté par un solveur correspond à une énumération indépendante des sommets, et l'évaluation de petits modèles d'ordonnancement ou de mélange où énumérer les sommets coûte moins cher que déployer un solveur LP complet.
Cas d’usage
Terminer un exercice graphique de PL
Après avoir trouvé à la main les sommets réalisables d'un problème à deux variables, confirmez lequel maximise le profit sans refaire l'arithmétique.
Recouper un solveur LP
Fournissez une liste de sommets énumérée indépendamment et l'objectif au point d'accès, puis vérifiez que l'optimum rapporté par le solveur correspond.
Noter des devoirs d'optimisation à grande échelle
Automatisez la comparaison entre les sommets soumis par l'étudiant et la réponse de référence, un appel déterministe par copie.
Questions fréquentes
Combien cela coûte-t-il ?
C'est aussi gratuit dans votre navigateur sur cette page — le même code s'exécute dans les deux cas.
Et si plusieurs sommets atteignent le même maximum ?
Le premier de votre liste l'emporte. La règle de départage est déterministe, donc une entrée identique produit toujours une réponse identique.
Vérifie-t-il que mes sommets satisfont les contraintes ?
Non. Il ne voit jamais vos contraintes — il fait confiance à la liste de sommets envoyée. La faisabilité doit être établie lors de l'énumération des sommets.
Quelles dimensions sont prises en charge ?
Toute dimension de 1 jusqu'à la limite documentée, tant que chaque sommet a exactement la même longueur que le tableau d'objectif.
Pourquoi l'optimum d'un programme linéaire est-il toujours sur un sommet ?
Parce qu'une fonction objectif linéaire s'améliore toujours dans une même direction : en la poussant aussi loin que la région réalisable le permet, on aboutit à un point extrême. Si une solution optimale existe et que la région a un sommet, l'un d'eux est optimal.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/math/corner-point \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"objective":[3,5],"vertices":[[0,0],[0,4],[3,3],[5,0]]}'const res = await fetch("https://api.kit.forhosting.com/math/corner-point", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"objective": [
3,
5
],
"vertices": [
[
0,
0
],
[
0,
4
],
[
3,
3
],
[
5,
0
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/corner-point",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"objective": [
3,
5
],
"vertices": [
[
0,
0
],
[
0,
4
],
[
3,
3
],
[
5,
0
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/corner-point", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"objective":[3,5],"vertices":[[0,0],[0,4],[3,3],[5,0]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"objective":[3,5],"vertices":[[0,0],[0,4],[3,3],[5,0]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/corner-point", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"objective": [
3,
5
],
"vertices": [
[
0,
0
],
[
0,
4
],
[
3,
3
],
[
5,
0
]
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.corner_point",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_rows | 4096 |
max_cols | 64 |
max_abs | 1000000000000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Préparer les sommets à partir de vos contraintes
Chaque coordonnée doit être un nombre fini dans la limite de magnitude documentée, et une liste de sommets vide est rejetée avec une erreur invalid_input, puisqu'une région réalisable sans sommets n'a rien à optimiser.
Lire le résultat et l'automatiser
La réponse comporte quatre champs : optimal_vertex, une copie des coordonnées gagnantes ; objective_value, le c·x maximal atteint ; index, la position (à partir de zéro) de ce sommet dans le tableau envoyé ; et vertices_evaluated, le nombre de candidats comparés. L'exécuteur web de cette page exécute gratuitement le même code : vous pouvez donc prototyper interactivement et ne payer que lorsque vous intégrez l'appel dans un pipeline, à $0.002 par requête.
Questions techniques
Que se passe-t-il avec une liste de sommets vide ?
La requête est rejetée avec une erreur invalid_input et n'est pas facturée : sans sommets, il n'y a rien à optimiser.
Peut-il minimiser au lieu de maximiser ?
Inversez le signe des coefficients de l'objectif et du objective_value renvoyé : maximiser −c·x revient à minimiser c·x.