optimization

loadMps

##set_optimization

Description

L'action loadMps charge une chaîne de caractères représentant un fichier MPS (Mathematical Programming System) directement dans une table de données en mémoireGemini said

Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya.
CAS. C'est un peu comme donner à manger une énorme équation mathématique à SAS Viya, et il vous la recrache sous forme de table parfaitement formatée, prête à être résolue par les algorithmes d'optimisation ! Vous pouvez spécifier le format (fixe ou libre) et la longueur maximale des noms de variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage.. Source :

Syntaxe Officielle
proc cas;
optimization.loadMps /
casOut={name="nom_table", caslib="nom_caslib", replace=true}
format="FIXED" | "FREE"
maxLength=entier
mpsFileString="chaine_de_caracteres_mps";
run;
quit;

Paramètres Clés

Nom du paramètre Description
casOut Spécifie la table de données de sortie qui contiendra les données au format MPS. Elle sera ensuite passée aux différents solveurs.
format Détermine si le contenu de la chaîne mpsFileString est au format fixe ('FIXED', par défaut) ou libre ('FREE'). Attention à bien choisir, SAS est pointilleux sur les espaces !
maxLength Spécifie la longueur maximale autorisée pour le nom d'une variable ou d'une contrainte. La valeur par défaut est 8.
mpsFileString La chaîne de caractères contenant l'intégralité du fichier .mps. Oui, toute la chaîne ! Préparez-vous à de longs blocs de texte dans vos macros ou variables.

Préparation des données

Préparation d'une chaîne MPS

Pour utiliser cette action, nous avons besoin d'une variable macro contenant les données au format MPS. Voici un petit exemple de problème linéaire simple (minimiser 2x + 3y sous contraintes).

1/* Définition d'un modèle MPS minimal dans une macro-variable */
2%let my_mps = %str(
3NAME TESTPROB
4ROWS
5 N COST
6 L R1
7 L R2
8COLUMNS
9 X1 COST 2.0 R1 1.0
10 X1 R2 1.0
11 X2 COST 3.0 R1 1.0
12 X2 R2 2.0
13RHS
14 RHS1 R1 5.0 R2 8.0
15BOUNDS
16 LO BND1 X1 0.0
17 LO BND1 X2 0.0
18ENDATA
19);

Exemples d'utilisation

Chargement d'une chaîne MPS avec format libre

Dans cet exemple, nous chargeons la chaîne macro my_mps dans une table CAS nommée my_mps_table. Nous utilisons le format 'FREE' car notre espacement n'est pas strictement fixe selon le standard IBM d'origine.

1PROC CAS;
2 optimization.loadMps / casOut={name="my_mps_table", caslib="casuser", replace=true} FORMAT="FREE" maxLength=8 mpsFileString=symget('my_mps');
3RUN;
4QUIT;
Résultat Attendu :
Une table CAS my_mps_table est créée dans la caslib casuser, contenant les données MPS structurées en colonnes prêtes pour l'action solveLp ou solveMilp.
Chargement avancé avec options de table

Exemple où nous précisons non seulement le format et la chaîne, mais aussi des options avancées pour la table de sortie, comme la compression pour optimiser la mémoire en cas de très gros modèle mathématique.

1PROC CAS;
2 optimization.loadMps / casOut={name="my_mps_table_opt", caslib="casuser", replace=true, compress=true} FORMAT="FREE" maxLength=16 mpsFileString=symget('my_mps');
3RUN;
4QUIT;
Résultat Attendu :
La table my_mps_table_opt est créée et compressée en mémoire. Une longueur maximale de 16 caractères est allouée pour les noms de variables et contraintes.