Berechnen Sie eine Vorhersage mit bekannten Koeffizienten

Berechnen Sie eine Vorhersage, indem Sie auf jede Messung eine bekannte Formel anwenden. Beispielsweise sagt weight = 2 * speed + 0.5 * temperature + 173 ein Gewicht von 203 voraus, wenn die Geschwindigkeit 10 und die Temperatur 20 beträgt. Eine eingebaute Kartentransformation führt die Berechnung durch.

Das Beispiel verwendet eine vordefinierte Formel und synthetische Werte. Verwandte unabhängige Muster umfassen das Anpassen und die Genehmigung einer Aktualisierung sowie die Lieferung genehmigter Koeffizienten über MQTT.

Voraussetzungen

Erfüllen Sie die gemeinsamen Beispielvoraussetzungen, einschließlich des factory-mqtt Profils und des default Endpunkts. Verwenden Sie YAML zum Debuggen und Azure CLI oder Bicep für das Produktionsmanagement.

Verwenden Sie den bestehenden default Registry-Endpunkt für eingebaute Transformationen. Legen Sie für CLI-Bereitstellungen AIO_INSTANCE_NAME und RESOURCE_GROUP auf Ihre vorhandene Instanz und Ressourcengruppe fest. Für Bicep-Deployments solltest du auch CUSTOM_LOCATION_NAME auf den bestehenden benutzerdefinierten Standort der Instanz einstellen. Die Deployment-Tabs beziehen sich auf diese gemeinsamen Ressourcen; sie erstellen sie nicht.

Wählen Sie, woher die Koeffizienten kommen

Koeffizientenquelle Verarbeitungspfad Verwenden Sie, wenn
In jeder Nachricht enthalten Lesen mit Koeffizienten → Zuordnung → Vorhersage Das Modell und seine Version werden bereits durch den Produzenten bereitgestellt
Separat nach Asset gespeichert Lesen → Anreicherung → Zuordnung → Vorhersage Eine Anwendung pflegt genehmigte Koeffizienten unabhängig von Sensornachrichten

Diagramm von zwei Vorhersagepfaden. Eine Nachricht, die Koeffizienten enthält, wird direkt der Zuordnung übergeben. Ein Lesevorgang ohne Koeffizienten verwendet zunächst die Anreicherung, um das Modell des Medienobjekts nachzuschlagen. Beide Pfade berechnen das vorhergesagte Gewicht 203 und behalten die Modellversion 8 bei.

Wählen Sie einen der vollständigen Graphen aus. Die Anreicherung liefert gespeicherte Parameter. Die Zuordnung wertet die Formel aus. Beide Wege bewahren die Piece-ID, die Merkmale und die Modellversion.

Bewerten Sie die in der Nachricht bereitgestellten Koeffizienten

Wenn ein Datensatz die Eingaben und Koeffizienten enthält, wertet eine speed * speedCoefficient + temperature * temperatureCoefficient + intercept aus. Die Wildcard-Regel im folgenden Beispiel bewahrt die ursprünglichen Felder. Wenn die Eingaben separat ankommen, verwenden Sie Kontextsuche oder Korrelation, um den Datensatz zusammenzustellen.

Modelle, die eine Laufzeit oder einen Algorithmus über die Ausdruckssprache hinaus benötigen, benötigen benutzerdefiniertes WASM oder einen externen Dienst.

Stellen Sie diesen Graphen mit einer der folgenden Methoden bereit. Abonnieren Sie factory/predicted-values, und veröffentlichen Sie dann die folgende Eingabe in factory/features-with-model.

  1. Öffnen Sie in der Betriebsumgebung Ihre Instanz, und wählen Sie Datenflussgraph>Datenflussgraph erstellen aus.

  2. Benennen Sie das Diagramm predict-with-coefficients und wählen Sie das default Profil aus.

  3. Quelle source mit Endpunkt factory-mqtt und Thema factory/features-with-modelhinzufügen.

  4. Fügen Sie die Map-Transformation predict hinzu, unter Verwendung von azureiotoperations/graph-dataflow-map:1.0.0 aus dem Registry-Endpunkt default. Konfigurieren Sie diese Regeln in folgender Reihenfolge:

    Eingaben (in der Reihenfolge) Ausgabe Ausdruck
    * * Leer lassen
    speed, temperature, speedCoefficient, temperatureCoefficient, , intercept predictedWeight $1 * $3 + $2 * $4 + $5
  5. Fügen Sie Ziel destination mit Endpunkt factory-mqtt und Topic factory/predicted-values hinzu.

  6. Verbinden Sie source → predict → destination und wählen Speichern.

Eingabe für factory/features-with-model:

{"assetId":"line-1","pieceId":"part-42","modelVersion":8,"speed":10,"temperature":20,"speedCoefficient":2,"temperatureCoefficient":0.5,"intercept":173}

Die Ausgabe auf factory/predicted-values bewahrt die Eingabefelder und fügt predictedWeight hinzu:

