Parametersatzgenerator für Projekte

Hinweise zur Verwendung finden Sie im Abschnitt Parametersatzgenerator im Kapitel Projekt-Editor.

Die Parametersatzgeneratoren werden im Projektgeneratoren-Verzeichnis abgelegt. Zum Lieferumfang von ecu.test gehört bereits ein Beispiel, welches Sie im Programmverzeichnis unter Templates/DefaultData/ProjectGenerators finden können. Kopieren Sie dieses in den ProjektGeneratoren-Ordner, um das Beispiel verwenden zu können.

Die Schnittstelle von Parametersatzgeneratoren ist in der Parametersatz-Generator-API dokumentiert.

Einschränkungen

Bei der Projektgenerierung und der damit verbundenen statischen Erzeugung der Parametersätze kann nicht auf die Rückgabeparameter des letzten Package-Aufrufs zurückgegriffen werden und das Setzen von Konstanten ist nicht möglich. Die dynamische Erzeugung der Parametersätze zur Laufzeit ist von diesen Einschränkungen nicht betroffen.

Beispiele

Einfaches Beispiel für die Implementierung der API

# -*- coding: utf-8 -*-

from tts.core.project.generator.ParamGenerator import ParamGenerator
import os
import wx

class PgTextParser(ParamGenerator):

    ID          = '56fe8f8f-e11d-11df-a48c-12386bddbbec'
    NAME        = 'Textdatei Parser'
    DESCRIPTION = 'Verarbeitet eine Textdatei zeilenweise'
    SERIALIZE   = {'filename' : ('FILENAME', 'unicode', r'')}

    def __init__(self):
        self.filename        = r''
        self.parameterSets   = []
        self.targetItemCount = 0

    def GetDialog(self):
        return DlgFileSelector(self)

    def GetParameterText(self):
        return 'Filename: {}'.format(self.filename)

    def PreGeneration(self):
        self.parameterSets = []
        self.targetItemCount = 0
        with open(self.filename, 'r') as fileDescriptor:
            for textLine in fileDescriptor.readlines():
                paramSet = {'textLine': textLine}
                self.parameterSets.append(paramSet)
                self.targetItemCount += 1

    def GetTargetItemCount(self):
        return self.targetItemCount

    def GenerationIterator(self):
        for paramSet in self.parameterSets:
            yield self.CreateCycleData(paramSet)

    def PostGeneration(self):
        pass

    def Check(self):
        if not os.path.exists(self.filename):
            return ['Datei existiert nicht!']
        return []


