A visualiser system for logic-based framework LPS
Created by Jinwei Zhang
LPS stand for Logic Production Systems. It is a "logic-based framework for programming databases and AI (intelligent agent) applications"
LPS combines both production rules and logic program in a single logic-based framework.
Logic production system framework is in the form of < \(R ,L ,D\) >
\(R\): stands for a set of reactive Rules. It is in the form of \( ∀X[antecedent→∃Yconsequent].\)
\(L\): stands for logic programming.\(L=L_{int}∪L_{events}∪L_{aux}.\)
\(D\): stands for domain theory \(D = D_{pre}∪D_{post}.\)
One-way,T-junction,Cross-junction,Roundabout,Overtaking
Logic: LPS, LPS.js, LPS.cli(testing)
Front-end: Boostrap, JavaScript, PixiJS,
Back-end: AWS, ExpressJS, MongoDB
oneway.lps
% we assume the destination is reachable
maxTime(200).
cycleInterval(30).
loadModule('../scripts/module.js').
fluents([
stopped(VehicleName),
velocity(VehicleName, Speed),
moving(VehicleName),
coordinate(X, Y),
location(VehicleName, coordinate(X, Y), Direction),
trafficLight(coordinate(X, Y), Working_status, Color, FacingDirection),
street(StreetName, coordinate(X, Y), Width, Height, Number_of_lane),
goal(VehicleName,coordinate(X, Y))
]).
% events will reserved for traffic lights
events ([
]).
actions ([
step(Vehicle, NextPlace),
turn(Vehicle, NewHeading),
arrive(Vehicle)
]).
initially([
moving(car0),
location(car0, coordinate(150, 225), eastward),
goal(car0,coordinate(900, 225)),
velocity(car0, 5)
]).
street(mainStreet , coordinate(100, 200), 900, 50, 1).
cloud(coordinate(140,100)).
cloud(coordinate(250,90)).
cloud(coordinate(300,120)).
cloud(coordinate(640,100)).
cloud(coordinate(750,90)).
cloud(coordinate(800,120)).
goal(Vehicle,coordinate(A, B)) from _ to T,
location(Vehicle, coordinate(X, Y), Direction), A==X, B==Y,moving(Vehicle) at T ->
% testPrint(Vehicle+ ' we have arrived'),
arrive(Vehicle) at T.
goal(Vehicle,coordinate(A, B)) from _ to T,
location(Vehicle, coordinate(X, Y), Direction), moving(Vehicle) at T ->
% need to find the right direction here
% driving forward
drive(Vehicle) from T to _.
drive(Vehicle) from T to T1 <-
location(Vehicle, coordinate(X, Y), Direction),
Direction == northward,
velocity(Vehicle, Num),
NewY = Y - Num,
NextPlace = coordinate(X, NewY),
step(Vehicle, NextPlace) from T1 to T2.
drive(Vehicle) from T to T1 <-
location(Vehicle, coordinate(X, Y), Direction),
Direction == southward,
velocity(Vehicle, Num),
NewY = Y + Num,
NextPlace = coordinate(X, NewY),
step(Vehicle, NextPlace) from T1 to T2.
drive(Vehicle) from T to T1 <-
location(Vehicle, coordinate(X, Y), Direction),
Direction == westward,
velocity(Vehicle, Num),
NewX = X-Num,
NextPlace = coordinate(NewX, Y),
step(Vehicle, NextPlace) from T1 to T2.
drive(Vehicle) from T to T1 <-
location(Vehicle, coordinate(X, Y), Direction),
Direction == eastward,
velocity(Vehicle, Num),
NewX = X + Num,
NextPlace = coordinate(NewX, Y),
step(Vehicle, NextPlace) from T1 to T2.
% on(coordinate(X,Y),Street) <-
updates(step(Vehicle, NextPlace), location(Vehicle, OldPlace, Direction), location(Vehicle, NextPlace, Direction)).
updates(turn(Vehicle, NewHeading) , location(Vehicle, Place, OldHeading), location(Vehicle, Place, NewHeading)).
terminates(arrive(Vehicle), moving(Vehicle)).
initiates(arrive(Vehicle), stopped(Vehicle)).