A framework for the integration of Logic Programming in external systems for generic applications, conceived in order to help developers at designing and implementing complex reasoning tasks by means of logic-based solvers on different platforms.
We currently provide implementations of EmbASP in three different programming languages: Java, Python, and C#. EmbASP also contains ready-made libraries for embedding several logic-based solvers:
Note that DLV, DLV2 and Solver.Planning.Domains can also be used on Android.
The framework has been designed to be easily extensible and adaptable to different solvers and platforms. Solvers can be invoked in different ways: via REST API as for Solver.Planning.Domains, native binary execution as for most of the "desktop solvers", library invocation as in the Android solvers, or any other way that can be implemented using the OOP paradigm.
The general architecture of EmbASP is depicted in the following figure: it is intended as an abstract framework to be implemented in some object-oriented programming language.
In addition, this architecture can be specialized for different platforms, logic languages and solvers.
The figure also reports general dependencies among the main modules.
The framework architecture has been designed by means of four modules:
Base
,
Platforms
,
Languages
, and
Specialization
.
In the following, we denote with "solver" a logic-based system that is meant to be used by external application with the help of EmbASP.
The
Base
module defines the basic components of the Framework.
The Handler
component mediates the communication between the Framework and the user that can provide it with the input program(s) via the component InputProgram
, along with any desired solver's option(s) via the component OptionDescriptor
.
A Service
component is meant for managing the chosen solver executions.
Two different execution modes can be made available: synchronous or asynchronous.
While in the synchronous mode any call to the execution of the solver is blocking (i.e., the caller waits until the reasoning task is completed), in asynchronous mode the call is non-blocking: a Callback
component notifies the caller once the reasoning task is completed.
The result of the execution (i.e., the output of the logic system) is handled by the Output
component, in both modes.
The Platforms
module is meant for containing what is platform-dependent; in particular, the Handler
and Service
components from the Base
module that should be adapted according to the platform at hand, since they take care of practically launching solvers.
The DesktopHandler
manages the DesktopService
for the execution of the solver on a Desktop platform, and, in a similay way, the AndroidHandler
manages the AndroidService
on an Android platform.
The Languages
module defines specific facilities for each supported logic language.
The generic Mapper
component is conceived as an utility for managing input and output via objects, if the programming language at hand permits it.
The sub-module ASP comprises components such as ASPInputProgram
that adapts InputProgram
to the ASP case, while AnswerSets
, composed of a set of AnswerSet
, represents the Output
for ASP.
Moreover the ASPMapper
allow the management of ASP input facts and answer sets via objects.
The Datalog sub-module resembles the ASP sub-module very closely: DatalogInputProgram
is the Datalog equivalent of ASPInputProgram
, MinimalModels
is the equivalent of AnswerSets
, MinimalModel
is the equivalent of AnswerSet
, and DatalogMapper
is the equivalent of ASPMapper
.
Similarly, the sub-module PDDL includes PDDLInputProgram
, Action
, Plan
and PDDLMapper
.
The Specialization
module defines what is system-dependent; in particular, the Service
, Output
and OptionDescriptor
components from the Base
module should be adapted in order to effectively interact with the solver at hand.
In particular, this module contains specific extensions for the different solvers of the DesktopService
( DLVDesktopService
, DLV2DesktopService
, IDLVDesktopService
, DLVHEXDesktopService
, ClingoDesktopService
and SPDDesktopService
) and the AndroidService
(DLVAndroidService
and DLV2AndroidService
).
There are also the extensions of the AnswerSets
for ASP language (DLVAnswerSets
, DLV2AnswerSets
, DLVHEXAnswerSets
and ClingoAnswerSets
) of the Plan
for PDDL language (SPDPlan
), and of the MinimalModels
for the Datalog language (IDLVMinimalModels
).
For a complete documentation regarding EmbASP, visit our page on readthedocs.org.
It provides a detailed description about EmbASP implementations and some examples of EmbASP usage.
The framework is released under The MIT License (MIT).
The framework library for DLV on Android embeds the DLV system itself, which is free for academic and non-commercial educational use, as well as for use by non-profit organizations. For further information about DLV, please refer to the DLVSystem Ltd. home page.
DLVfit is a health and fitness app that monitors the user activity during the day and suggests some workout plans that depend on her age, weight, gender and goals. The app periodically stores some information about the user activities (running, walking, etc.) and infers the current amount of calories burned so far. When the user asks for a workout plan, DLVfit proposes a set of exercises that would allow the user to reach her daily goal, taking into account also to her preferences. The suggested workout plans are computed in the background by DLV via EmbASP.
The ASP program used within DLVfit can be found in the repository. Basically, the program guesses for possible fitness exercises to do in order to burn the remaing calories. Each answer set represent a possible workout plan, in which is ensured that the user's requirements about the calories to burn and the time to spend in the workout are respected. Moreover, also user's preferences are taken into account by means of weak constraints.
You can download the latest version of DLVfit here.
The app should work on most devices equipped with Android 4.x/5.x.
The list of compatible devices include (but it is not limited to):
GuessAndCheckers is a native mobile application that works as an helper for users that play "live" games of the (Italian) checkers (i.e., by means of physical board and pieces). The app, that runs on Android, can help a player at any time: by means of the device camera a picture of the board is taken, and the information about the current status of the game is properly inferred thanks to OpenCV, an open source computer vision and machine learning software; an ASP-based artificial intelligence module then suggests the move.
Thanks to EmbASP and the use of ASP, GuessAndCheckers features a fully-declarative approach that made easy to develop and improve several different strategies, also experimenting with many combinations thereof.
The source code of this application along with the Android Application Package (APK) are available online.
You can download the latest version of GuessAndCheckers here.
DLVEdu is an educational Android App for children, that integrates well-established mobile technologies, such as voice or drawn text recognition, with the modeling capabilities of ASP. In particular, it is able to guide the child throughout the learning tasks, by proposing a series of educational games, and developing a personalized educational path. The games are divided into four macro-areas: Logic, Numeric-Mathematical, Memory, and Verbal Language. The usage of ASP allows the application to adapt to the game experiences fulfilled by the user, her formative gap, and the obtained improvements.
The application continuously profiles the user by recording mistakes and successes, and dynamically builds and updates a customized educational path along the different games. The application features a "Parent Area", that allows parents to monitor child's achievements and to express some preferences, such as explicit filters of some games or educational areas.
Connect4 is an application that allows a user to play the popular Connect Four game (also known as Four-in-a-Row) against an ASP-based artificial player.
The Connect Four game is played by two opponents on a vertical 7*6 rectangular board.
At each turn, the players fill the board by dropping 1 disk into one of the column so that it falls from the top to the lowest unoccupied position in the column.
The winner is the first player who gets four of her disks in a line, connected either horizontally, vertically, or diagonally.
Different AIs have been implemented, ranging from the most powerful one implementing advanced techniques for the perfect play to the simplest one relying on some classical heuristic strategies. By using EmbASP, two different versions of the same app have been built: one for Android, making use of DLV, and one for Java-enabled desktop platforms, making use of clingo.
LoIDE is a web-based IDE for Logic Programming.
An extensive documentation can be found here.
A live beta version can be found online at https://www.mat.unical.it/calimeri/projects/loide
This online version uses the ASPServerExecutor to run the ASP solvers (using the EmbASP Framework).
Pac-Man Unity-EmbASP is a version of the Pac-Man game made using Unity as Game Engine and EmbASP as AI framework