{"assetId":"line-1","pieceId":"part-42","modelVersion":8,"speed":10,"temperature":20,"speedCoefficient":2,"temperatureCoefficient":0.5,"intercept":173,"predictedWeight":203}

Lesen Sie Koeffizienten aus dem Zustandsspeicher

Verwenden Sie Enrichment, um den vollständigen aktiven Modell-Datensatz unter Schlüssel factory-active-models zu lesen und anschließend die Formel mit einer Map-Transformation auszuwerten. Für eine eigenständige Demo verwenden Sie den State-Store-Writer , um den v8-Datensatz zu seeden; es ist kein Anpassungsschritt erforderlich. Die Uhren von Writer und Broker müssen synchronisiert sein. Warte auf die entsprechende +OK Antwort, bevor du die Messwerte veröffentlichst.

Stellen Sie diesen Graphen mit einer der folgenden Methoden bereit. Abonnieren Sie factory/predictions, und veröffentlichen Sie dann diese Eingabe in factory/features:

{"assetId":"line-1","pieceId":"part-43","speed":10,"temperature":20}

Beim per Seeding generierten v8-Modell weist die Ausgabe predictedWeight: 203 und modelVersion: 8 auf.

Der Graph liest den genehmigten Eintrag für jede Vorhersage aus.

  1. Öffnen Sie in der Betriebsumgebung Ihre Instanz, und wählen Sie Datenflussgraph>Datenflussgraph erstellen aus.

  2. Benennen Sie das Diagramm predict-with-approved-model und wählen Sie das default Profil aus.

  3. Quelle source mit Endpunkt factory-mqtt und Thema factory/featureshinzufügen.

  4. Fügen Sie die Map-Transformation read-model hinzu und verwenden Sie azureiotoperations/graph-dataflow-map:1.0.0 aus dem Registry-Endpunkt default. Legen Sie in der Datasetkonfiguration den Statusspeicherschlüssel factory-active-models as model, die Übereinstimmungseingaben $source.assetId, $context.assetId und den Übereinstimmungsausdruck $1 == $2 fest. Konfigurieren Sie diese Zuordnungsregeln der Reihe nach und lassen Sie Ausdrücke leer:

    Input Ausgabe
    * *
    $context(model).modelVersion modelVersion
    $context(model).speedCoefficient speedCoefficient
    $context(model).temperatureCoefficient temperatureCoefficient
    $context(model).intercept intercept
  5. Fügen Sie die Map-Transformation predict hinzu, wobei Sie dasselbe Artefakt und Registry-Endpunkt verwenden. Konfigurieren Sie diese Regeln in der Reihenfolge:

    Eingaben (der Reihe nach) Ausgabe Ausdruck
    * * Leer lassen
    assetId kind "prediction"
    speed, temperature, speedCoefficient, temperatureCoefficient, , intercept predictedWeight $1 * $3 + $2 * $4 + $5
  6. Fügen Sie Ziel destination mit Endpunkt factory-mqtt und Topic factory/predictions hinzu.

  7. Verbinden source → read-model → predict → destination und wählen Sie Speichern aus.

Die erste Zuordnung kopiert das ausgewählte Modell und die Version in den Datensatz. Der zweite berechnet aus diesen Feldern. Zuordnungsregeln lesen die Eingabe der Transformation.

Um auch Vorhersagen vor und nach einem Update zu vergleichen, führen Sie zunächst ein Seeding für v7 durch, indem Sie modelVersion des Writers in 7 und intercept in 175 ändern. Veröffentlichen Sie den Lesevorgang, schreiben Sie v8, und veröffentlichen Sie einen Lesevorgang für ein neues Teil.

Gespeichertes Modell Berechnung für Geschwindigkeit 10, Temperatur 20 Vorhergesagtes Gewicht
v7 10 * 2 + 20 * 0.5 + 175 205
v8 10 * 2 + 20 * 0.5 + 173 203

Nachdem die Instanz v8 beobachtet hat, erzeugt ein Lesevorgang für part-44 diese Ausgabe in factory/predictions:

{"assetId":"line-1","pieceId":"part-44","speed":10,"temperature":20,"modelVersion":8,"speedCoefficient":2,"temperatureCoefficient":0.5,"intercept":173,"kind":"prediction","predictedWeight":203}

State Lookup-Caches können v7 nach erfolgreichem Schreiben aktiv halten. Überprüfen Sie die ausgegebene modelVersion, um zu sehen, wann die Instanz v8 beobachtet. Das Beispiel setzt voraus, dass ein Matching-Modell existiert; fügen Sie einen Ablehnungs- oder Wiederherstellungspfad für fehlenden oder veralteten Modellkontext hinzu. Lookup verwendet das während der Verarbeitung verfügbare Modell. Für ein Modell, das durch den Zeitstempel des Messwerts ausgewählt wird, verwenden Sie Zeitstempelabgleich.