130 likes | 145 Views
JPF is an OO modeling language for real-time inference applications, offering frame-based abstraction and efficient computation. Includes ICE, Assessment Engine, JSPIScript, JSPIScript, JSPI, and BN inference engine.
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