$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Workflow voor gegevensoverdracht en pakketverwerking
Knooppuntinitialisatie: Elke knoop begint met volledige netwerktopologie-informatie, zijn maximale energiecapaciteit en een vooraf getrainde SAC-agent die klaar is voor besluitvorming. De netwerkcoderingsmodule activeert en bereidt zich voor pakketcombinatieoperaties.
Pakketcoderingsproces: Wanneer de transmissie begint, verzamelen bronknooppunten meerdere datapakketten van sensoren. De netwerkcoderingsmodule combineert deze pakketten tot minder gecodeerde pakketten met efficiënte wiskundige bewerkingen, waardoor het totale aantal benodigde transmissies aanzienlijk wordt verminderd.
SAC-routeringsbeslissingsuitvoering: De SAC-agent analyseert de huidige netwerkstatus, inclusief energieniveaus van buren, linkkwaliteit, verkeerscondities en bestemmingsafstand. Het selecteert de optimale next-hop buur op basis van het geleerde beleid, met prioriteit aan energie-efficiëntie en betrouwbaarheid.
Multi-hop packet forwarding: Gecodeerde pakketten reizen door het geselecteerde pad. Tussenliggende knooppunten beslissen of ze pakketten verder combineren of direct doorsturen, op basis van hun huidige bufferstatus en resterende energieniveaus.
Belooning en opslag: Na elke transmissie berekent het systeem een beloningsscore op basis van leveringssucces, energieverbruik, transmissievertraging en pakketverlies. Deze beloningsinformatie wordt opgeslagen zodat de SAC-agent ervan kan leren.
Continue leerupdate: De SAC-agent beoordeelt regelmatig opgeslagen ervaringen en werkt zijn besluitvormingsstrategie bij om beter te worden in het kiezen van energiezuinige routes en tegelijkertijd een hoge leveringsprestatie te behouden.
Systeemarchitectuur
Een typische node werkt als volgt: hij detecteert en verzamelt data, codeert deze met netwerkcodering, en stuurt vervolgens het gecodeerde pakket door een routeringspad dat door de SAC-agent is geselecteerd. De SAC-agent evalueert de toestand van de node, inclusief resterende energie, bufferstatus en linkkwaliteit, om de volgende optimale hop te bepalen. Dit proces is dynamisch en ontwikkelt zich door ervaring naarmate de netwerkomstandigheden veranderen. Figuur 1 illustreert deze datastroom en interactie tussen componenten.
Netwerkcoderingsvergelijking
Netwerkcodering wordt toegepast op tussenliggende knooppunten als volgt:

Waarbij Ci het gecodeerde pakket is, αij de coderingscoëfficiënt is (geleerd via SAC), en Pj de oorspronkelijke pakketten zijn. Dit stelt het netwerk in staat het aantal transmissies te verminderen en de betrouwbaarheid te verbeteren.
SAC-doelfunctie
De SAC-agent optimaliseert het beleid met het volgende entropie-geregulariseerde doel:

Waarbij r(st, at) de beloning is, α een afwegparameter voor exploratie, en H de entropieterm is.
Energieverbruiksmodel
Om realistisch energieverbruik te simuleren wordt het volgende model gebruikt:

Waarbij: Eelec- is de energie per bit om de zender/ontvanger te laten draaien, - k is de datagrootte in bits, -
is de energie die de zenderversterker nodig heeft, - is de afstand tussen knooppunten, -d is de padverliesexponent.
Evaluatiemetrieken
De volgende prestatie-metrics werden gebruikt in de simulaties in deze studie:
Pakketleveringsratio (PDR):

Doorvoer:

Netwerklevensduur: Gedefinieerd als de duur totdat 50% van de netwerkknooppunten hun energie heeft verbruikt.
Energie-efficiëntie:

