This npm package provides a general framework for choice logics. It offers a flexible and extensible foundation for preference modeling and reasoning, encapsulating various choice logics, including Qualitative Choice Logic (QCL) and Conjunctive Choice Log
npm install choicelogicsTo install the package, use npm:
``bash`
npm install choicelogics
`typescript`
import { QCCL, PropositionalLogic, ChoiceResult, normalizeChoiceResult, choiceResultToBool, boolToChoiceResult, validateChoiceResult } from "choicelogics";
`typescript
const a: ChoiceResult = { degree: 2, optionality: 1 };
const b: ChoiceResult = { degree: Infinity, optionality: 2 };
const result1 = QCCL.orderedDisjunction(a, b);
console.log(result1); // { degree: 2, optionality: 3 }
const result2 = PropositionalLogic.and(a, b);
console.log(result2); // { degree: Infinity, optionality: 2 }
const boolResult = choiceResultToBool(a);
console.log(boolResult); // true
const choiceResult = boolToChoiceResult(false);
console.log(choiceResult); // { degree: Infinity, optionality: 1 }
const isValid = validateChoiceResult(a);
console.log(a) // true
`
#### QCCL (Extends PropositionalLogic)static orderedDisjunction(a: ChoiceResult, b: ChoiceResult): ChoiceResult
A combination of QCL and CCL
- static orderedConjunction(a: ChoiceResult, b: ChoiceResult): ChoiceResult
-
#### PropositionalLogic
- static and(a: ChoiceResult, b: ChoiceResult): ChoiceResultstatic or(a: ChoiceResult, b: ChoiceResult): ChoiceResult
- static negation(a: ChoiceResult): ChoiceResult
-
#### ChoiceResult
`typescript`
type ChoiceResult = {
degree: number;
optionality: number;
};
#### ConnectiveFunction
`typescript`
type ConnectiveFunction = (a: ChoiceResult, b: ChoiceResult) => ChoiceResult;
#### ModifierFunction
`typescript`
type ModifierFunction = (a: ChoiceResult) => ChoiceResult;
#### ConnectMultipleFunction
`typescript`
type ConnectMultipleFunction = (...args: ChoiceResult[]) => ChoiceResult;
#### normalizeChoiceResult(result: ChoiceResult): ChoiceResult
#### boolToChoiceResult(value: boolean): ChoiceResult
#### choiceResultToBool(result: ChoiceResult): boolean
#### validateChoiceResult(result: ChoiceResult): boolean
You can extend the existing logic by inheriting from the provided classes and using the function types ConnectiveFunction, ModifierFunction, and ConnectMultipleFunction. Here is an example of how to create a new logic class by extending PropositionalLogic:
`typescript
import { PropositionalLogic, ChoiceResult, ConnectiveFunction, ModifierFunction } from "choicelogics";
class CustomLogic extends PropositionalLogic {
public static customOperation: ConnectiveFunction = (a, b) => {
// Custom logic implementation
return {
degree: a.degree + b.degree,
optionality: a.optionality * b.optionality,
};
};
public static customModifier: ModifierFunction = (a) => {
// Custom modifier logic
return {
degree: a.degree * 2,
optionality: a.optionality * 2,
};
};
}
const a: ChoiceResult = { degree: 2, optionality: 1 };
const b: ChoiceResult = { degree: 3, optionality: 2 };
const result = CustomLogic.customOperation(a, b);
console.log(result); // { degree: 5, optionality: 2 }
const modifierResult = CustomLogic.customModifier(a);
console.log(negationResult); // { degree: 4, optionality: 2 }
``
This project is licensed under the ISC License.