$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Flujo de trabajo de transmisión de datos y procesamiento de paquetes
Inicialización de nodo: Cada nodo comienza con la información completa de topología de la red, su capacidad máxima energética y un agente SAC preentrenado listo para la toma de decisiones. El módulo de codificación de red activa y prepara operaciones de combinación de paquetes.
Proceso de codificación de paquetes: Cuando comienza la transmisión, los nodos fuente recogen múltiples paquetes de datos de los sensores. El módulo de codificación de red combina estos paquetes en menos paquetes codificados mediante operaciones matemáticas eficientes, reduciendo significativamente el número total de transmisiones necesarias.
Ejecución de la decisión de enrutamiento SAC: El agente SAC analiza el estado actual de la red, incluyendo los niveles de energía de los vecinos, la calidad del enlace, las condiciones del tráfico y la distancia de destino. Selecciona el vecino óptimo del siguiente salto en función de su política aprendida, priorizando la eficiencia energética y la fiabilidad.
Reenvío de paquetes multi-hop: Los paquetes codificados viajan por la ruta seleccionada. Los nodos intermedios deciden si combinan paquetes o los reenvían directamente, en función de su estado actual del búfer y los niveles de energía restantes.
Cálculo y almacenamiento de recompensas: Tras cada transmisión, el sistema calcula una puntuación de recompensa basada en el éxito de la entrega, la energía utilizada, el retraso en la transmisión y las caídas de paquetes. Esta información de recompensa se almacena para que el agente del SAC pueda aprender de ella.
Actualización de aprendizaje continuo: El agente del SAC revisa regularmente las experiencias almacenadas y actualiza su estrategia de toma de decisiones para mejorar la selección de rutas energéticamente eficientes, manteniendo un alto rendimiento de entrega.
Arquitectura del sistema
Un nodo típico funciona de la siguiente manera: detecta y recopila datos, los codifica usando codificación de red y luego reenvía el paquete codificado a través de una ruta de enrutamiento seleccionada por el agente SAC. El agente SAC evalúa el estado del nodo, incluyendo la energía restante, el estado del búfer y la calidad del enlace, para decidir el siguiente salto óptimo. Este proceso es dinámico y evoluciona a través de la experiencia a medida que cambian las condiciones de la red. La Figura 1 ilustrará este flujo de datos e interacción entre componentes.
Ecuación de codificación de red
La codificación de red se aplica en nodos intermedios de la siguiente manera:

Donde Ci es el paquete codificado, αij es el coeficiente de codificación (aprendido mediante SAC), y Pj son los paquetes originales. Esto permite a la red reducir el número de transmisiones y mejorar la fiabilidad.
Función objetivo del SAC
El agente SAC optimiza la política utilizando el siguiente objetivo regularizado por entropía:

Donde r(s t, a t) es la recompensa, α es un parámetro de intercambio para la exploración, y H es el término de entropía.
Modelo de consumo energético
Para simular un uso realista de energía, se utiliza el siguiente modelo:

Donde: Eelec- es la energía por bit para hacer funcionar el transmisor/receptor, - k es el tamaño de los datos en bits, -
es la energía requerida por el amplificador transmisor, - es la distancia entre nodos, -d es el exponente de pérdida de camino.
Métricas de evaluación
Las siguientes métricas de rendimiento se utilizaron en las simulaciones de este estudio:
Ratio de entrega de paquetes (PDR):

Rendimiento:

Vida útil de la red: Definida como la duración hasta que el 50% de los nodos de la red agotan su energía.
Eficiencia energética:

Pseudocódigo
Inicialización de nodos de red IoT
Esta función configura todos los nodos IoT en la red antes de que el sistema comience a operar. A cada nodo se le asigna la máxima energía, un búfer vacío para almacenar paquetes, un estado que representa su entorno local, un agente SAC para aprender decisiones óptimas y un módulo NC que permite la codificación inteligente de datos.
Def initialize_nodes(red):
Para el nodo en la red:
nodo.energía = MAX_ENERGY
nodo.búfer = []
nodo.estado = sense_environment(nodo)
node.agent = initialize_sac_agent()
node.nc_module = activate_network_coding()
Generación de paquetes y codificación de red
Esta función es responsable de recopilar datos de sensores del nodo fuente, codificarlos usando un método de codificación de red lineal o basado en XOR, y prepararlos para la transmisión. Reduce la sobrecarga de comunicación agrupando varios paquetes en un solo paquete codificado, listo para ser reenviado a través de la red.
Def generate_and_code_packets(source_node):
data_packets = collect_data(source_node)
coded_packet = network_code(data_packets)
queue_transmission(source_node, coded_packet)
Def network_code(paquetes):
Retorno linear_combination(paquetes)
Decisión de enrutamiento basada en SAC
Aquí, el nodo actual utiliza su agente SAC para analizar el estado de la red y seleccionar el vecino más eficiente energéticamente y fiable al que reenviar el paquete. La decisión se basa en políticas eruditas y condiciones ambientales actuales, como la calidad de los enlaces o la energía residual.
Def select_next_hop(current_node):
current_state = observe_network_state(current_node)
acción = sac_agent_policy(current_node.agente, current_state)
next_hop = map_action_to_neighbor(acción)
Regreso next_hop
Transmisión de paquetes y bucle de retroalimentación
Esta función gestiona la transmisión real de un paquete codificado. Tras determinar el mejor siguiente salto, el paquete se envía si el enlace es válido. El sistema calcula entonces una recompensa basada en el éxito de la transmisión y el consumo de energía, que se utiliza para actualizar el modelo de aprendizaje del agente SAC.
Def transmit_packet(current_node, paquete):
next_hop = select_next_hop(current_node)
si is_link_valid(current_node, next_hop):
enviar (paquete, next_hop)
recompensa = compute_reward(current_node, paquete)
update_sac_agent(current_node, recompensa)
De lo contrario:
recompute_next_hop(current_node)
Actualización del agente SAC (fase de aprendizaje)
Una vez que se transmite un paquete, esta función actualiza el agente SAC. Registra el cambio de estado, almacena la experiencia en memoria y, si se recopila suficiente experiencia, utiliza un lote de muestra para mejorar la estrategia de toma de decisiones del agente. Esto ayuda al nodo a adaptarse a los cambios de la red con el tiempo.
Def update_sac_agent(nodo, recompensa):
new_state = observe_network_state(nodo)
store_transition(node.agent.memory, node.state, node.action, reward, new_state)
si enough_experience(node.agent.memory):
batch = sample_batch(node.agent.memory)
node.agent = optimize_sac(node.agent, batch)
nodo.estado = new_state
Decodificación en el receptor
En el destino, esta función recibe todos los paquetes codificados recibidos y los decodifica de nuevo en los datos originales usando métodos como la eliminación gaussiana. Los datos recuperados se pasan entonces a la capa o proceso de aplicación correspondiente.
Def decode_packet(destination_node):
received_packets = destination_node.búfer
original_data = decodificar(received_packets)
deliver_data(original_data)
Decodificación DEF (paquetes):
Return gaussian_elimination(paquetes)
Monitorización energética y lógica de sueño de nodos
Esta función rastrea los niveles de energía de cada nodo y determina si debe seguir funcionando o cambiar a modo de suspensión para conservar energía. Si la energía es suficiente, el nodo deduce los costes relacionados con la transmisión; Si no, se apaga temporalmente para alargar la vida útil total de la red.
Def monitor_energy(nodo):
si node.energy < UMBRAL:
put_node_to_sleep(nodo)
si no: nodo.energía -= transmission_cost()