A framework for the integration (embedding) of Logic Programming in external systems for generic applications.
It helps developers at designing and implementing complex reasoning tasks by means of solvers on
different platforms.
The framework can be implemented in a object-oriented programming language of choice, easing and guiding the generation of suitable libraries for the use of specific solvers on selected platforms. We currently provide 3 implementations (in Java , in Python and in C# ) and ready-made libraries for the embedding of the ASP (Answer Set Programming) solvers DLV, DLV2, clingo, DLVHEX and the PDDL (Planning Domain Definition Language) cloud solver Solver.Planning.Domains (SPD) on the Desktop platform and of DLV and SPD on the Mobile (Android™) one (available only for the Java version).
However, the framework has been designed to be easily extensible and adaptable to different solvers and platforms. It is worth to notice that solvers are invoked in different modes; for instance, SPD is invoked via a remote connection, while for the other, binaries are effectively embedded and natively executed.
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.
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
, DLVHEXDesktopService
,
ClingoDesktopService
and SPDDesktopService
) and the AndroidService
(
DLVAndroidService
, DLV2AndroidService
and ). There are also the extensions of the
AnswerSets
for ASP language (DLVAnswerSets
, DLV2AnswerSets
, DLVHEXAnswerSets
and
ClingoAnswerSets
) and of the Plan
for PDDL language (SPDPlan
).
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