Skip to content

COOM Profile: D-COND

Synopsis

The COOM D-COND profile extends the D-BASE profile by allowing the assignment of conditioned default values. Default values can be conditioned on specific constellations of other values, i.e., they can change during the configuration session when a specific value is set by the user (or another constraint).

In practice, it is possible that a knowledge base defines default knowledge that contradicts itself, because multiple concurrent default rules apply for the same feature.

For conflicting knowledge, the actual conflict resolution strategy is up to the reasoner implementation.

We give an example of simple condition defaults (PoorLightBike) and an example with conditioned defaults with conflicts (SoftBrakesBike).

Building Blocks

Example: Poor Light Bike

Poor Light Bike

The PoorLightBike automatically chooses the color White in case the user wants to configure the bike without lights. This way, the bike is at least a little more visible in the dark thanks to its color.

product {
    PoorLightBike poorLightBike
}

structure PoorLightBike {
    bool lights
    Color color
}

enumeration Color { White Black Red }

behavior PoorLightBike {
    condition lights = false
    default color = White
}

Example: Soft Brakes Bike

Soft Brakes Bike

For the SoftBrakesBike the user is able to configure the bike with a suspensionFork (for better comfort) and special features for the handle, i.e., the special brakeLever and extraSoftGrips of the handle. The product management of the bike manufacturer proposes the defaults suspensionFork = true and brakeLever = Basic for the initial configuration session (1). Also, for a selected suspensionFork they also propose to have extraSoftGrips on the bike handle. However, due to technical constraints extraSoftGrip and a basic brakeLever cannot be installed at the same time on the bike (2). This constraint raises a conflict between the default knowledge behaviors.

product {
    SoftBrakesBike softBrakesBike
}

structure SoftBrakesBike {
    Handle handle
    bool   suspensionFork
}

structure Handle {
    BrakeLever brakeLever
    bool       extraSoftGrips
}

enumeration BrakeLever { Basic Rugged }

// (1) Product management defaults
behavior SoftBrakesBike {
    default suspensionFork = true
    default handle.brakeLever = Basic

    condition suspensionFork = true
    default handle.extraSoftGrips = true
}

// (2) Constraints given be Engineering department
behavior Handle {
    // not both, extraSoftGrips and basic brakeLever can build on the Handle
    require ! (extraSoftGrips = true && brakeLever = Basic)
}