Files
core/docs/internal/qualitative-README.md
John Dvorak f8f6c5cb1b
CI / test (push) Successful in 5m45s
CI / benchmark (push) Successful in 43s
CI / publish (push) Has been skipped
cleanup: remove dead code, stale shipped scaffolding, internal docs
Dead code with zero callers (deprecation notes promised removal):
- RelationCSR index: always-off option (useRelationCsrIndex), never
  enabled in production, wired through RelationManager/RelationUpdates/
  RelationLookup. Removed the module and all wiring.
- getAggregatedBlurredValue (RelationManager) and aggregateBlurredValues
  (ValueManager): @deprecated shims, zero callers.
- QualitativeRelationalComparatorRule._aggregateBlurredValues:
  @deprecated shim, zero callers.

Kept compareRelationValues: non-deprecated public API, coherent and
clock-threaded, just currently callerless.

Stale scaffolding shipping in the published artifact (files: src/):
- src/ast/tests/* and src/ast/examples/*: orphaned duplicates of
  tests/ast/, zero references anywhere, 11 files in the tarball.
  Removed; the live copies live in tests/ast/.

Internal docs moved out of the shipped surface (1266 lines) to
docs/internal/: VALUE_OPTIMIZATION_SUMMARY, rules API_SPECIFICATION,
ast README, qualitative README — repo-kept, not packaged.

Tarball .md count: 11 -> 1. Rigor 251/251, full suite 853/791/0.
2026-08-02 21:03:37 -07:00

257 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Qualitative Capacity System
This module provides a complete implementation of qualitative capacities (q-capacities) as described in the research paper on qualitative capacities and their applications to evidential reasoning, decision making, and imprecise possibility.
## Overview
A qualitative capacity γ: 2^W → L is a monotonic set-function where:
- γ(∅) = 0, γ(W) = 1
- If A ⊆ B, then γ(A) ≤ γ(B)
- L is a finite totally ordered scale with order-reversing negation
The core design principle is to use the Qualitative Möbius Transform (QMT) γ# as the canonical internal representation for any q-capacity γ.
## Core Components
### 1. SetUtils
Utility functions for working with Sets as Map keys, providing canonical string representations for consistent and efficient Map operations.
```javascript
import { getSetKey, setFromKey, setsEqual } from './src/qualitative/index.js';
const set = new Set(['a', 'b', 'c']);
const key = getSetKey(set); // "a,b,c"
const reconstructed = setFromKey(key); // Set(['a', 'b', 'c'])
const areEqual = setsEqual(set, reconstructed); // true
```
### 2. QualitativeScale
Finite totally ordered scales with order-reversing negation.
```javascript
import { QualitativeScale } from './src/qualitative/index.js';
// Create a 5-point scale
const scale = QualitativeScale.fivePoint(); // [0, 0.25, 0.5, 0.75, 1]
// Test operations
console.log(scale.min(0.25, 0.75)); // 0.25
console.log(scale.max(0.25, 0.75)); // 0.75
console.log(scale.negate(0.25)); // 0.75 (order-reversing)
```
### 3. QualitativeCapacity
Q-capacities with QMT internal representation.
```javascript
import { QualitativeCapacity } from './src/qualitative/index.js';
const stateSpace = ['s1', 's2', 's3'];
const scale = QualitativeScale.ternary();
// Create a simple support capacity
const ssc = QualitativeCapacity.createSimpleSupport(
stateSpace,
['s1'],
0.5,
scale
);
// Get capacity values
console.log(ssc.getCapacity(['s1'])); // 0.5
console.log(ssc.getCapacity(['s1', 's2'])); // 1
// Check if it's a necessity measure
console.log(ssc.isNecessityMeasure()); // true
```
### 4. QualitativeFusion
Theoretically sound fusion rules for capacity combination.
```javascript
import { QualitativeFusion } from './src/qualitative/index.js';
// Create multiple capacities
const cap1 = QualitativeCapacity.createSimpleSupport(stateSpace, ['s1'], 0.5, scale);
const cap2 = QualitativeCapacity.createSimpleSupport(stateSpace, ['s2'], 0.5, scale);
// Normalized conjunctive fusion (theoretically sound)
const fused = QualitativeFusion.normalizedConjunctive([cap1, cap2]);
// Disjunctive fusion
const disjunctive = QualitativeFusion.disjunctive(cap1, cap2);
// Sugeno integral for decision making
const decisionFunction = { 's1': 0.5, 's2': 1, 's3': 0.5 };
const sugenoValue = QualitativeFusion.sugenoIntegral(fused, decisionFunction);
```
### 5. OWAQualitativeFusion
Bag algebras for sophisticated qualitative aggregation.
```javascript
import { OWAQualitativeFusion } from './src/qualitative/index.js';
const values = [0.25, 0.5, 0.75];
const metas = [{ source: 'rule1' }, { source: 'rule2' }, { source: 'rule3' }];
// Different aggregation modes
const maxResult = OWAQualitativeFusion.max(values, metas, scale);
const majorityResult = OWAQualitativeFusion.majority(values, metas, scale);
const optimisticResult = OWAQualitativeFusion.optimistic(values, metas, scale);
// Configurable activation threshold
const selectiveResult = OWAQualitativeFusion.max(values, metas, scale, 0.8);
// Proper Sugeno integral
const sugenoResult = OWAQualitativeFusion.sugenoIntegral(capacity, decisionFunction);
```
### 6. QMTOWAFusion
Theoretically sound OWA-like operators that work directly on QMTs.
```javascript
import { QMTOWAFusion } from './src/qualitative/index.js';
// These methods preserve monotonicity by working on QMTs directly
const optimistic = QMTOWAFusion.optimisticFusion([cap1, cap2]);
const pessimistic = QMTOWAFusion.pessimisticFusion([cap1, cap2]);
const majority = QMTOWAFusion.majorityFusion([cap1, cap2]);
const priority = QMTOWAFusion.priorityFusion([cap1, cap2], [10, 5]);
```
## Theoretical Considerations
### Pointwise OWA Fusion Warning
The `pointwiseOWAFusion` method (formerly `fuseCapacities`) performs pointwise OWA fusion on capacity values, which **does NOT guarantee** that the result is a valid qualitative capacity. The resulting set-function may violate the fundamental monotonicity property: A⊆B ⟹ γ(A)≤γ(B).
**Use this method only for experimental purposes or when monotonicity is not required.**
For theoretically sound capacity fusion, use:
- `QualitativeFusion.normalizedConjunctive()`
- `QualitativeFusion.disjunctive()`
- `QMTOWAFusion` methods
### Qualitative OWA Operator
The qualitative OWA operator implements a novel weighted maximum where weights act as "gates" that must pass a threshold to allow their corresponding values to be considered. This is distinct from the standard Sugeno integral but provides a practical way to introduce weight influence in purely ordinal contexts.
The activation threshold is configurable (default 0.5) to allow for more or less "selective" aggregations.
### Sugeno Integral
The Sugeno integral is the qualitative counterpart to the Choquet integral and provides a theoretically sound way to aggregate qualitative values with respect to a capacity:
S_γ(f) = max_{i=1}^n min(f_{(i)}, γ(A_{(i)}))
where f_{(i)} are the sorted values in descending order and A_{(i)} = {w_{(1)}, ..., w_{(i)}}.
## Applications
### 1. Evidential Reasoning
Combine testimonies from different sources using Simple Support Capacities and normalized conjunctive fusion.
```javascript
// Create testimonies as Simple Support Capacities
const testimony1 = QualitativeCapacity.createSimpleSupport(
stateSpace,
['s1'],
0.8,
scale
);
const testimony2 = QualitativeCapacity.createSimpleSupport(
stateSpace,
['s2'],
0.6,
scale
);
// Fuse testimonies
const combinedEvidence = QualitativeFusion.normalizedConjunctive([
testimony1,
testimony2
]);
```
### 2. Qualitative Decision Making
Use Sugeno integrals to evaluate decisions based on qualitative utility functions and uncertainty represented by q-capacities.
```javascript
// Define decision function (utility for each state)
const utility = {
's1': 0.8, // High utility
's2': 0.4, // Medium utility
's3': 0.2 // Low utility
};
// Evaluate decision using Sugeno integral
const decisionValue = QualitativeFusion.sugenoIntegral(capacity, utility);
```
### 3. Imprecise Possibility
Represent ill-known possibility measures bounded by lower (q-capacity) and upper (possibility) measures.
```javascript
// Get upper capacity (possibility measure)
const upperCapacity = capacity.getUpperCapacity();
// Get contour function
const contour = capacity.getContourFunction();
// Get conjugate capacity
const conjugate = capacity.getConjugate();
```
## Performance Considerations
The current implementation has O(2^|W|) complexity for operations that generate all subsets. This is suitable for small state spaces (|W| < 20) but may not scale to larger ones.
### Optimizations Implemented
1. **QualitativeScale Optimizations**:
- `contains()`: O(1) average time using Set-based lookup
- `indexOf()`: O(log n) time using binary search
- These optimizations significantly improve performance for scale operations
2. **Canonical QMT Optimization**:
- `_convertToCanonicalQMT()`: Only checks immediate proper subsets instead of all smaller subsets
- Uses the mathematical property: γ#(A) > 0 ⟺ γ(A) > max_{w∈A} γ(A{w})
- Provides substantial performance improvement for canonicalization
3. **String Key Robustness**:
- All Set objects are converted to canonical string keys for Map operations
- Eliminates JavaScript Set reference comparison issues
- Ensures consistent and efficient Map key operations
4. **Canonicalization Consistency**:
- All fusion methods return canonical QMTs by default
- Ensures minimal representation and consistent behavior
- Simplifies subsequent operations and saves memory
For large state spaces, consider:
1. Working with QMTs directly (already implemented)
2. Using sparse representations
3. Implementing approximation algorithms
## Future Research Directions
1. **QMT-based OWA**: Develop more sophisticated OWA-like operators that work directly on QMTs
2. **Complexity Optimization**: Implement efficient algorithms for large state spaces
3. **Approximation Methods**: Develop approximation algorithms for intractable operations
4. **Integration with DSL**: Extend the Evidence DSL to support qualitative capacities
## References
This implementation is based on the research paper "Qualitative capacities: basic notions and potential applications" and related work on qualitative uncertainty theory, possibility theory, and evidential reasoning.