Observation cost

<< Click to Display Table of Contents >>

Navigation:  Using SMILE > Diagnosis >

Observation cost

Observing the value of a variable is often associated with a cost. For example, in order to observe the platelet count, one has to draw a blood sample and subject it to examination by professionals. Measuring the temperature of an air conditioner exhaust unit requires a technician's time. In order to perform an optimal diagnosis, one has to take into account the value of information along with the cost of obtaining it. For any diagnostic observation node, we can specify the cost of observing its value by calling the DSL_node::SetCosts method and read the cost by calling DSL_node::GetCosts.

The cost of performing a test can be expressed on some scale, like currency or time in minutes. It is also possible to specify negative number as cost. Negative cost indicate that tests so inexpensive that they should always be performed, for example checking the car model when diagnosing a car.

When observing the state of a node is independent of whether other nodes are observed or not, the cost is just a single number. Sometimes, however, the cost of observing a variable is not independent of observing other variables. For example, once a blood sample is drawn, performing additional tests on the sample is cheaper than performing these tests when no blood sample is available. The cost of measuring some parameter of a locomotive engine depends on whether the locomotive is in the shop or in the field. It may be much lower when the locomotive is in the shop. Taking off a locomotive cover may take a few hours but once it is removed, many tests become inexpensive. To represent such cases, use DSL_network::AddArc with its 3rd argument set to dsl_costObserve. This causes an observation cost arc to be added to the network. The observation cost arcs are not constrained by 'normal' arcs. When diagnostic observation has incoming cost arcs, its observation cost is a multi-dimensional matrix, just like conditional probability table, but with the last dimension size equal to one.

To remove a cost arc, call DSL_network::RemoveArc with dsl_costObserve as its last argument. DSL_network::GetCostParents and GetCostChildren return references to arrays containing handles of nodes that are cost parents and children of the specified node.

The observation costs are saved with the network when .xdsl format is used.