Escribir reglas de secuencia personalizadas
Lógica de las reglas de secuencia
Antes de crear sus propias funciones de clasificación de carga, debe comprender la forma en que la regla de secuencia procesa las solicitudes. Cuando una carga hace una solicitud, la función de clasificación por carga proporciona a la solicitud un valor de clasificación. El valor de clasificación no cambia nunca.
Por ejemplo, imagine que una regla de secuencia clasifica solicitudes en función del tiempo que queda hasta la fecha de vencimiento. A la 1 p. m. hoy una carga con una fecha de vencimiento a las 4 p. m. hoy coloca una solicitud y se le proporciona un valor de clasificación de 3. m. 3 p. m. hoy, una carga con fecha de vencimiento a las 5 p. m. hoy coloca una solicitud y recibe un valor de clasificación de 2. suponga que estas son las únicas solicitudes en la cola. Suponga que una de estas solicitudes se cumple a las 3:30. La solicitud que se satisface es aquella a la que se le otorgó el valor de clasificación de 2, aunque cuente con 1,5 horas hasta su vencimiento, y la solicitud con valor de clasificación 3 cuente solo con 0,5 horas hasta su vencimiento.
Las solicitudes se ordenan en la lista interna para representar la cola de menor a mayor en función del valor de clasificación. Puede invertir esta orden en la lógica personalizada si multiplica el valor de clasificación por -1. Por ejemplo, para cargas de clasificación que se basan en un tiempo de procesamiento más largo para una operación actual, una función de clasificación devolverá el valor negativo del tiempo de procesamiento para la carga y su operación actual.
Denominar la función
La función de clasificación de carga personalizada puede tener cualquier nombre que no sea un nombre de función estándar invocable por el usuario.
Arguments
#include "factor.h"
double myrule(ldp, atrib)
LOAD *ldp; /* pointer to the load. */
ATTRIBUTE *atr; /* pointer to attribute, if any, to base ranking on. */
La función debe aceptar dos argumentos en el siguiente orden:
- Una carga (Type: LOAD*).
- Un atributo (Type: ATTRIBUTE).
Valor de devolución
La función debe devolver un valor (Type: double), que es el valor de clasificación de la solicitud de la carga.
A continuación presentamos un ejemplo de una función de clasificación de carga para cargas de órdenes en función de la demora dinámica mínima (es decir, el tiempo restante mínimo para la fecha de vencimiento menos el tiempo de procesamiento restante):
double sqrl (LOAD *ldp, ATTRIBUTE *atr)
/*-----------------------------------------------------------------
Ranking function to cause loads to be ranked on a least dynamic
slack basis.
ARGS:
ldp - pointer to load for which to evaluate the ranking code
RETURNS: load ranking value
-----------------------------------------------------------------*/
{
double rt, lt;
int rn;
rt = sermot(ldp, &rn, <);
return(ldp->loordp->ordudt - DATENOW - rt);
}
Instalación de la función personalizada
Para poner la función personalizada a disponibilidad del programador, debe "instalarla" desde la función de inicialización ucini1 invocando a la función sedfrk. Sedfrk tiene dos argumentos en el siguiente orden:
- El número de la regla de secuencia para la que la función de clasificación contiene lógica personalizada.
- La dirección de la función de clasificación de carga.
Por ejemplo, para instalar la regla "sqrl" del ejemplo anterior en la posición de regla 39:
sedfrk (39, sqrl);