Skip to content

feat: feat: custom serialize to compress measurement result #709

@michael-johnston

Description

@michael-johnston

Is your feature request related to a problem? Please describe.

The serialised representation of a MeasurementResult contains a large amount of redundant information as every ObservedPropertyValue repeats the same ExperimentReference object (as ObservedProperty it need it to generate the id). This can be upwards of 3.5 times more than is actually required.

This applies to the data transferred by show entities, show operation, show results, show requests, show details space, and get measurementrequests

Example, for two measured values of solve_times and objective_values from a particular experiment you would get

  - property:
      experimentReference:
        actuatorIdentifier: custom_experiments
        experimentIdentifier: solve_mip
        parameterization:
        - property:
            identifier: mps_file
          value: sorrell3.mps.gz
          valueType: STRING_VALUE_TYPE
        - property:
            identifier: time_limit_s
          value: 3600
          valueType: NUMERIC_VALUE_TYPE
        - property:
            identifier: progress_interval_s
          value: 60
          valueType: NUMERIC_VALUE_TYPE
      targetProperty:
        identifier: solve_times
    value:
    - 2065.2863233109965
    - 3600.004925447007
    - 565.9625509519974
    - 2771.719036005001
    - 2362.510065069
    valueType: VECTOR_VALUE_TYPE
  - property:
      experimentReference:
        actuatorIdentifier: custom_experiments
        experimentIdentifier: solve_mip
        parameterization:
        - property:
            identifier: mps_file
          value: sorrell3.mps.gz
          valueType: STRING_VALUE_TYPE
        - property:
            identifier: time_limit_s
          value: 3600
          valueType: NUMERIC_VALUE_TYPE
        - property:
            identifier: progress_interval_s
          value: 60
          valueType: NUMERIC_VALUE_TYPE
      targetProperty:
        identifier: objective_values
    value:
    - -16.0
    - -16.0
    - -16.0
    - -16.000000000000007
    - -16.0
    valueType: VECTOR_VALUE_TYPE

of the ~700 characters required for each value ~560 are repeated. So for such values it currently takes 7000 chars but could take 1960 (72% compression, 3.5x less)

Describe the solution you'd like.

In general we need to change the serialized representation - either using a custom-serialiser+validator, or by changing the MeasurementResult model itself.

In general the serialization (which is a list of ObservedPropertyValues currently) should become, for example

experimentReference: 
  actuatorIdentifier: custom_experiments
        experimentIdentifier: solve_mip
        parameterization:
        - property:
            identifier: mps_file
          value: sorrell3.mps.gz
          valueType: STRING_VALUE_TYPE
        - property:
            identifier: time_limit_s
          value: 3600
          valueType: NUMERIC_VALUE_TYPE
        - property:
            identifier: progress_interval_s
          value: 60
          valueType: NUMERIC_VALUE_TYPE
values: #LIST OF PropertyValues
   - value: $VALUE
      valueType: $VALUE_TYPE
      property: 
           identifier: $IDENT

Additional context.

Should we upgrade sample-stores - do we have a way?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions