Ampl

Introducció

En aquest exemple, explorarem com enviar a Multivac un programa en Ampl per a calcular una funció objectiu senzilla en Ampl.

Codi d’exemple

Suposem que volem minimitzar la següent funció objectiu:

\[f(x) = x^2 + 3x + 2\]

Crearem un arxiu per exemple anomenat test_ampl.mod per a calcular el valor de la funció objectiu per a un valor específic de x:

# minimitzacio.mod
# Defineix la variable de decisió
var x;
# Defineix la funció objectiu
minimize obj: x^2 + 3*x + 2;
# Defineix la restricció: x ha de ser igual a 5
s.t. restriccio_x: x = 5;
# Resol el problema
solve;
# Mostra els resultats
display x;
display obj;

Aquest codi defineix la funció objectiu, assigna un valor específic a x (en aquest cas, 5), i calcula el resultat de la funció objectiu per a aquest valor de x.

Crearem un arxiu amb extensió .dat, per exemple test_ampl.dat que contingui les variables d’entrada:

# minimitzacio.dat
# No es requereixen dades d'entrada per a aquest exemple

Execució

Crearem un document amb els parametres de conficuració, per exemple: test_ampl.slurm` que conté la configuració d’execució per a aquest script d’ampl.

VERSION=1.3
JOB_NAME=ampl_example
NAME_OUTPUT=out
PARTITION=all
N_TASKS=1
CPUS_PER_TASK=1
MAIL_TYPE=END,FAIL
MAIL_USER=nom.usuari@upc.edu
MEMORY=1G
BEGIN=now
TIME_LIMIT=00:05:00
LOG_OUTPUT=log
FORCED_NODES=
EXCLUDED_NODES=
ROUTE=~/
COMMANDS=(
   "hostname" #Per a saber a quina màquina s'ha executat
   "/opt/ampl.linux-intel64/ampl test_ampl.mod test_ampl.dat"
)

Aquest script el llançarem des de iocex usant la següent comanda:

multivac test_ampl.slurm

El resultat del nostre programa un cop finalitzada l’execució serà visible al mateix directori a on hem fet l’execució.