-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathactionplugin.html
More file actions
586 lines (583 loc) · 33.2 KB
/
actionplugin.html
File metadata and controls
586 lines (583 loc) · 33.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dlvhex</title>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css"></link>
<link rel="stylesheet" type="text/css" media="all" href="css/text.css"></link>
<link rel="stylesheet" type="text/css" media="all" href="css/960.css"></link>
<link rel="stylesheet" type="text/css" media="all" href="css/style.css"></link>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<body>
<!-- Title -->
<!--
<div class="container_12">
<div class="grid_12" id="title">
<h1>dlvhex</h1>
</div>
</div>
-->
<!-- Menu -->
<div class="container_12">
<div class="grid_12" id="menu">
<a href="index.html">About</a>
<a href="people.html">People</a>
<a href="news.html">News</a>
<a href="downloadb.html">Download Binaries</a>
<a href="downloads.html">Download Source</a>
<a href="support.html">Support</a>
<a href="documentation.html">Documentation</a>
<a href="demo.php">Online Demo</a>
<a href="http://asptut.gibbi.com/">ASP Tutorial</a>
<a href="related.html">Related Work</a>
<a href="applications.html">Applications</a>
<a href="literature.html">Literature</a>
</div>
</div>
<!-- Information -->
<div class="container_12">
<div class="grid_9">
<h2>
The Action Plugin and Action Addon Framework</h2>
<hr>
<div style="margin-left: 50px;">
<a href="#TheProject">HEX-programs with Action Atoms: The Project</a><br>
<ul>
<li><a href="#Introduction">Introduction</a> </li>
<li><a href="#Installation">Installation</a> </li>
<li><a href="#TheActionAtomFunction">The Action Atom Function</a> </li>
<li><a href="#HowToWriteYourOwnActionAddon">How to write your own Action Addon</a>
</li>
<li><a href="#TemplateToBuildAnActionAddon">Template to build an Action Addon</a>
</li>
<li><a href="#Examples">Examples</a> </li>
<li><a href="#NewFeaturesOfVersion2_0">New features of version 2.0</a> </li>
</ul>
<a href="#TheTeam">The Team</a><br>
<a href="#Download">Download</a><br>
<ul>
<li><a href="#ActionPlugin">Action Plugin</a> </li>
<li><a href="#ActionAddons">Action Addons</a> </li>
</ul>
<a href="#Publications">Publications</a><br>
</div>
<hr>
<br>
<br>
<h2 id="TheProject">
HEX-programs with Action Atoms: The Project</h2>
<hr>
<div>
<br>
<h3 id="Introduction">
Introduction</h3>
<div>
<p>
This dlvhex Plugin provides an implementation of the ActHEX language [<a href="#Publications">1</a>].</p>
<p>
The plugin allows the execution of external actions, via the introduction of <em>Action
Atoms</em>, that can appear in rules' head.</p>
<p>
Actions can execute any arbitrary code, access to web sites, execute scripts in
any language, update databases etc.</p>
<p>
Intuitively, ActHEX programs extend HEX programs allowing rules like:</p>
<pre class="fragment">
#robot[move,D]{b, T}[2 : 1] :- direction(D), time(T).
</pre>
<p>
the above can be seen as a rule for scheduling a movement of a given robot indirection
D with execution order T. <em>Action Atoms</em> are executed according to <em>Execution
Schedules</em>. The latter in turn depend on answer sets, which in their generalized
form, can contain <em>Action Atoms</em>. The order of execution within a schedule
can be specified using a Precedence attribute (which in the above rule is set by
the variable T); also actions can be associated with Weights and Levels (the values
2 and 1 above). Weights and Levels are used for computing a cost function which
helps in selecting preferred actions, as defined <a href="actionplugin/preferences.html">
here</a>. <em>Action Atoms</em> allow to specify whether they have to be executed
<i>bravely</i> (the <code>b</code> switch above), <i>cautiously</i> or <i>preferred
cautiously</i>, respectively meaning that an action atom a can get executed
if it appears in at least one, all, or all best cost Answer Sets.</p>
<p>
Specific action can be programmed the <b>ActionAddon</b> framework. An <b>ActionAddon</b>
is a shared library that provides all the facilities for realising custom action
executions.</p>
<p>
If you designed a nice <b>ActionAddon</b>, tell <a href="mailto:acthex_AT_mat.unical.it">
us</a>.</p>
</div>
<br>
<h3 id="Installation">
Installation</h3>
<div>
<p>
You can access the current source of the <b>ActionPlugin</b> <a href="https://github.com/hexhex/actionplugin">
here</a>. For putting ActHEX programs at work, you will need dlvhex installed
in your system (you can download it from <a href="download.html">
here</a>. Once the <b>ActionPlugin</b> and dlvhex are compiled and installed,
you will be able to execute your ActHEX programs simply typing <code>dlvhex --action-enable
myprogram</code> from command line. <b>ActionAddons</b> libraries already developed
can be found in the <a href="#Download">Download</a> section.</p>
<p>
For any issue, you might want to contact <a href="mailto:acthex_AT_mat.unical.it">our
research group</a>.</p>
<p>
In the next section we introduce the principle of <b>ActionAddons</b> and <em>Action
Atoms</em> and we give a short hands-on example.</p>
</div>
<br>
<h3 id="TheActionAtomFunction">
The Action Atom Function</h3>
<div>
Formally, an <em>Action Atom</em> is executed depending on the following parameters:
<ul>
<li>Input list</li>
<li>Action option</li>
<li>Action precedence</li>
<li>Action weight</li>
<li>Action level</li>
</ul>
<p>
For instance, the action atom to control a toy robot can have this form:</p>
<pre class="fragment">
#robot[move,left]{b,2}[3:1]
</pre>
<p>
where <code>move</code> stands for a parameter string denoting the type of action,
<code>left</code> stands for a string denoting the direction of the action, <code>b</code>
represents that brave reasoning will be used to determine whether the action will
be executed or not, <code>2</code> denotes the action precedence, <code>3</code>
and <code>1</code> are the action weight and level.</p>
<h5>
Types of Input Parameters</h5>
<p>
Input parameters can freely represent constants and predicate names: action functions
have full access to the answer set that triggered execution, thus enabling access
to relational inferred knowledge.</p>
</div>
<br>
<h3 id="HowToWriteYourOwnActionAddon">
How to write your own Action Addon</h3>
<div>
<p>
An interface (<code>ActionPluginInterface</code>) make possible the creation of
Addons for <b>ActionPlugin</b>.</p>
<p>
The creation of Addons is extremely simple and fast.</p>
<p>
Each Addon has (and can customize in a very simple way) an <i>Environment</i>, it
is shared between the Action Atoms and the External Atoms of the same Addon, it
also retains its state during various iterations.</p>
<p>
In addition, each Addon can include an arbitrary number of <i>Action Atoms</i>,
<i>External Atoms</i>, <i>BestModel Selectors</i>, <i>Execution Schedule Builders</i>
and through some functions the creator of the Addon can specify which of these use.</p>
<p>
To begin with, the following header file from dlvhex needs to be included:</p>
<pre class="fragment">
<span class="preprocessor">#include "<a class="code" href="https://github.com/hexhex/actionplugin/blob/master/include/acthex/ActionPluginInterface.h"
title="ActionPluginInterface">acthex/ActionPluginInterface.h</a>"</span>
</pre>
<p>
If the <b>ActionPlugin</b> was installed correctly, this header should be available.</p>
<p>
We have to extend the class <a class="el" href="https://github.com/hexhex/actionplugin/blob/master/include/acthex/ActionPluginInterface.h"
title="ActionPluginInterface">ActionPluginInterface</a>:</p>
<pre class="fragment">
<span class="keyword">class</span> SmartRobotActionPlugin : <span class="keyword">public</span> <a
class="code" href="https://github.com/hexhex/actionplugin/blob/master/include/acthex/ActionPluginInterface.h"
title="ActionPluginInterface">ActionPluginInterface</a>
</pre>
<p>
And we have to override the protected virtual function <code>create</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">ActionPluginInterfacePtr</span> create(ProgramCtx& ctx)
</pre>
<p>
With something like:</p>
<pre class="fragment">
ctx.getPluginEnvironment<SmartRobotActionPlugin>();
<span class="keywordflow">return</span> boost::shared_ptr <SmartRobotActionPlugin> (<span
class="keyword">new</span> SmartRobotActionPlugin());
</pre>
<br>
<h5>
Define an External Atom</h5>
<p>
To specify an External Atom we have to extend the class <code>PluginActionAtom</code>
and we have to use as template our class that extends the ActionPluginInterface:</p>
<pre class="fragment">
<span class="keyword">class</span> SmartRobotActionAtomGetPosition :
<span class="keyword">public</span> PluginActionAtom <SmartRobotActionPlugin> {
<span class="keyword">public</span>:
</pre>
<p>
And we have to override the protected virtual function <code>retrieve</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">void</span> retrieve(<span
class="keywordtype">const</span> Environment& e, <span class="keywordtype">const</span> Query& q, Answer& a)
</pre>
<br>
<h5>
Registering the External Atoms</h5>
<p>
So far, we described the implementation of a specific External Atom. In order to
integrate one or more External Atom in the interface framework, the Addon author
needs to override the method <code>createAtoms</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">std::vector<PluginAtomPtr></span> createAtoms(ProgramCtx& ctx) <span
class="keywordtype">const</span>
</pre>
<p>
With something like:</p>
<pre class="fragment">
std::vector <PluginAtomPtr> ret;
ret.push_back(PluginAtomPtr(<span class="keyword">new</span> SmartRobotActionAtomGetPosition,
PluginPtrDeleter<PluginAtom>()));
<span class="keywordflow">return</span> ret;
</pre>
<br>
<h5>
Define an Action Atom</h5>
<p>
To specify an Action Atom we have to extend the class <code>PluginAction</code>
and we have to use as template our class that extends the ActionPluginInterface:</p>
<pre class="fragment">
<span class="keyword">class</span> SmartRobotAction :
<span class="keyword">public</span> PluginActionAtom <SmartRobotActionPlugin> {
<span class="keyword">public</span>:
</pre>
<p>
And we have to override the protected virtual function <code>execute</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">void</span> execute(Environment& e, RegistryPtr r, <span
class="keywordtype">const</span> Tuple& t,
<span class="keywordtype">const</span> InterpretationConstPtr i)
</pre>
<br>
<h5>
Registering the Action Atoms</h5>
<p>
So far, we described the implementation of a specific Action Atom. In order to integrate
one or more Action Atom in the interface framework, the Addon author needs to override
the method <code>createActions</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">std::vector<PluginActionBasePtr></span> createActions(ProgramCtx& ctx) <span
class="keywordtype">const</span>
</pre>
<p>
With something like:</p>
<pre class="fragment">
std::vector <PluginActionBasePtr> ret;
ret.push_back(PluginActionBasePtr(<span class="keyword">new</span> SmartRobotAction,
PluginPtrDeleter<PluginActionBase>()));
<span class="keywordflow">return</span> ret;
</pre>
<br>
<h5>
Define the Environment</h5>
<p>
To specify the Environment we have to extend the class <code>PluginEnvironment</code>:</p>
<pre class="fragment">
<span class="keyword">class</span> Environment : <span class="keyword">public</span> PluginEnvironment {
<span class="keyword">public</span>:
</pre>
<br>
<h5>
Importing the Action Addon</h5>
<p>
To make the <b>ActionAddon</b> available, we need to instantiate it. The simplest
way to do this is to define a global variable:</p>
<pre class="fragment">
SmartRobotActionPlugin theSmartRobotActionPlugin;
</pre>
<p>
Eventually, we need to import the <b>ActionAddon</b> to action plugin. This is achieved
by the dynamic linking mechanism of shared libraries. The author needs to define
this function:</p>
<pre class="fragment">
<span class="keyword">extern</span> <span class="stringliteral">"C"</span> void * PLUGINIMPORTFUNCTION() {
<span class="keywordflow">return</span> reinterpret_cast<void*>(& DLVHEX_NAMESPACE theSmartRobotActionPlugin);
}
</pre>
</div>
<h3 id="TemplateToBuildAnActionAddon">
Template to build an Action Addon</h3>
<div>
<p>
We provide a template <a href="actionplugin/files/YourAddonName.zip">toolkit</a>
for building action addons based on the GNU Autotools (<a href="http://sourceware.org/autobook/">http://sourceware.org/autobook/</a>)
environment. This means that you will need the respective tools installed on your
system - which is usually no problem, since they are provided as packages by all
major linux distributions. For instance in Debian, you need the packages libtool,
automake1.9, and autoconf.</p>
<p>
After downloading and extracting the toolkit skeleton, the user can customize the
top-level <code>configure.ac</code> to her own needs regarding dependencies on other
packages. This file contains invocations of the Autoconf macros that test the system
features your package needs or can use. There are two source-directory in this template.
One is <code>src</code> and other is <code>include</code>, where <code>Makefile.am</code>
sets the name of the library and its sourcefiles. The user has to take care of referencing
them in the top-level <code>Makefile.am</code>. Calling ./bootstrap in the top-level
directory creates the configure file. Subsequently calling ./configure and <code>make</code>
install installs the shared library. If no further arguments are given to <code>configure</code>,
the addon will be installed into the system-wide plugin-directory (specified by
the package configuration file <code>lib/pkgconfig/dlvhex.pc</code> of the devel-package).
To install the addon into <code>~/</code>.dlvhex/plugins, run <code>./configure --enable-userinstall</code>.</p>
<p>
Some sample action addons can be found in <a href="#Download">Download</a> Section.</p>
</div>
<br>
<h3 id="Examples">
Examples</h3>
<div>
<a href="actionplugin/example1.html">An Example of Observe-Think-Act Cycle with ActHEX
Programs</a><br>
<!--<a href="actionplugin/example2.html">An Example of Update to a Web Source After Reasoning
Under ASP Semantics</a>-->
</div>
<br>
<h3 id="NewFeaturesOfVersion2_0">
New features of version 2.0 [<a href="#Publications">2</a>]</h3>
<div>
<h5>
Iterator</h5>
<p>
Iterators allow to repeat at will the execution of an ActHEX specification.<br>
We call an <i>Iteration</i> the evaluation of a given ActHEX program and the execution
of the corresponding action schedule.<br>
The Environment construct (<a href="#Environment">see below</a>) allows to easily
carry information from an iteration to another.</p>
<p>
The behavior of the iteration process is controlled by means of an Iteration variable.<br>
The default value of Iteration is "NO ITERATION" meaning that we won't
do any iteration namely the evaluation/execution of Action Atoms will be performed
only one time.<br>
The user can modify this default behavior in 3 different ways:</p>
<ul>
<li>from a command line option</li>
<li>by changing some built-in constant values (that override the behavior specified
from command line)</li>
<li>by entailing the truth of specific built-in action predicates (#acthexContinue,
#acthexStop).</li>
</ul>
<p>
For more informations see <a href="https://github.com/hexhex/actionplugin/raw/master/docs/Iteration.pdf">
here</a>.</p>
<h5 id="Environment">
Environment</h5>
<p>
The <i>Environment</i> is a class that every <i>Addon</i> can use (each has its
own Environment) as a knowledge base. The Environment can be read by External Atoms,
and its state can be changed by means of Action atoms. Environments contents are
preserved from one iteration to another, when a sequence of calls to an ActHEX specification
is programmed by means of Iterators.<br>
Having this space, jointly with the possibilities offered by Iterators is very important
for an Addon because it allows to store information, process this information and
then change its behavior in subsequent iterations.</p>
<h5>
BestModel Selector</h5>
<p>
When an action schedule has to be built, the user can select which Answer Set to
use among those that are Best Models by specifying a <i>BestModel Selector</i>.</p>
<p>
To specify a <i>BestModel Selector</i> we have to extend the class <code>BestModelSelector</code>:</p>
<pre class="fragment">
<span class="keyword">class</span> BestModelSelector {
<span class="keyword">public</span>:
BestModelSelector(<span class="keywordtype">std::string</span> name) : name(name) { }
</pre>
<p>
And we have to override the public virtual function <code>getBestModel</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">void</span> getBestModel(ActionPluginCtxData::BestModelsContainer::const_iterator&,
<span class="keywordtype">const</span> ActionPluginCtxData::BestModelsContainer&)
</pre>
<p>
In order to integrate one or more <i>BestModel Selector</i> in the interface framework,
the Addon author needs to override the method <code>getAllBestModelSelectors</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">std::vector<BestModelSelectorPtr></span> getAllBestModelSelectors() <span
class="keywordtype">const</span>
</pre>
<p>
With something like:</p>
<pre class="fragment">
std::vector<BestModelSelectorPtr> allBestModelSelectors;
<span class="keywordflow">return</span> allBestModelSelectors;
</pre>
<br>
<p>
The user can select which <i>BestModel Selector</i> to adopt by changing the value
of the Built-in Variable <code>#acthexBestModelSelector</code>, and must be set
to the name of the <i>BestModel Selector</i> of choice.<br>
For example: <code>#acthexBestModelSelector = bestModelSelector1.</code></p>
<h5>
Execution Schedule Builder</h5>
<p>
The user can select the order of execution of Actions with the same Precedence by
specifying a <i>Execution Schedule Builder</i>.</p>
<p>
To specify a <i>Execution Schedule Builder</i> we have to extend the class <code>ExecutionScheduleBuilder</code>:</p>
<pre class="fragment">
<span class="keyword">class</span> ExecutionScheduleBuilder {
<span class="keyword">public</span>:
ExecutionScheduleBuilder(<span class="keywordtype">std::string</span> name) : name(name) { }
</pre>
<p>
And we have to override the public virtual function <code>rewrite</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">void</span> rewrite(<span
class="keywordtype">const</span> std::multimap<int, Tuple> &,
std::list< std::set<Tuple> > &, <span class="keywordtype">const</span> InterpretationConstPtr)
</pre>
<p>
In order to integrate one or more <i>Execution Schedule Builder</i> in the interface
framework, the Addon author needs to override the method <code>getAllExecutionScheduleBuilders</code>:</p>
<pre class="fragment">
<span class="keyword">virtual</span> <span class="keywordtype">std::vector<ExecutionScheduleBuilderPtr></span> getAllExecutionScheduleBuilders() <span
class="keywordtype">const</span>
</pre>
<p>
With something like:</p>
<pre class="fragment">
std::vector<ExecutionScheduleBuilderPtr> allExecutionScheduleBuilders;
<span class="keywordflow">return</span> allExecutionScheduleBuilders;
</pre>
<br>
<p>
The user can select which <i>Execution Schedule Builder</i> to adopt by changing
the value of the Built-in Variable <code>#acthexExecutionScheduleBuilder</code>,
and must be set to the name of the <i>Execution Schedule Builder</i> of choice.
For example: <code>#acthexExecutionScheduleBuilder = executionScheduleBuilder1.</code></p>
</div>
</div>
<br>
<br>
<h2 id="TheTeam">
Team</h2>
<hr>
<div>
<ul>
<li>Selen Basol</li>
<li>Ozan Erdem</li>
<li>Michael Fink</li>
<li>Giovambattista Ianni</li>
<li>Stefano Germano</li>
<li>Thomas Krennwallner</li>
<li>Christoph Redl</li>
<li>Peter Schüller</li>
</ul>
</div>
<br>
<br>
<h2 id="Download">
Download</h2>
<hr>
<div>
<h5 id="ActionPlugin">
Action Plugin</h5>
<ul style="list-style: none">
<li><a class="code" href="https://github.com/hexhex/actionplugin">download</a> </li>
</ul>
<br>
<h5 id="ActionAddons">
Action Addons</h5>
<ul style="list-style: none">
<li>Robot Action Addon: <a href="actionplugin/robotaddon.html">info</a> <a class="code"
href="https://github.com/hexhex/actionplugin-addons/tree/master/robot">download</a>
</li>
<li>KBMod Action Addon: <a href="actionplugin/kbmodaddon.html">info</a> <a class="code"
href="https://github.com/hexhex/actionplugin-addons/tree/master/kbmod">download</a>
</li>
<!--<li>GCal Action Addon: <a href="actionplugin/gcaladdon.html"><font size="1">info</font></a><a class="code" href="http://dlvhex.svn.sourceforge.net/viewvc/dlvhex/dlvhex-actionplugin-addons/gcalActionAddon/"><font size="1">download </font></a></li>-->
<li>SmartRobot Addon: <a href="actionplugin/SmartRobotAddon.html">info</a> <a class="code"
href="https://github.com/hexhex/actionplugin-addons/tree/master/SmartRobot_2x">download</a>
</li>
<li>Sudoku Addon: <a href="actionplugin/SudokuAddon.html">info</a> <a class="code"
href="https://github.com/hexhex/actionplugin-addons/tree/master/Sudoku_2x">download</a>
</li>
<li>Reversi Addon: <a href="actionplugin/ReversiAddon.html">info</a> <a class="code"
href="https://github.com/hexhex/actionplugin-addons/tree/master/Reversi">download</a>
</li>
</ul>
<!-- <li>A template for building your Action Addons <a class="code" href="actionplugin/AddonTemplate.tar.gz"><font size="1">download </font></a></li>-->
</div>
<br>
<br>
<h2 id="Publications">
Publications</h2>
<hr>
<div>
[1] S. Basol, O. Erdem, M. Fink, G. Ianni. "HEX Programs with Action Atoms." In
ICLP (Technical Communications), pp. 24-33. 2010. <a href="actionplugin/files/acthex.pdf">
[PDF]</a>
</div>
<div>
[2] M. Fink, S. Germano, G. Ianni, C. Redl, P. Schüller. "ActHEX: Implementing HEX
Programs with Action Atoms." In Logic Programming and Nonmonotonic Reasoning, pp.
317-322. Springer Berlin Heidelberg, 2013. <a href="actionplugin/files/acthex2.pdf">
[PDF]</a>
</div>
<br>
<br>
<p id="pageinfo" lang="en" dir="ltr" style="color: gray" xml:lang="en">
Last edited 2013-09-27</p>
</div>
<div class="grid_3">
<p> </p>
<p>
<img width="200" height="44" src="images/logo_whitebg.png" alt="dlvhex" id="logo">
</p>
<p>
<div style="font-size: 14pt"><label for="q">Search this Website</label></div>
<form action="http://www.google.com/cse" id="cse-search-box">
<div>
<input name="cx" id="cx" value="010363983165505105153:4bhl-l5ixd4" type="hidden" alt="Search this website">
<input name="ie" id="ie" value="UTF-8" type="hidden" alt="Search this website">
<input style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" name="q" id="q" size="19" type="text">
<input name="sa" id="sa" value="Go" type="submit">
</div>
</form>
</p>
<p>
<span style="font-size: 14pt">General</span><br>
<a href="https://github.com/hexhex/">dlvhex source code @ github.com</a><br>
<!-- a href="https://sourceforge.net/projects/dlvhex/">dlvhex: Sourceforge project</a><br/ -->
<a href="doap.rdf">Description-Of-A-Project</a>
</p>
<p>
<span style="font-size: 14pt">Popular Plugins</span><br>
<!-- <a href="http://www.polleres.net/dlvhex-sparql">SPARQL Plugin</a><br> -->
<a href="actionplugin.html">Action Plugin</a><br>
<a href="decisiondiagramsplugin.html">DecisionDiagrams Plugin</a><br>
<a href="dlplugin.html">Description Logics Plugin</a><br>
<a href="dlliteplugin.html">Description Logics Lite Plugin</a><br>
<a href="mergingplugin.html">MELD: Belief Merging Plugin</a><br>
<a href="nestedhexplugin.html">Nested HEX Plugin</a><br>
<a href="http://www.kr.tuwien.ac.at/research/systems/mcsie">MCSIE Plugin</a><br>
<a href="stringplugin.html">String Plugin</a><br>
<a href="https://sourceforge.net/projects/dlvhex-semweb/">dlvhex-semweb Project</a><br>
</p>
<p>
<span style="font-size: 14pt">Documentation</span><br>
<a href="docs/userguide.pdf">User Guide</a><br>
<a href="https://github.com/hexhex/core/blob/master/README">README</a><br>
<a href="doc2x">doxygen</a><br>
<a href="doc2x/group__pluginframework.html">Writing Plugins in C++</a><br>
<a href="doc2x/group__pythonpluginframework.html">Writing Plugins in Python</a>
<!--
<a href="doc1x">doxygen version 1.X</a><br>
<a href="doc1x/group__pluginframework.html">Writing Plugins 1.X</a><br>
-->
</p>
</div> <!-- grid_3 -->
</div> <!-- container_12 -->
</body>
</html>
<!--
Local Variables:
mode: xml
End:
-->