130 likes | 282 Vues
JPF is an object-oriented knowledge representation language designed for probabilistic inference, primarily utilized in military R&D. It features a layered architecture that supports real-time inference with large-scale models. The framework includes tools like ICE for GUI modeling, an assessment engine for application support, and JSPI for efficient BN inference. JPF enables complex tasks such as object classification, tracking, sensor fusion, and decision-making using a frame-based abstraction, allowing users to build dynamic systems for advanced applications.
E N D
JPFProbabilistic Frames Masami Takikawa Information Extraction & Transport takikawa@iet.com JPF
JPF Overview • Object-oriented Knowledge Representation Language for Probabilistic Inference • Practical and Commercially Available • Used mostly for military R&D • Object-classification, tracking, sensor fusion, situation assessment, decision making, etc. • Targets real-time inference with large-scale models (at least hundreds of nodes)
Layered Architecture • ICE: GUI IDE & wizard for specific modeling task • Assessment Engine: application framework • Provides data-driven construction mechanism • JPF: OO modeling language • Provides frame-based abstraction • JSPIScript: OO scripting language • Provides easy instantiation/access/query • JSPI: BN inference engine • Provides efficient exact/approximate computation
Process OO modeling Instantiation and Connection Observation, Query, and Decision making frames BN Prob & Decision Assessment Engine JSPIScript JSPI ICE JPF C++ code Compiling JPF
JPF Language • Based on AI frame language (Precursor to OOPL) • Frame: class with multiple inheritance • Slot: instance variable • Facet: variable type • FrameInstance: instance JPF
Example: Electrical Circuits frame Circuit slot output facetdomain = [0,1] facet distribution = [.5, .5] end; Each slot specifies a BN node. Circuit output JPF
Inverter Frame Inverter frame Inverter isa Circuit slot input facetdomain = Circuit slot state facetdomain = [OK, Stuck0] facetdistribution = [.9, .1] slot output facetdomain = [0,1] facetparents = [input.output,state] facetdistribution = function input,state { if state==OK then 1-input else 0 end } end; Input Circuit output state output JPF
Two Inverter Instances inp1 = Circuit->makeInstance("inp1"); inv1 = Inverter->makeInstance("inv1"); inv1->input = inp1; inv2 = Inverter->makeInstance("inv2"); inv2->input = inv1; Frame->makeInstance(“name”) will create a new instance. frameInstance->slot = X will connect frame instances. JPF
Two Inverter BN Inverter 1 Input Circuit output state Inverter 2 state output output Prediction: P(inv2.output | inp.output) Diagnosis: P(inv1.state | inp.output, inv1.output) Decoding: P(inp.output | inv2.output) JPF
Sensor Frame – Assoc Hyp frame Sensor slot whichCircuit facet domain = Circuit facet distribution = UniformDiscreteDistribution slot observation facet domain = [0,1] facet parents = [whichCircuit.output] facet distribution = function output { if output==0 then [0.9, 0.1] else [0.2, 0.8] end } end; JPF
Two Sensor Instances s1 = Sensor->makeInstance(); s1->whichCircuit->addValueToDomain(inp1); s1->observation->observe(0); s2 = Sensor->makeInstance(); s2->whichCircuit->addValueToDomain(inv1); s2->whichCircuit->addValueToDomain(inv2); s2->observation->observe(0); JPF
Two Sensor BN Inverter 1 Inverter 2 Input Circuit output state state Which inverter is sensor2 connected to? output output Sensor 1 Sensor 2 Which [inp1] Obs=0 Which [inv1,inv2] Obs=0 JPF
Other Topics • Subtype Hypotheses • Existence Hypotheses • Efficient Rep/Comp of Assoc Hyp • Efficient Rep/Comp of Aggregation (e.g.,MAX) • Partially Dynamic BN (Markov Processes) • Decision and Utility • Inference (Exact/Approximation) • Query Compiler & Real-time Computing • Modeling Methodologies (How to debug?) • Modeling Idioms (Roles, Sets, Relations, etc.) • Dynamic Data-driven Construction JPF