class DlgFileSelector(wx.FileDialog):
    def __init__(self, generator):
        super().__init__(None,
                         'Select text file',
                         wildcard='Text files (*.txt)|*.txt',
                         style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
        self.generator = generator

    def ShowModal(self):
        result = super().ShowModal()
        if result == wx.ID_OK:
            self.generator.filename = self.Path
        return result

Mitgelieferte Beispiele

Um die mitgelieferten Beispiele verwenden zu können, müssen diese zunächst in Ihren Workspace kopiert werden.

Aktivieren Sie hierzu im Dialog zur Workspace-Auswahl die Option Beispiele kopieren. Dadurch werden die nötigen Beispiele in den Workspace übernommen.

Calculator

Der Parametersatzgenerator Calculator veranschaulicht das Setzen von Parametern und Konstanten sowie den Zugriff auf die Rückgabewerte eines Durchlaufs.

Der Generator liest eine CSV-Datei ein, in der in jeder Zeile drei durch Semikolon getrennte Werte stehen. Der erste und dritte Wert sind Zahlen. Der zweite Wert ist eine Rechenoperation. Mit diesen Werten wird ein Parametersatz für ein Calculate-Package erzeugt, das dafür sorgt, dass die beiden Zahlen mit der jeweiligen Rechenoperation verarbeitet werden. Die Ergebnisse werden gesammelt und nach dem Parsen der CSV-Datei an das Calculate-Package übergeben, um sie kompakt als Zusammenfassung aufzulisten.

Den Generator finden Sie unter <Projektgeneratoren-Verzeichnis>/PgCalculator. Ein fertiges Beispielprojekt, welches den Generator verwendet, finden sie unter <Package-Verzeichnis>/ExamplePackages/PgCalculator/Calculate.prj. Als einzigen Schritt müssen sie dem Generator noch die CSV-Datei zuweisen, die Sie unter <Workspace>/ExampleData/PgCalculatorTestData.csv finden. Öffnen Sie dazu den Einstellungsdialog des Generators durch einen Doppelklick auf den Generator. Speichern Sie das Projekt und führen Sie es aus. Im Report können Sie sich die generierten Durchläufe anschauen.

CheckEnvelope

Der Parametersatzgenerator CheckEnvelope veranschaulicht das Hinzufügen von Aufnahmen zu einer Aufnahmegruppe. Dieses Beispiel setzt das Traceanalyse-Paket voraus.

Der Generator liest alle Aufzeichnungen aus einem angegebenen Verzeichnis ein, und parametriert damit ein Analyse-Package. Das Analysepackage enthält ein Referenzsignal, mit dem eine Hüllkurvenberechnung für jede parametrierte Aufnahme durchgeführt wird.

Den Generator finden Sie unter <Projektgeneratoren-Verzeichnis>/PgCheckEnvelope. Ein fertiges Beispielprojekt, welches den Generator verwendet, finden Sie unter <Package-Verzeichnis>/ExamplePackages/AnalysisExamples/ParameterGenerator/CheckEnvelope.prj. Als einzigen Schritt müssen sie dem Generator noch das Verzeichnis mit den Beispielaufnahmen zuweisen, dass Sie unter <Workspace>/ExampleTraces/ParameterGenerator/ActualRecordings finden. Öffnen Sie dazu den Einstellungsdialog des Generators durch einen Doppelklick auf den Generator. Speichern Sie das Projekt und führen Sie es aus. Im Report können Sie sich die generierten Durchläufe anschauen.

ParticleSwarmOptimizer

Der Parametersatzgenerator ParticleSwarmOptimizer veranschaulicht das Vorgehen zur Parameterrückführung während einer Parametervariation.

Bei einer klassischen Parametervariation stehen die Eingangsparameter aller Testläufe bereits vor der Ausführung fest. Im Gegensatz dazu können mittels der von diesem Optimierer verwendeten Schnittstelle Eingangsparameter dynamisch anhand der Rückgabewerte vorheriger Läufe festgelegt werden. Dieses Vorgehen ist insbesondere sinnvoll, wenn ein Rückgabewert minimiert oder maximiert werden soll. In diesem Beispiel wird ein Partikelschwarm als Optimierungsalgorithmus eingesetzt. Da unterschiedliche Algorithmen bei verschiedenen Problemklassen Stärken zeigen, ist in der Praxis eine Voranalyse des Problems zur richtigen Algorithmenwahl hilfreich.

Den Generator finden Sie unter <Projektgeneratoren-Verzeichnis>/PgParticleSwarmOptimizer. Ein fertiges Beispielprojekt, welches den Generator verwendet, finden Sie unter <Package-Verzeichnis>/ExamplePackages/PgParticleSwarmOptimizer/OptimizationProject.prj. Dieses Projekt ist bereits fertig konfiguriert und ausführbereit. Es zeigt beispielhaft die Minimierung eines Rückgabewerts von Package PackageToOptimize.pkg. Den Verlauf der gewählten Eingabeparameter und den daraus resultierenden Rückgabewerten können Sie im Report sehen.

Weitere Optimierungsalgorithmen

Weitere Beispielimplementierungen für verschiedene Optimierungsalgorithmen finden Sie ebenfalls unter <Projektgeneratoren-Verzeichnis>.

Verfügbare Beispiele:

  • Differential evolution

  • Simulated annealing

  • Scipy minimize