Pseudocode
Initialisatie van IoT-netwerkknooppunten
Deze functie zet alle IoT-knooppunten in het netwerk op voordat het systeem begint te werken. Elke node krijgt maximale energie, een lege buffer om pakketten op te slaan, een toestand die zijn lokale omgeving vertegenwoordigt, een SAC-agent voor het leren van optimale beslissingen, en een NC-module die intelligente datacodering mogelijk maakt.
def initialize_nodes(netwerk):
voor knooppunt in netwerk:
node.energy = MAX_ENERGY
node.buffer = []
node.state = sense_environment(node)
node.agent = initialize_sac_agent()
node.nc_module = activate_network_coding()
Pakketgeneratie en netwerkcodering
Deze functie is verantwoordelijk voor het verzamelen van sensorgegevens van de bronknoop, het coderen ervan met een lineaire of XOR-gebaseerde netwerkcoderingsmethode, en het voorbereiden op transmissie. Het vermindert de communicatie-overhead door meerdere pakketten te bundelen in één gecodeerd pakket, klaar om door het netwerk te worden doorgestuurd.
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(pakketten):
Retour linear_combination(pakketten)
Op basis van SAC-routeringsbeslissing
Hier gebruikt de huidige node zijn SAC-agent om de netwerkstatus te analyseren en de meest energiezuinige en betrouwbare buur te selecteren om het pakket naartoe te sturen. De beslissing is gebaseerd op geleerde beleidslijnen en actuele milieuomstandigheden, zoals de kwaliteit van de verbinding of restenergie.
def select_next_hop(current_node):
current_state = observe_network_state(current_node)
actie = sac_agent_policy(current_node.agent, current_state)
next_hop = map_action_to_neighbor(actie)
Keer next_hop terug
Pakketoverdracht en terugkoppelingslus
Deze functie beheert de daadwerkelijke verzending van een gecodeerd pakket. Nadat de beste volgende hop is bepaald, wordt het pakket verzonden als de link geldig is. Het systeem berekent vervolgens een beloning op basis van het succes van de transmissie en het energieverbruik, die wordt gebruikt om het leermodel van de SAC-agent bij te werken.
def transmit_packet(current_node, pakket):
next_hop = select_next_hop(current_node)
als is_link_valid(current_node, next_hop):
verzenden(pakket, next_hop)
beloning = compute_reward(current_node, pakket)
update_sac_agent(current_node, beloning)
anders:
recompute_next_hop(current_node)
SAC-agentupdate (leerfase)
Zodra een pakket is verzonden, werkt deze functie de SAC-agent bij. Het registreert de toestandsverandering, slaat de ervaring op in het geheugen, en als er genoeg ervaring is verzameld, gebruikt het een steekproefbatch om de besluitvormingsstrategie van de agent te verbeteren. Dit helpt de node zich aan te passen aan netwerkveranderingen in de loop van de tijd.
def update_sac_agent(node, beloning):
new_state = observe_network_state(node)
store_transition(node.agent.memory, node.state, node.action, reward, new_state)
als enough_experience(node.agent.memory):
batch = sample_batch(node.agent.memory)
node.agent = optimize_sac(node.agent, batch)
node.state = new_state
Decodering bij de ontvanger
Op de bestemming neemt deze functie alle ontvangen gecodeerde pakketten op en decodeert ze terug in de oorspronkelijke data met methoden zoals Gaussian Elimination. De herstelde data wordt vervolgens doorgegeven aan de juiste applicatielaag of proces.
def decode_packet(destination_node):
received_packets = destination_node.buffer
original_data = decoderen(received_packets)
deliver_data(original_data)
def decode(packets):
Retour gaussian_elimination(pakketten)
Energiemonitoring en knoopslaaplogica
Deze functie volgt het energieniveau van elke knoop en bepaalt of een knoop moet blijven werken of in slaapstand moet schakelen om stroom te besparen. Als de energie voldoende is, trekt de knoop transmissiegerelateerde kosten af; Zo niet, dan schakelt hij tijdelijk uit om de totale netwerklevensduur te verlengen.
def monitor_energy(node):
als node.energy < DREMPEL BEREIKT:
put_node_to_sleep(knoop)
anders: node.energy -= transmission_cost()