# Expresiones # Expressions y el Expression Editor ### Expresiones en Simio Al igual que en los lenguajes de programación, una *Expression* (expresión) en Simio es una combinación de una o más constantes, variables, operadores y funciones que son interpretadas (evaluadas) para generar un valor de retorno. (Fuente: [Wikipedia](https://en.wikipedia.org/wiki/Expression_(computer_science))) En Simio, la creación de expresiones se realiza por medio del *Expression Editor* o editor de expresiones. Este se encuentra en la ventana de propiedades para distintas propiedades que acepten este tipo de valor. Para abrirlo basta con seleccionar la propiedad que se desea editar y luego hacer click en el botón ubicado en el extremo derecho en forma de flecha hacia abajo ().  Utilizando el *Expression Editor o* editor de expresiones para definir una [distribución de probabilidad](https://simulemos.cl/books/simio/page/distribuciones-de-probabilidad "Distribuciones de probabilidad"). Por medio de las expresiones y con la ayuda del editor de expresiones, se pueden definir distribuciones de probabilidad, realizar operaciones matemáticas, acceder a propiedades y estados de objetos, llamar a las funciones incluidas de Simio, acceder a la hora en el reloj de la simulación, entre muchas otras. La sintaxis utilizada le será familiar a aquellos que hayan programado en lenguajes de programación tradicionales como Java. #### Algunas constantes o palabras reservadas
**Nombre** | **Descripción** |
True | Valor boolean que representa el valor de verdad *verdadero.* Tiene un valor numérico equivalente a 1. |
False | Valor boolean que representa el valor de verdad *falso.* Tiene un valor numérico equivalente a 0. |
Infinity | Representa un valor numérico de infinito. |
Nothing | Similar a el null de algunos lenguajes de programación. Representa una referencia nula. |
ParentObject | Representa una referencia al objeto padre que contiene a la expresión. |
Is | Is seguido del nombre de la definición de un objeto retorna *True* si el objeto sobre el cual se invoca este método es una instancia de dicha definición. Ej: MiServidor.Is.Server == True |
TimeNow | Retorna el reloj de la simulación, en horas. |
**Operador** | **Descripción** |
== | Igual a |
> | Mayor que |
< | Menor que |
>= | Mayor o igual que |
<= | Menor o igual que |
&& | Y (*and)* |
|| | O (*or*) |
! | No (*not*). Invierte el resultado de una expresión lógica. |
!= | Distinto a |
+ | Adición |
- | Sustracción |
\* | Multiplicación |
/ | División |
^ | Potencia (elevado a) (2^3 == 8) |
**Distribución** | **Función y parámetros** | **Descripción** |
Bernoulli | Random.Bernoulli(**probabilidadDeÉxito**) | Esta distribución retorna un valor 0 o 1. El parámetro es la probabilidad de obtener 1. |
Beta | Random.Beta(**alpha1**, **alpha2**) | Distribución con rango 0 a 1 cuya forma depende de sus parámetros de forma **alpha1** y **alpha2.** |
Binomial | Random.Binomial(**probabilidadDeÉxito**, **númeroDePruebas**) | Distribución que representa el número de éxitos en una cantidad especificada de pruebas. |
Continua | Random.Continuous(**v1**, **c1**, **v2**, **c2**, ..., **vn**, **cn**) | Distribución empírica definida por un conjunto de pares de la forma (**vi**, **ci**) correspondiente a un valor y su probabilidad acumulada. Devuelve un número real ubicado entre 0 y **vn**. Esta distribución tiene implícito un **v0** igual a 0, si se desea que los valores partan en **v1** se debe especificar **c1** como 0. Ejemplo: Random.Continuous(1, 0.2, 2, 0.5, 3, 1) devuelve cualquier valor real entre 0 y 3. |
Discreta | Random.Discrete(**v1**, **c1**, **v2**, **c2**, ..., **vn**, **cn**) | Distribución empírica definida por un conjunto de pares de la forma (**vi**, **ci**) correspondiente a un valor y su probabilidad acumulada. Devuelve solamente uno de los **n** valores definidos. Ejemplo: Random.Discrete(1, 0.2, 2, 0.5, 3, 1) devuelve solo los valores 1, 2 o 3, con un 20%, 30% y 50% de probabilidad, respectivamente. |
Erlang | Random.Erlang(**media**, **k**) | Distribución que modela un proceso de n-fases en el que el tiempo para cada fase está distribuido de forma exponencial. Los parámetros corresponden a la **media** y el número de fases (**k**). |
Exponencial | Random.Exponential(**media**) | Distribución utilizada normalmente para modelar el tiempo entre llegadas. Recibe como parámetro la **media** de la distribución. |
Gamma | Random.Gamma(**alpha**, **beta**) | Distribución que recibe un parámetro de forma (**alpha**) y otro de escala (**beta**). La media es el producto de estos parámetros. |
Geométrica | Random.Geometric(**probabilidadDeÉxito**) | Distribución discreta que representa el número de fallas antes del primer éxito. El parámetro representa la probabilidad de éxito para cada prueba independiente. |
JohnsonSB | Random.JohnsonSB(**alpha1**, **alpha2**, **mínimo**, **máximo**) | Distribución acotada cuya forma depende de sus dos parámetros de forma (**alpha1**, **alpha2**), el **mínimo** y el **máximo**. |
JohnsonSU | Random.JohnsonSU(**alpha1**, **alpha2**, **ubicación**, **escala**) | Distribución no acotada cuya forma depende de sus dos parámetros de forma (**alpha1**, **alpha2**), el parámetro de **ubicación** y el parámetro de **escala**. |
LogLogistic | Random.LogLogistic(**forma**, **escala**) | Distribución con un parámetro de **forma** y uno de **escala**, ambos deben ser no negativos. Tiene un rango de 0 a infinito. |
Lognormal | Random.Lognormal(**media, desviaciónEstándar**) | Distribución continua en la que el logaritmo de una variable tiene una distribución normal. Sus parámetros son la **media** y la **desviación estándar**. |
Binomial Negativa | Random.NegativeBinomial( **probabilidadDeÉxito**, **númeroDeÉxitos**) | Distribución discreta que representa el número de fallas antes de alcanzar el número especificado de éxitos. Los parámetros son la probabilidad de éxito para cada prueba y el número requerido de éxitos. |
Normal | Random.Normal(**media, desviaciónEstándar**) | Sus parámetros son la **media** y la **desviación estándar**. |
Pearson tipo VI | Random.PearsonVI(**formaA**, **formaB**, **escala**) | Distribución con dos parámetros de forma (**formaA**, **formaB**) y uno de escala (**escala**). Todos los parámetros deben ser no negativos. El rango es de 0 a infinito. |
Pert | Random.Pert(**mínimo**, **moda**, **máximo**) | Caso especial de la distribución Beta en la que los parámetros de forma son calculados a partir del **mínimo**, la **moda** y el **máximo**. |
Poisson | Random.Poisson(**media**) | Distribución discreta que modela el número de eventos en un intervalo de tiempo en el cual estos están ocurriendo a una tasa constante según un proceso Poisson. El tiempo entre eventos está distribuido de forma exponencial y el número de eventos en un tiempo determinado esta Poisson-distribuido. El parámetro es la tasa de eventos por unidad de tiempo, debe ser no negativa. |
Triangular | Random.Triangular(**mínimo**, **moda**, **máximo**) | Distribución que tiene parámetros para definir el **mínimo**, la **moda** o valor más probable y el **máximo**. |
Uniforme | Random.Uniform(**mínimo**, **máximo**) | Distribución cuyos parámetros definen el valor **mínimo** y **máximo**. Todos los valores dentro del rango son equiprobables. |
Weibull | Random.Weibull(**forma**, **escala**) | Distribución con parámetros de **forma** y **escala** cuyo rango va de 0 a infinito. |
**Nombre** | **Función y parámetros** | **Descripción** |
Valor absoluto | Math.Abs(**valor**) | Retorna el valor absoluto del **valor** especificado. El valor absoluto de un número es su magnitud sin signo. |
Arcocoseno | Math.Acos(**valor**) | Retorna el arcocoseno del **valor** especificado (en radianes). |
Arcoseno | Math.Asin(**valor**) | Retorna el arcoseno del **valor** especificado (en radianes). |
Arcotangente | Math.Atan(**valor**) | Retorna el arcotangente del **valor** especificado (en radianes). |
Techo | Math.Ceiling(**valor**) | Retorna el entero más pequeño pero no menor que el **valor** especificado. |
Coseno | Math.Cos(**valor**) | Retorna el coseno del **valor** especificado (en radianes). |
**e** | Math.E | Retorna la base del logaritmo natural. Constante matemática **e**. |
**Epsilon** | Math.Epsilon | Representa el número real más pequeño (representable) mayor que cero. |
Exponencial | Math.Exp(**valor**) | Retorna el resultado de elevar la constante **e** al **valor** especificado. |
Piso | Math.Floor(**valor**) | Retorna el entero más grande pero no mayor al **valor** especificado. |
Si | Math.If(**condición1**, **valor1**, **condición2**, **valor2**, ..., **condiciónN**, **valorN**, **valorSino**) | Retorna el n-avo valor asociado a la primera condición especificada que sea evaluada a *True,* si ninguna condición se cumple, retorna el **valorSino**. Ejemplo: Math.If(1==2, 1, 2==2, 3, 4) retorna 3. |
¿Es NaN? | Math.IsNaN(**valor**) | Retorna *True* si el **valor** es **NaN**, *False* si no lo es. |
Logaritmo Natural | Math.Log(**valor**) | Retorna el logaritmo natural del **valor** especificado. |
Logaritmo (en base 10) | Math.Log10(**valor**) | Retorna el logaritmo en base 10 del **valor** especificado. |
Máximo | Math.Max(**valor1**, **valor2**, ..., **valorN**) | Retorna el valor máximo entre los especificados. |
Mínimo | Math.Min(**valor1**, **valor2**, ..., **valorN**) | Retorna el valor mínimo entre los especificados. |
**NaN** | Math.NaN | Un valor indefinido o irrepresentable. |
**π** (pi) | Math.PI | Retorna la relación entre la circunferencia de un círculo y su diámetro. Constante matemática **π*.*** |
Potencia | Math.Pow(**base**, **exponente**) | Retorna el resultado de la **base** elevada al **exponente**. |
Resto o residuo | Math.Remainder(**dividendo**, **divisor**) | Retorna el resto o residuo de la división entre el **dividendo** y el **divisor**. |
Redondear | Math.Round(**valor**, \[, **dígitos**\]) | Parámetro opcional: **dígitos** decimales. Retorna el **valor** redondeado (por defecto al entero más cercano). |
Seno | Math.Sin(**valor**) | Retorna el seno del **valor** especificado (en radianes). |
Raíz Cuadrada | Math.Sqrt(**valor**) | Retorna la raíz cuadrada del **valor** especificado. |
Suma de muestra aleatoria | Math.SumOfSamples(**expresión**, **n**) | Muestrea **n** veces, de forma independiente, la **expresión** aleatoria especificada y retorna la suma de los valores obtenidos. |
Tangente | Math.Tan(**valor**) | Retorna la tangente del **valor** especificado (en radianes). |