optimization

convertMps

##set_optimization

Description

L'action convertMps est votre traducteur personnel pour les modèles d'optimisation mathématique.

L'action convertMps est votre traducteur personnel pour les modèles d'optimisation mathématique. Elle convertit une table de données CAS à deux colonnes (contenant généralement les lignes brutes d'un fichier .mps) en une table structurée à sept colonnes conforme au standard MPS . C'est l'étape indispensable pour que les solveurs de SAS Viya (LP, MILP, QP) puissent interpréter vos données sans froncer les sourcils. Imaginez que vous passez d'un sac de pièces détachées (vos lignes de texte) à un moteur de Formule 1 parfaitement assemblé (le format MPS structuré).

Syntaxe Officielle
proc cas;
optimization.convertMps /
casOut={caslib="string", compress=true|false, indexVars={"variable-name-1"}, label="string", name="table-name", promote=true|false, replace=true|false},
data={caslib="string", name="table-name", where="where-expression"},
format="FIXED"|"FREE",
maxLength=integer;
run;

Paramètres Clés

Nom du paramètre Description
casOut Spécifie la table de sortie qui contiendra les données au format MPS structuré à 7 colonnes. C'est cette table que vous passerez ensuite à vos solveurs préférés.
data Désigne la table d'entrée. Elle doit posséder une structure simple (généralement deux colonnes) représentant les lignes successives d'un fichier MPS d'origine .
format Définit le mode de lecture : 'FIXED' pour un respect strict des positions de colonnes traditionnelles du format MPS, ou 'FREE' si vos champs sont simplement séparés par des espaces. Par défaut, SAS essaie d'être intelligent, mais il vaut mieux lui dire.
maxLength Définit la longueur maximale autorisée pour les noms de variables ou de contraintes. La valeur par défaut est 8, ce qui est un peu vintage, mais vous pouvez l'augmenter si vos noms sont aussi longs qu'un jour sans SAS.

Préparation des données

Création des données MPS brutes

Génération d'une table SAS contenant un problème d'optimisation linéaire simple au format texte brut.

1DATA mps_data; LENGTH line $80; INPUT line $char80.; DATALINES;
2NAME PROB01
3ROWS
4 N COST
5 L R1
6 G R2
7COLUMNS
8 X1 COST 2 R1 1
9 X1 R2 1
10 X2 COST 3 R1 1
11 X2 R2 2
12RHS
13 RHS1 R1 10 R2 15
14ENDATA
15;
16RUN;
17LIBNAME mycas cas caslib="casuser";
18PROC CASUTIL;
19 load DATA=work.mps_data outcaslib="casuser" casout="mps_raw" replace;
20RUN;

Exemples d'utilisation

Conversion MPS Standard

Convertit une table brute chargée en mémoire en une table MPS prête pour le solveur.

1PROC CAS; optimization.convertMps / DATA={name="mps_raw", caslib="casuser"}, casOut={name="mps_formatted", caslib="casuser", replace=true}; RUN;
Résultat Attendu :
Une nouvelle table 'mps_formatted' est créée dans la caslib 'casuser' avec les 7 colonnes standard (Field1 à Field6 plus une colonne d'ID).
Conversion avancée (Format Libre et Noms Longs)

Cet exemple force le format libre et permet des noms de variables allant jusqu'à 32 caractères, au cas où vous auriez des noms très descriptifs.

1PROC CAS; optimization.convertMps / DATA={name="mps_raw", caslib="casuser"}, casOut={name="mps_long_names", replace=true}, FORMAT="FREE", maxLength=32; RUN;
Résultat Attendu :
La table 'mps_long_names' est générée. Le journal CAS confirme la conversion et indique si des erreurs de syntaxe MPS ont été détectées dans la source.