Sunteți pe pagina 1din 5

 Operador relacional empleado en la sintaxis de las

restricciones

Tipo de restricción Descripción


=e= Igualdad, rhs debe ser igual a lhs
=g= Mayor que, lhs debe ser mayor o igual que rhs
=l= Menor que, lhs debe ser menor o igual que rhs

 Sufijo asignado a las variables

Atributo Sufijo Descripción


Lower bound .lo Cota inferior de la variable
Upper bound .up Cota superior de la variable
Fixed value .fx Valor fijo de la variable
Activity level .l Valor inicial para la variable

 Operador relacional para comparar expresiones


numéricas

Operador Descripción
lt, < Estrictamente menor que
le, ≤ Menor o igual que
Eq, = Igual que
Ne, ≠ Distinto que
Ge, ≥ Mayor o igual que
Gt, > Estrictamente mayor que

 Asignación de límite superior e inferior y valores iniciales


a variables.

Cota superior : x.up(t) = 40;

Cota inferior : x.lo(t) = 5;

Valor inicial : x.l(t) = 30;

1
 Operador dólar $

El operador dólar es empleado para establecer condiciones en expresiones y en la


definición y declaración de ecuaciones.
Además de esto el operador dólar es empleado junto con distintas palabras
reservadas como se verá a continuación.

Empleo del Operador $

- Instituir comentarios:

Para realizar comentarios en forma de “bloque” y que posteriormente el lenguaje


GAMS lo ignore cuando procese el programa, se hará uso de las palabras
reservadas Ontext y Offtext a luego del símbolo ‘$’. A continuación se ilustrará
esto.

$Ontext
Luego de $Ontext, todas las líneas son ignoradas por el GAMS (pero son
impresas en el archivo de salida) hasta que sea encontrado el $Offtext.
$Offtext

Para realizar comentarios en una misma línea, se realiza seleccionando el


compilador $inlinecom o $eolcom, de la siguiente manera:

$eolcom #
$inlinecom { _ }

x = 1; # este es un comentario
{ este también es un comentario } y = 2;

Mediante palabra reservada $Title se genera un titulo en cada hoja en el archivo


de salida
se empleará la y a continuación de esta $offupper cuando existan .......(preguntar
pag 24)

$Title Problema de transporte


$offupper

2
En el lenguaje GAMS toda expresión $(condición) es interpretada como “tal que
la condición se satisfaga”.

- Condicionamientos lógicos para valores numéricos

Considere la siguiente condición:

Si (b > 1.5), entonces a = 2

Esto puede modelarse en el lenguaje GAMS de la siguiente manera:

Lado izquierdo a$(b gt 1.5) = 2;

Si la condición no se satisfizo, no se realiza la asignación.

Lado derecho a = 2$(b gt 1.5);

En este caso siempre es realizada una asignación, por más que no se cumpla la
condición, asignándole el valor ‘0’, lo que equivalente a escribir:

a = 2$(b gt 1.5) + 0$(b le 1.5);

Además de esto se pueden establecer condiciones para la creación de parámetros,


ejemplo:

h(i)$(sig(i) ne 0) = 134/sig(i)

El parámetro sig(i) ha sido previamente declarado, y es empleado para el


cálculo del parámetro h(i), por lo tanto la condición impuesta impide la
división por 0

y(i) = sum(j$m(i,j),rrt(j));

c(i,j) = (f1 * d(i,j))$(d(i,j) le 4.0) + (f2 * d(i,j))$(d(i,j) gt 4.0)

Operaciones con índices condicionados

r1(i).. sum(j$ji(i,j),rrt(i,j)) =l= s(i)

3
- Operador dólar que restringe el dominio de definición de una ecuación.

r2(i)$(ord(i) gt 2).. xp(i-2) + x(i-1) + x(i) =g= b(i)

 El operador “ORD”

ORD retorna la posición relativa de un miembro en un conjunto, solo puede


usarse en un conjunto unidimensional.

Ejemplo:

Set t período / 1985*1999/;

Parameter val(t)

val(t) = ord(t);

Resultado: val(‘1985’) = 1,...,val(‘1999’) = 15

El siguiente ejemplo muestra como el triángulo superior de una matriz es igual a


al índice de la fila más el índice de la columna, y la diagonal. Y el triángulo inferior es
igual a 0

Set i fila y columna / x1*x10/; alias (i,j)

Parameter a(i,j) matriz cuadrada

a(i,j)$(ord(i) lt ord(j)) = ord(i) + ord(j);

 El operador “CARD”

CARD retorna el número de elementos en un conjunto. CARD puede ser usado


en conjuntos dinámicos además de los de un solo orden.

El siguiente ejemplo ilustra su uso:

Set t período / 1985*1995/;

Parameter s(t);

4
s = card(t);

Resultado: s = 11

S-ar putea să vă placă și