optNetwork

linearAssignment

##set_optnetwork

Description

L'action optNetwork.linearAssignment résout le problème d'affectation linéaire au coût minimum, également connu sous le nom de couplage biparti de poids minimum. En gros, c'est l'algorithme parfait pour marier des ressources à des besoins (par exemple, des employés à des tâches) de la manière la plus économique possible. Tant que votre problème peut être modélisé comme un graphe biparti, cette action se chargera de trouver le couplage optimal .

Syntaxe Officielle
optNetwork.linearAssignment /
links={name="table_liens"},
out={name="table_resultat"},
linksVar={from="source", to="destination", weight="cout"},
direction="UNDIRECTED";

Paramètres Clés

Nom du paramètre Description
links Table d'entrée CAS qui contient les informations sur les liens du graphe .
out Table de sortie CAS contenant les paires optimales d'affectation .
linksVar Sous-paramètre pour définir les noms des variables de la table de liens (from, to, weight) .
direction Spécifie si le graphe est dirigé ('DIRECTED') ou non ('UNDIRECTED').
logLevel Contrôle la quantité de détails affichés dans le journal SAS (BASIC, MODERATE, AGGRESSIVE).

Préparation des données

Préparation des données d'affectation

Création d'une table CAS de liens représentant des travailleurs et des tâches avec des coûts de réalisation.

1DATA mycas.tasks; INPUT worker $ task $ cost; DATALINES;
2Jean Tache1 10
3Jean Tache2 15
4Jean Tache3 20
5Marc Tache1 12
6Marc Tache2 8
7Marc Tache3 15
8Luc Tache1 5
9Luc Tache2 10
10Luc Tache3 12
11; RUN;

Exemples d'utilisation

Affectation de base

Résoudre le problème d'affectation avec les colonnes par défaut.

1PROC CAS; optNetwork.linearAssignment / links={name="tasks"} out={name="assign_out", replace=true}; RUN;
Résultat Attendu :
La table 'assign_out' contiendra les 3 liens sélectionnés pour minimiser le coût total.
Affectation complète avec mapping et logs

Spécification explicite des variables de poids et augmentation de la verbosité du journal.

1PROC CAS; optNetwork.linearAssignment / links={name="tasks"} linksVar={from="worker", to="task", weight="cost"} out={name="optimal_assign", replace=true} logLevel="MODERATE" timeType="REAL"; RUN; QUIT;
Résultat Attendu :
Une affectation optimale où chaque travailleur possède une tâche unique, avec un journal affichant le coût total (objectif) de 30.