optNetwork

cycle

Descripción

La acción cycle calcula los ciclos (caminos cerrados simples) de un grafo de entrada. Un ciclo se define como un camino que comienza y termina en el mismo nodo y no repite ningún otro nodo. Esta acción es fundamental para analizar estructuras cíclicas en redes, como dependencias circulares, detección de fraudes en transacciones o análisis de bucles en procesos.

optNetwork.cycle <result=results> <status=rc> / algorithm="BACKTRACK" | "BUILD", deterministic=TRUE | FALSE, direction="DIRECTED" | "UNDIRECTED", display={caseSensitive=TRUE | FALSE, exclude=TRUE | FALSE, ...}, distributed=TRUE | FALSE, graph=integer, indexOffset=integer, links={caslib="string", computedOnDemand=TRUE | FALSE, name="table-name", ...}, linksVar={from="variable-name", to="variable-name", weight="variable-name", ...}, logFreqTime=integer, logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE", maxCycles=64-bit-integer | "ALL", maxLength=integer, maxLinkWeight=double, maxNodeWeight=double, maxTime=double, minLength=integer, minLinkWeight=double, minNodeWeight=double, multiLinks=TRUE | FALSE, nodes={caslib="string", name="table-name", ...}, nodesVar={node="variable-name", weight="variable-name", ...}, nThreads=integer, out={caslib="string", name="table-name", replace=TRUE | FALSE, ...}, outCyclesLinks={caslib="string", name="table-name", ...}, outGraphList={caslib="string", name="table-name", ...}, outLinks={caslib="string", name="table-name", ...}, outNodes={caslib="string", name="table-name", ...}, outputTables={names={"string"} | {key={table}}, ...}, selfLinks=TRUE | FALSE, standardizedLabels=TRUE | FALSE, standardizedLabelsOut=TRUE | FALSE, timeType="CPU" | "REAL";
Parámetros
ParámetroDescripción
algorithmEspecifica el algoritmo a utilizar para enumerar ciclos: 'BACKTRACK' (algoritmo de retroceso, predeterminado si maxLength > 20) o 'BUILD' (algoritmo de construcción, predeterminado en otros casos).
directionEspecifica si el grafo se considera dirigido ('DIRECTED') o no dirigido ('UNDIRECTED'). El valor predeterminado es 'UNDIRECTED'.
linksEspecifica la tabla de entrada que contiene la información de los enlaces (aristas) del grafo.
maxCyclesEspecifica el número máximo de ciclos que se devolverán. Puede ser un entero de 64 bits o 'ALL'. El valor predeterminado es 1.
maxLengthEspecifica el número máximo de enlaces permitidos en un ciclo.
minLengthEspecifica el número mínimo de enlaces requeridos en un ciclo. El valor predeterminado es 1.
outEspecifica la tabla de salida que contendrá los nodos de los ciclos identificados.
outCyclesLinksEspecifica la tabla de salida que contendrá los enlaces de los ciclos identificados.
maxTimeEspecifica el tiempo máximo de ejecución permitido para el algoritmo.
Creación de Datos de Grafo con Ciclos

Se define un conjunto de datos que representa enlaces entre nodos, creando deliberadamente estructuras cíclicas (ej. A->B->C->A) para su análisis.

¡Copiado!
1 
2DATA mycas.LinkSetIn;
3INPUT from $ to $ weight;
4DATALINES;
5A B 1 B C 1 C A 1 A D 1 D E 1 E A 1 F G 1 G H 1 H F 1;
6 
7RUN;
8 

Ejemplos

Ejecuta la acción cycle en un grafo dirigido para encontrar un único ciclo (comportamiento predeterminado de maxCycles=1).

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1 
2PROC CAS;
3optNetwork.cycle direction="DIRECTED" links={name="LinkSetIn"} out={name="CyclesNodes"} outCyclesLinks={name="CyclesLinks"};
4 
5RUN;
6 
Resultado :
Se generan las tablas de salida 'CyclesNodes' y 'CyclesLinks' conteniendo la definición del primer ciclo encontrado (por ejemplo, A-B-C).

Busca todos los ciclos posibles en el grafo ('maxCycles="ALL"') e impone una restricción de longitud mínima de 3 enlaces.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1 
2PROC CAS;
3optNetwork.cycle direction="DIRECTED" links={name="LinkSetIn"} maxCycles="ALL" minLength=3 out={name="AllCyclesNodes"} outCyclesLinks={name="AllCyclesLinks"};
4 
5RUN;
6 
Resultado :
Las tablas de salida contendrán todos los ciclos presentes en el grafo (A-B-C-A, A-D-E-A, F-G-H-F), permitiendo un análisis completo de la topología cíclica.

FAQ

¿Cuál es el objetivo principal de la acción cycle?
¿Qué algoritmos de enumeración están disponibles en esta acción?
¿Cómo se especifica la dirección de los enlaces en el grafo?
¿Es posible limitar la longitud de los ciclos encontrados?
¿Qué tablas de salida genera la acción cycle para los resultados?
¿Cómo se puede limitar el tiempo de ejecución o el número de ciclos?

Escenarios asociados

Caso de uso
Detección de Fraude en Transacciones Financieras (Carrusel)

Una unidad de inteligencia financiera investiga patrones de lavado de dinero tipo 'carrusel'. El objetivo es identificar fondos que pasan por múltiples cuentas testaferros para ...

Caso de uso
Prueba de Rendimiento en Red de Telecomunicaciones (Alta Volumetría)

Un proveedor de servicios de internet analiza la topología de su red nacional para asegurar redundancia. Dado el gran volumen de nodos (routers/switches), se requiere validar qu...

Caso de uso
Validación de Workflow: Auto-dependencias y Bucles Cortos

En un sistema de orquestación de procesos de negocio (BPM), es crítico detectar tareas que dependen de sí mismas (error de configuración) o bucles inmediatos entre dos tareas qu...