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¶
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¶
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)
}