Importation du code depuis GitHub
This commit is contained in:
commit
8cf7b2f506
30 changed files with 424975 additions and 0 deletions
674
LICENSE
Normal file
674
LICENSE
Normal file
|
@ -0,0 +1,674 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
10
README.md
Normal file
10
README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# TDDC17AICourse
|
||||
Sharing of my labs carried out during the TDDC17 course at Linköping University (HT 2020).
|
||||
|
||||
## Lab 4
|
||||
Commands used in lab 4 to use planner algorithms:
|
||||
```bash
|
||||
$ ipp -o task1_domain.pddl -f task1_pb1.pddl
|
||||
$ ff -o task1_domain.pddl -f task1_pb1.pddl
|
||||
$ lama task1_domain.pddl task1_pb1.pddl
|
||||
```
|
434
lab1/myvacuumagent.py
Normal file
434
lab1/myvacuumagent.py
Normal file
|
@ -0,0 +1,434 @@
|
|||
from lab1.liuvacuum import *
|
||||
|
||||
DEBUG_OPT_DENSEWORLDMAP = False
|
||||
|
||||
AGENT_STATE_UNKNOWN = 0
|
||||
AGENT_STATE_WALL = 1
|
||||
AGENT_STATE_CLEAR = 2
|
||||
AGENT_STATE_DIRT = 3
|
||||
AGENT_STATE_HOME = 4
|
||||
|
||||
AGENT_DIRECTION_NORTH = 0
|
||||
AGENT_DIRECTION_EAST = 1
|
||||
AGENT_DIRECTION_SOUTH = 2
|
||||
AGENT_DIRECTION_WEST = 3
|
||||
|
||||
def direction_to_string(cdr):
|
||||
cdr %= 4
|
||||
return "NORTH" if cdr == AGENT_DIRECTION_NORTH else\
|
||||
"EAST" if cdr == AGENT_DIRECTION_EAST else\
|
||||
"SOUTH" if cdr == AGENT_DIRECTION_SOUTH else\
|
||||
"WEST" #if dir == AGENT_DIRECTION_WEST
|
||||
|
||||
"""
|
||||
Internal state of a vacuum agent
|
||||
"""
|
||||
class MyAgentState:
|
||||
|
||||
def __init__(self, width, height):
|
||||
|
||||
# Initialize perceived world state
|
||||
self.world = [[AGENT_STATE_UNKNOWN for _ in range(height)] for _ in range(width)]
|
||||
self.world[1][1] = AGENT_STATE_HOME
|
||||
|
||||
# Agent internal state
|
||||
self.last_action = ACTION_NOP
|
||||
self.direction = AGENT_DIRECTION_EAST
|
||||
self.pos_x = 1
|
||||
self.pos_y = 1
|
||||
|
||||
# Metadata
|
||||
self.world_width = width
|
||||
self.world_height = height
|
||||
|
||||
"""
|
||||
Update perceived agent location and orientation
|
||||
"""
|
||||
def update_position(self, bump):
|
||||
if not bump and self.last_action == ACTION_FORWARD:
|
||||
if self.direction == AGENT_DIRECTION_EAST:
|
||||
self.pos_x += 1
|
||||
elif self.direction == AGENT_DIRECTION_SOUTH:
|
||||
self.pos_y += 1
|
||||
elif self.direction == AGENT_DIRECTION_WEST:
|
||||
self.pos_x -= 1
|
||||
elif self.direction == AGENT_DIRECTION_NORTH:
|
||||
self.pos_y -= 1
|
||||
elif self.last_action == ACTION_TURN_LEFT:
|
||||
if self.direction == AGENT_DIRECTION_EAST:
|
||||
self.direction = AGENT_DIRECTION_NORTH
|
||||
elif self.direction == AGENT_DIRECTION_SOUTH:
|
||||
self.direction = AGENT_DIRECTION_EAST
|
||||
elif self.direction == AGENT_DIRECTION_WEST:
|
||||
self.direction = AGENT_DIRECTION_SOUTH
|
||||
elif self.direction == AGENT_DIRECTION_NORTH:
|
||||
self.direction = AGENT_DIRECTION_WEST
|
||||
elif self.last_action == ACTION_TURN_RIGHT:
|
||||
if self.direction == AGENT_DIRECTION_EAST:
|
||||
self.direction = AGENT_DIRECTION_SOUTH
|
||||
elif self.direction == AGENT_DIRECTION_SOUTH:
|
||||
self.direction = AGENT_DIRECTION_WEST
|
||||
elif self.direction == AGENT_DIRECTION_WEST:
|
||||
self.direction = AGENT_DIRECTION_NORTH
|
||||
elif self.direction == AGENT_DIRECTION_NORTH:
|
||||
self.direction = AGENT_DIRECTION_EAST
|
||||
|
||||
"""
|
||||
Update perceived or inferred information about a part of the world
|
||||
"""
|
||||
def update_world(self, x, y, info):
|
||||
self.world[x][y] = info
|
||||
|
||||
"""
|
||||
Dumps a map of the world as the agent knows it
|
||||
"""
|
||||
def print_world_debug(self):
|
||||
for y in range(self.world_height):
|
||||
for x in range(self.world_width):
|
||||
if self.world[x][y] == AGENT_STATE_UNKNOWN:
|
||||
print("?" if DEBUG_OPT_DENSEWORLDMAP else " ? ", end="")
|
||||
elif self.world[x][y] == AGENT_STATE_WALL:
|
||||
print("#" if DEBUG_OPT_DENSEWORLDMAP else " # ", end="")
|
||||
elif self.world[x][y] == AGENT_STATE_CLEAR:
|
||||
print("." if DEBUG_OPT_DENSEWORLDMAP else " . ", end="")
|
||||
elif self.world[x][y] == AGENT_STATE_DIRT:
|
||||
print("D" if DEBUG_OPT_DENSEWORLDMAP else " D ", end="")
|
||||
elif self.world[x][y] == AGENT_STATE_HOME:
|
||||
print("H" if DEBUG_OPT_DENSEWORLDMAP else " H ", end="")
|
||||
|
||||
print() # Newline
|
||||
print() # Delimiter post-print
|
||||
|
||||
"""
|
||||
Vacuum agent
|
||||
"""
|
||||
class MyVacuumAgent(Agent):
|
||||
"""
|
||||
Init function, everything here is execute once at the beginning
|
||||
"""
|
||||
def __init__(self, world_width, world_height, log):
|
||||
super().__init__(self.execute)
|
||||
self.initial_random_actions = 10
|
||||
self.iteration_counter = 1000
|
||||
self.state = MyAgentState(world_width, world_height)
|
||||
self.log = log
|
||||
|
||||
# Arrived variable for the goto function
|
||||
self.arrived = True
|
||||
# Arrived variable for the go_to_with_pathfinder function
|
||||
self.arrived_destination = True
|
||||
# If the agent has finished the cleaning
|
||||
self.finished = False
|
||||
|
||||
# Goto coordinates for the goto function
|
||||
self.goto_x = 1
|
||||
self.goto_y = 1
|
||||
|
||||
# Goto coordinates for the go_to_with_pathfinder function
|
||||
self.destination_x = 1
|
||||
self.destination_y = 1
|
||||
|
||||
# If we need to re-calculate our destination
|
||||
self.reset_destination = True
|
||||
|
||||
# Different list in agent memory
|
||||
self.waypoint = [] # Memory for next waypoint coordinates
|
||||
self.slist = [] # List of waypoint to go at the agent destination
|
||||
|
||||
# At the beginning, we assume that the zone is surrounded by wall
|
||||
for i in range(0, world_width):
|
||||
self.state.update_world(i, 0, AGENT_STATE_WALL)
|
||||
self.state.update_world(i, world_height - 1, AGENT_STATE_WALL)
|
||||
for j in range(1, world_height - 1):
|
||||
self.state.update_world(0, j, AGENT_STATE_WALL)
|
||||
self.state.update_world(world_width - 1, j, AGENT_STATE_WALL)
|
||||
|
||||
"""
|
||||
Function which move the agent to a ramdom start position
|
||||
"""
|
||||
def move_to_random_start_position(self, bump):
|
||||
action = random()
|
||||
|
||||
self.initial_random_actions -= 1
|
||||
self.state.update_position(bump)
|
||||
self.log("Actual direction: " + direction_to_string(self.state.direction))
|
||||
|
||||
if action < 0.1666666: # 1/6 chance
|
||||
self.state.last_action = ACTION_TURN_LEFT
|
||||
return ACTION_TURN_LEFT
|
||||
elif action < 0.3333333: # 1/6 chance
|
||||
self.state.last_action = ACTION_TURN_RIGHT
|
||||
return ACTION_TURN_RIGHT
|
||||
else: # 4/6 chance
|
||||
self.state.last_action = ACTION_FORWARD
|
||||
return ACTION_FORWARD
|
||||
|
||||
"""
|
||||
A basic "go to" function which does not consider wall
|
||||
"""
|
||||
def goto(self, bump, dirt):
|
||||
self.state.update_position(bump)
|
||||
self.log("Actual direction: " + direction_to_string(self.state.direction))
|
||||
self.log("Next waypoint: {}, {}".format(self.goto_x, self.goto_y))
|
||||
|
||||
if dirt:
|
||||
self.state.update_world(self.state.pos_x, self.state.pos_y, AGENT_STATE_DIRT)
|
||||
self.log("DIRT -> choosing SUCK action!")
|
||||
self.state.last_action = ACTION_SUCK
|
||||
return ACTION_SUCK
|
||||
else:
|
||||
self.state.update_world(self.state.pos_x, self.state.pos_y, AGENT_STATE_CLEAR)
|
||||
|
||||
if (self.goto_x == self.state.pos_x and self.goto_y == self.state.pos_y) or bump:
|
||||
self.arrived = True
|
||||
self.log("Arrived to the target point")
|
||||
self.state.last_action = ACTION_NOP
|
||||
return ACTION_NOP
|
||||
|
||||
if abs(self.state.pos_x - self.goto_x) >= abs(self.state.pos_y - self.goto_y):
|
||||
if self.state.pos_x - self.goto_x > 0: # Need to go WEST
|
||||
if self.state.direction == AGENT_DIRECTION_WEST:
|
||||
return ACTION_FORWARD
|
||||
elif self.state.direction == AGENT_DIRECTION_SOUTH:
|
||||
return ACTION_TURN_RIGHT
|
||||
else:
|
||||
return ACTION_TURN_LEFT
|
||||
else: # Need to go EAST
|
||||
if self.state.direction == AGENT_DIRECTION_EAST:
|
||||
return ACTION_FORWARD
|
||||
elif self.state.direction == AGENT_DIRECTION_NORTH:
|
||||
return ACTION_TURN_RIGHT
|
||||
else:
|
||||
return ACTION_TURN_LEFT
|
||||
else:
|
||||
if self.state.pos_y - self.goto_y > 0: # Need to go NORTH
|
||||
if self.state.direction == AGENT_DIRECTION_NORTH:
|
||||
return ACTION_FORWARD
|
||||
elif self.state.direction == AGENT_DIRECTION_WEST:
|
||||
return ACTION_TURN_RIGHT
|
||||
else:
|
||||
return ACTION_TURN_LEFT
|
||||
else: # Need to go SOUTH
|
||||
if self.state.direction == AGENT_DIRECTION_SOUTH:
|
||||
return ACTION_FORWARD
|
||||
elif self.state.direction == AGENT_DIRECTION_EAST:
|
||||
return ACTION_TURN_RIGHT
|
||||
else:
|
||||
return ACTION_TURN_LEFT
|
||||
|
||||
"""
|
||||
A pathfinding algorithm, based on the BFS algorithm
|
||||
"""
|
||||
def pathfinding(self, target_x, target_y):
|
||||
|
||||
# Class for node used in the search
|
||||
class Node:
|
||||
def __init__(self, parent=None, x=-1, y=-1):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.parent = parent
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.x == other.x and self.y == other.y
|
||||
|
||||
# Start and end nodes
|
||||
start = Node(None, self.state.pos_x, self.state.pos_y)
|
||||
end = Node(None, target_x, target_y)
|
||||
|
||||
# List containing the nodes to explore (By order of priority)
|
||||
queue = [start]
|
||||
# List of explored nodes
|
||||
explored = []
|
||||
# List which will be returned by the program containing
|
||||
# the coordinates to follow to reach the targeted point
|
||||
slist = []
|
||||
|
||||
# While there is node to explore
|
||||
while queue:
|
||||
# If the queue is to big, we assume that there is a problem
|
||||
if len(queue) > 200:
|
||||
break
|
||||
|
||||
# We take the first node in the queue
|
||||
node = queue.pop(0)
|
||||
# If it is the destination
|
||||
if node == end:
|
||||
print("Trying to go at : {}; {}".format(target_x, target_y))
|
||||
print("Solution found : ")
|
||||
n = node
|
||||
# We return the path found
|
||||
while n.parent:
|
||||
print("x: {}, y: {}".format(n.x, n.y))
|
||||
slist.append([n.x, n.y])
|
||||
n = n.parent
|
||||
# and stop the processing
|
||||
break
|
||||
|
||||
# If we never explored this node
|
||||
elif node not in explored:
|
||||
explored.append(node)
|
||||
|
||||
# For each adjacent node, if it is not a wall,
|
||||
# we add it to the queue
|
||||
if self.state.world[node.x - 1][node.y] != AGENT_STATE_WALL:
|
||||
queue.append(Node(node, node.x-1, node.y))
|
||||
if self.state.world[node.x + 1][node.y] != AGENT_STATE_WALL:
|
||||
queue.append(Node(node, node.x+1, node.y))
|
||||
if self.state.world[node.x][node.y - 1] != AGENT_STATE_WALL:
|
||||
queue.append(Node(node, node.x, node.y - 1))
|
||||
if self.state.world[node.x][node.y + 1] != AGENT_STATE_WALL:
|
||||
queue.append(Node(node, node.x, node.y+1))
|
||||
|
||||
# If we don't find any solution
|
||||
if not slist:
|
||||
# We consider that the place in inaccessible
|
||||
self.state.update_world(end.x, end.y, AGENT_STATE_WALL)
|
||||
self.log("Find a inaccessible place, marking as a wall ##")
|
||||
print("Overload! Inaccessible place!")
|
||||
return slist
|
||||
|
||||
"""
|
||||
A "go to" function which implement the pathfinding algorithm using the goto function
|
||||
"""
|
||||
def go_to_with_pathfinder(self, bump, dirt):
|
||||
# If we start or if we need to reset the path
|
||||
if self.reset_destination:
|
||||
print("Launching the pathfinding algorithm.")
|
||||
self.slist = self.pathfinding(self.destination_x, self.destination_y)
|
||||
|
||||
# If we have a path, we follow it
|
||||
if self.slist:
|
||||
# If the agent move correctly the previous time
|
||||
if not bump:
|
||||
self.waypoint = self.slist.pop()
|
||||
self.goto_x = self.waypoint[0]
|
||||
self.goto_y = self.waypoint[1]
|
||||
self.arrived = False
|
||||
action = self.goto(bump, dirt)
|
||||
self.state.last_action = action
|
||||
self.reset_destination = False
|
||||
return action
|
||||
# else (whether we arrived or we don't find a path), we assume
|
||||
# that we will not go further
|
||||
else:
|
||||
self.reset_destination = True
|
||||
self.arrived_destination = True
|
||||
self.state.last_action = ACTION_NOP
|
||||
return ACTION_NOP
|
||||
pass
|
||||
|
||||
"""
|
||||
The execute function, which is call at each turn
|
||||
"""
|
||||
def execute(self, percept):
|
||||
|
||||
# If the agent has finished, we do nothing
|
||||
if self.finished:
|
||||
return ACTION_NOP
|
||||
|
||||
###########################
|
||||
# DO NOT MODIFY THIS CODE #
|
||||
###########################
|
||||
|
||||
bump = percept.attributes["bump"]
|
||||
dirt = percept.attributes["dirt"]
|
||||
home = percept.attributes["home"]
|
||||
|
||||
# Move agent to a randomly chosen initial position
|
||||
if self.initial_random_actions > 0:
|
||||
self.log("Moving to random start position ({} steps left)".format(self.initial_random_actions))
|
||||
return self.move_to_random_start_position(bump)
|
||||
|
||||
# Finalize randomization by properly updating position (without subsequently changing it)
|
||||
elif self.initial_random_actions == 0:
|
||||
self.initial_random_actions -= 1
|
||||
self.state.update_position(bump)
|
||||
self.state.last_action = ACTION_SUCK
|
||||
self.log("Processing percepts after position randomization")
|
||||
return ACTION_SUCK
|
||||
|
||||
########################
|
||||
# START MODIFYING HERE #
|
||||
########################
|
||||
|
||||
# Logging position and orientation
|
||||
self.log("Position: ({}, {})\t\tDirection: {}".format(self.state.pos_x, self.state.pos_y,
|
||||
direction_to_string(self.state.direction)))
|
||||
|
||||
if bump:
|
||||
# Not arrived, but this way we force our agent to re-calculate its path
|
||||
self.arrived = True
|
||||
self.reset_destination = True
|
||||
# Get an xy-offset pair based on where the agent is facing
|
||||
offset = [(0, -1), (1, 0), (0, 1), (-1, 0)][self.state.direction]
|
||||
|
||||
# Mark the tile at the offset from the agent as a wall (since the agent bumped into it)
|
||||
self.state.update_world(self.state.pos_x + offset[0], self.state.pos_y + offset[1], AGENT_STATE_WALL)
|
||||
|
||||
# While we aren't arrived, we refer to the goto function
|
||||
if not self.arrived:
|
||||
action = self.goto(bump, dirt)
|
||||
self.state.last_action = action
|
||||
return action
|
||||
# While we aren't arrived, we refer to the go_to_with_pathfinder function
|
||||
elif not self.arrived_destination:
|
||||
return self.go_to_with_pathfinder(bump, dirt)
|
||||
|
||||
# Max iterations for the agent
|
||||
if self.iteration_counter < 1:
|
||||
if self.iteration_counter == 0:
|
||||
self.iteration_counter -= 1
|
||||
self.log("Iteration counter is now 0. Halting!")
|
||||
self.log("Performance: {}".format(self.performance))
|
||||
return ACTION_NOP
|
||||
self.iteration_counter -= 1
|
||||
|
||||
# Track position of agent
|
||||
self.state.update_position(bump)
|
||||
|
||||
# Update perceived state of current tile
|
||||
if dirt:
|
||||
self.state.update_world(self.state.pos_x, self.state.pos_y, AGENT_STATE_DIRT)
|
||||
else:
|
||||
self.state.update_world(self.state.pos_x, self.state.pos_y, AGENT_STATE_CLEAR)
|
||||
|
||||
# Debug
|
||||
self.state.print_world_debug()
|
||||
|
||||
# Variables used to determine the closest unknown place
|
||||
closest_unk_range = self.state.world_height + self.state.world_width + 1
|
||||
closest_x = 1
|
||||
closest_y = 1
|
||||
find_new = False
|
||||
|
||||
# Determination of the nearest unknown location
|
||||
for i in range(self.state.world_width):
|
||||
for j in range(self.state.world_height):
|
||||
if self.state.world[i][j] == AGENT_STATE_UNKNOWN and (
|
||||
abs(self.state.pos_x - i) + abs(self.state.pos_y - j)) < closest_unk_range:
|
||||
find_new = True
|
||||
closest_unk_range = (abs(self.state.pos_x - i) + abs(self.state.pos_y - j))
|
||||
closest_x = i
|
||||
closest_y = j
|
||||
|
||||
# If we find a new place to go
|
||||
if find_new:
|
||||
self.log("Going to unknown places : ({};{})".format(closest_x, closest_y))
|
||||
self.destination_x = closest_x
|
||||
self.destination_y = closest_y
|
||||
return self.go_to_with_pathfinder(bump, dirt)
|
||||
# If not, we have finished, we go home
|
||||
if home:
|
||||
self.log("Finished !")
|
||||
self.log("Performance: {}".format(self.performance))
|
||||
self.finished = True
|
||||
# Finally we are at home
|
||||
else:
|
||||
self.log("Job done, going back home.")
|
||||
self.destination_x = 1
|
||||
self.destination_y = 1
|
||||
return self.go_to_with_pathfinder(bump, dirt)
|
||||
|
||||
# Useless
|
||||
self.state.last_action = ACTION_NOP
|
||||
return ACTION_NOP
|
9
lab2/CustomBreadthFirstSearch.java
Normal file
9
lab2/CustomBreadthFirstSearch.java
Normal file
|
@ -0,0 +1,9 @@
|
|||
package searchCustom;
|
||||
|
||||
public class CustomBreadthFirstSearch extends CustomGraphSearch{
|
||||
|
||||
public CustomBreadthFirstSearch(int maxDepth){
|
||||
super(false);
|
||||
//System.out.println("Change line above in \"CustomBreadthFirstSearch.java\"! --> done.");
|
||||
}
|
||||
};
|
8
lab2/CustomDepthFirstSearch.java
Normal file
8
lab2/CustomDepthFirstSearch.java
Normal file
|
@ -0,0 +1,8 @@
|
|||
package searchCustom;
|
||||
|
||||
public class CustomDepthFirstSearch extends CustomGraphSearch{
|
||||
public CustomDepthFirstSearch(int maxDepth){
|
||||
super(true);
|
||||
//System.out.println("Change line above in \"CustomDepthFirstSearch.java\"! --> done.");
|
||||
}
|
||||
};
|
141
lab2/CustomGraphSearch.java
Normal file
141
lab2/CustomGraphSearch.java
Normal file
|
@ -0,0 +1,141 @@
|
|||
package searchCustom;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
import searchShared.NodeQueue;
|
||||
import searchShared.Problem;
|
||||
import searchShared.SearchObject;
|
||||
import searchShared.SearchNode;
|
||||
|
||||
import world.GridPos;
|
||||
|
||||
public class CustomGraphSearch implements SearchObject {
|
||||
|
||||
private HashSet<SearchNode> explored;
|
||||
private NodeQueue frontier;
|
||||
protected ArrayList<SearchNode> path;
|
||||
private boolean insertFront;
|
||||
|
||||
/**
|
||||
* The constructor tells graph search whether it should insert nodes to front or back of the frontier
|
||||
*/
|
||||
public CustomGraphSearch(boolean bInsertFront) {
|
||||
insertFront = bInsertFront;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements "graph search", which is the foundation of many search algorithms
|
||||
*/
|
||||
public ArrayList<SearchNode> search(Problem problem) {
|
||||
// The frontier is a queue of expanded SearchNodes not processed yet
|
||||
frontier = new NodeQueue();
|
||||
// The explored set is a set of nodes that have been processed
|
||||
explored = new HashSet<SearchNode>();
|
||||
// The start state is given
|
||||
GridPos startState = (GridPos) problem.getInitialState();
|
||||
// Initialise the frontier with the start state
|
||||
frontier.addNodeToFront(new SearchNode(startState));
|
||||
|
||||
// Path will be empty until we find the goal.
|
||||
path = new ArrayList<SearchNode>();
|
||||
|
||||
|
||||
/*
|
||||
* Note on how java and this program work:
|
||||
* -ArrayList are just resizable array. "<>" contains the type of the listed objects
|
||||
* -Structures :
|
||||
* while (boolean) {}
|
||||
* while (a > 0) {}
|
||||
* for (int i = 0; i < 5; i++){} --> 5 iterations
|
||||
* for (String i : StringList){} --> Iterations on all the objects in the list
|
||||
* -Class used here:
|
||||
* -SearchNode --> Equivalent of the "Node" class in the Python program. Represent a node.
|
||||
* -Problem --> Class containing lot of informations on the problem
|
||||
* like the reachable states from a position, the start, the end
|
||||
* -GridPos --> represent a position (with x and y coordinates)
|
||||
*/
|
||||
|
||||
|
||||
// While we have something to explore
|
||||
while (frontier.size() > 0) {
|
||||
// Get the first node on the list
|
||||
SearchNode Node = frontier.removeFirst();
|
||||
|
||||
// We check if it is our destination
|
||||
if (problem.isGoalState(Node.getState())) {
|
||||
return path = Node.getPathFromRoot();
|
||||
} // if not, we continue
|
||||
|
||||
// Get the list of children of the current node
|
||||
ArrayList<GridPos> childPosition = problem.getReachableStatesFrom(Node.getState());
|
||||
// For every child in the list
|
||||
for (GridPos position : childPosition) {
|
||||
// Creating a new node
|
||||
SearchNode childNode = new SearchNode(position, Node);
|
||||
// If we have not explored the node
|
||||
if (explored.contains(childNode) == false) {
|
||||
// Adding the child node to the frontier
|
||||
// Front --> DFS (LIFO queue)
|
||||
// Back --> BFS (FIFO queue)
|
||||
if (insertFront) {
|
||||
frontier.addNodeToFront(childNode);
|
||||
}
|
||||
else {
|
||||
frontier.addNodeToBack(childNode);
|
||||
}
|
||||
// We add the node to explored node
|
||||
explored.add(childNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Some hints:
|
||||
* -Read early part of chapter 3 in the book!
|
||||
* -You are free to change anything how you wish as long as the program runs, but some structure is given to help you.
|
||||
* -You can Google for "javadoc <class>" if you are uncertain of what you can do with a particular Java type.
|
||||
*
|
||||
* -SearchNodes are the nodes of the search tree and contains the relevant problem state, in this case x,y position (GridPos) of the agent
|
||||
* --You can create a new search node from a state by: SearchNode childNode = new SearchNode(childState, currentNode);
|
||||
* --You can also extract the state by .getState() method
|
||||
* --All search structures use search nodes, but the problem object only speaks in state, so you may need to convert between them
|
||||
*
|
||||
* -The frontier is a queue of search nodes, open this class to find out what you can do with it!
|
||||
*
|
||||
* -If you are unfamiliar with Java, the "HashSet<SearchNode>" used for the explored set means a set of SearchNode objects.
|
||||
* --You can add nodes to the explored set, or check if it contains a node!
|
||||
*
|
||||
* -To get the child states (adjacent grid positions that are not walls) of a particular search node, do: ArrayList<GridPos> childStates = p.getReachableStatesFrom(currentState);
|
||||
*
|
||||
* -Depending on the addNodesToFront boolean variable, you may need to do something with the frontier... (see book)
|
||||
*
|
||||
* -You can check if you have reached the goal with p.isGoalState(NodeState)
|
||||
*
|
||||
* When the goal is found, the path to be returned can be found by: path = node.getPathFromRoot();
|
||||
*/
|
||||
/* Note: Returning an empty path signals that no path exists */
|
||||
return path;
|
||||
}
|
||||
|
||||
/*
|
||||
* Functions below are just getters used externally by the program
|
||||
*/
|
||||
public ArrayList<SearchNode> getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public ArrayList<SearchNode> getFrontierNodes() {
|
||||
return new ArrayList<SearchNode>(frontier.toList());
|
||||
}
|
||||
public ArrayList<SearchNode> getExploredNodes() {
|
||||
return new ArrayList<SearchNode>(explored);
|
||||
}
|
||||
public ArrayList<SearchNode> getAllExpandedNodes() {
|
||||
ArrayList<SearchNode> allNodes = new ArrayList<SearchNode>();
|
||||
allNodes.addAll(getFrontierNodes());
|
||||
allNodes.addAll(getExploredNodes());
|
||||
return allNodes;
|
||||
}
|
||||
|
||||
}
|
20
lab3/bayes.jnlp
Normal file
20
lab3/bayes.jnlp
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jnlp spec="1.0+"
|
||||
codebase="http://www.aispace.org/"
|
||||
>
|
||||
<information>
|
||||
<title>Belief and Decision Networks</title>
|
||||
<vendor>AIspace</vendor>
|
||||
<homepage href="www.aispace.org" />
|
||||
</information>
|
||||
<offline-allowed/>
|
||||
<security>
|
||||
<all-permissions/>
|
||||
</security>
|
||||
<resources>
|
||||
<j2se version="1.5+" />
|
||||
<jar href="bayes/bayes.jar"/>
|
||||
</resources>
|
||||
<application-desc />
|
||||
</jnlp>
|
||||
|
263
lab3/lab3_Mr_HS_v2.xml
Normal file
263
lab3/lab3_Mr_HS_v2.xml
Normal file
|
@ -0,0 +1,263 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<BIF VERSION="0.3" xmlns="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3 http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3/XMLBIFv0_3.xsd">
|
||||
<NETWORK>
|
||||
<NAME>Nuclear Power Station</NAME>
|
||||
<PROPERTY>detailed = </PROPERTY>
|
||||
<PROPERTY>short = </PROPERTY>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeak</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7367.91845703125, 5357.0380859375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeakWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7195.8505859375, 5497.32470703125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>IcyWeather</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7565.81103515625, 5097.51025390625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailure</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7121.32080078125, 5349.66455078125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailureWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (6830.72802734375, 5504.23828125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Meltdown</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7467.087890625, 5603.3173828125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Battery</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7761.697265625, 5233.7236328125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Radio</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7667.05322265625, 5364.93359375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Ignition</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7914.4169921875, 5364.93359375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Gas</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8158.5546875, 5373.53759765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Start</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8051.0048828125, 5523.03076171875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Moves</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8051.0048828125, 5678.9775390625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Survives</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7638.01513671875, 5822.0185546875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Bicycle_works</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7636.93896484375, 5681.12890625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>HS_is_awake</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<OBS>F</OBS>
|
||||
<PROPERTY>position = (7004.9658203125, 5804.48974609375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>HS_do_something_not_stupid</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7317.30908203125, 5806.892578125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>HS_remark_irregularity</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7008.78662109375, 5680.53564453125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Pay_day</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (6790.44482421875, 5682.78271484375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Warning(s)?</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<OBS>T</OBS>
|
||||
<PROPERTY>position = (7014.93408203125, 5581.3759765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeak</FOR>
|
||||
<GIVEN>IcyWeather</GIVEN>
|
||||
<TABLE>0.2 0.8 0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeakWarning</FOR>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<TABLE>0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>IcyWeather</FOR>
|
||||
<TABLE>0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailure</FOR>
|
||||
<TABLE>0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailureWarning</FOR>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<TABLE>0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Meltdown</FOR>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<GIVEN>HS_do_something_not_stupid</GIVEN>
|
||||
<TABLE>0.15 0.85 0.2 0.8 0.05 0.95 0.1 0.9 0.1 0.9 0.15 0.85 0.001 0.999 0.001 0.999</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Battery</FOR>
|
||||
<GIVEN>IcyWeather</GIVEN>
|
||||
<TABLE>0.8 0.2 0.95 0.05</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Radio</FOR>
|
||||
<GIVEN>Battery</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Ignition</FOR>
|
||||
<GIVEN>Battery</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Gas</FOR>
|
||||
<TABLE>0.95 0.05</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Start</FOR>
|
||||
<GIVEN>Ignition</GIVEN>
|
||||
<GIVEN>Gas</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0 0.0 1.0 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Moves</FOR>
|
||||
<GIVEN>Start</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Survives</FOR>
|
||||
<GIVEN>Meltdown</GIVEN>
|
||||
<GIVEN>Moves</GIVEN>
|
||||
<GIVEN>Bicycle_works</GIVEN>
|
||||
<TABLE>0.9 0.1 0.8 0.2 0.6 0.4 0.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Bicycle_works</FOR>
|
||||
<TABLE>0.9 0.1</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>HS_is_awake</FOR>
|
||||
<GIVEN>Pay_day</GIVEN>
|
||||
<TABLE>1.0 0.0 0.5 0.5</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>HS_do_something_not_stupid</FOR>
|
||||
<GIVEN>HS_is_awake</GIVEN>
|
||||
<GIVEN>HS_remark_irregularity</GIVEN>
|
||||
<TABLE>0.7 0.3 0.05 0.95 0.0 1.0 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>HS_remark_irregularity</FOR>
|
||||
<GIVEN>WaterLeakWarning</GIVEN>
|
||||
<GIVEN>PumpFailureWarning</GIVEN>
|
||||
<GIVEN>HS_is_awake</GIVEN>
|
||||
<TABLE>0.9 0.1 0.0 1.0 0.7 0.3 0.0 1.0 0.7 0.3 0.0 1.0 0.05 0.95 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Pay_day</FOR>
|
||||
<TABLE>0.03 0.97</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Warning(s)?</FOR>
|
||||
<GIVEN>WaterLeakWarning</GIVEN>
|
||||
<GIVEN>PumpFailureWarning</GIVEN>
|
||||
<TABLE>1.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
</NETWORK>
|
||||
</BIF>
|
192
lab3/lab3_bicycle.xml
Normal file
192
lab3/lab3_bicycle.xml
Normal file
|
@ -0,0 +1,192 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<BIF VERSION="0.3" xmlns="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3 http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3/XMLBIFv0_3.xsd">
|
||||
<NETWORK>
|
||||
<NAME>Nuclear Power Station</NAME>
|
||||
<PROPERTY>detailed = </PROPERTY>
|
||||
<PROPERTY>short = </PROPERTY>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeak</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7384.1337890625, 5342.26220703125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeakWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7260.0986328125, 5584.7626953125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>IcyWeather</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7579.63818359375, 5085.86474609375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailure</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7123.5244140625, 5338.97509765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailureWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7029.26171875, 5583.60107421875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Meltdown</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7482.10693359375, 5585.57177734375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Battery</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7773.16650390625, 5220.43408203125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Radio</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7679.6611328125, 5350.0634765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Ignition</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7924.04248046875, 5350.0634765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Gas</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8165.234375, 5358.56396484375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Start</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8058.9833984375, 5506.25390625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Moves</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8058.9833984375, 5660.31982421875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Survives</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7650.9716796875, 5801.63623046875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Bicycle_works</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7649.91162109375, 5662.4453125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeak</FOR>
|
||||
<GIVEN>IcyWeather</GIVEN>
|
||||
<TABLE>0.2 0.8 0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeakWarning</FOR>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<TABLE>0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>IcyWeather</FOR>
|
||||
<TABLE>0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailure</FOR>
|
||||
<TABLE>0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailureWarning</FOR>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<TABLE>0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Meltdown</FOR>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<TABLE>0.2 0.8 0.1 0.9 0.15 0.85 0.001 0.999</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Battery</FOR>
|
||||
<GIVEN>IcyWeather</GIVEN>
|
||||
<TABLE>0.8 0.2 0.95 0.05</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Radio</FOR>
|
||||
<GIVEN>Battery</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Ignition</FOR>
|
||||
<GIVEN>Battery</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Gas</FOR>
|
||||
<TABLE>0.95 0.05</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Start</FOR>
|
||||
<GIVEN>Ignition</GIVEN>
|
||||
<GIVEN>Gas</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0 0.0 1.0 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Moves</FOR>
|
||||
<GIVEN>Start</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Survives</FOR>
|
||||
<GIVEN>Meltdown</GIVEN>
|
||||
<GIVEN>Moves</GIVEN>
|
||||
<GIVEN>Bicycle_works</GIVEN>
|
||||
<TABLE>0.9 0.1 0.8 0.2 0.6 0.4 0.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Bicycle_works</FOR>
|
||||
<TABLE>0.9 0.1</TABLE>
|
||||
</DEFINITION>
|
||||
</NETWORK>
|
||||
</BIF>
|
179
lab3/lab3_new_car.xml
Normal file
179
lab3/lab3_new_car.xml
Normal file
|
@ -0,0 +1,179 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<BIF VERSION="0.3" xmlns="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3 http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3/XMLBIFv0_3.xsd">
|
||||
<NETWORK>
|
||||
<NAME>Nuclear Power Station</NAME>
|
||||
<PROPERTY>detailed = </PROPERTY>
|
||||
<PROPERTY>short = </PROPERTY>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeak</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7384.1337890625, 5342.26220703125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeakWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7260.0986328125, 5584.7626953125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>IcyWeather</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7579.63818359375, 5085.86474609375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailure</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7123.5244140625, 5338.97509765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailureWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7029.26171875, 5583.60107421875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Meltdown</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7482.10693359375, 5585.57177734375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Battery</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7773.16650390625, 5220.43408203125)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Radio</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7679.6611328125, 5350.0634765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Ignition</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7924.04248046875, 5350.0634765625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Gas</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8165.234375, 5358.56396484375)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Start</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8058.9833984375, 5506.25390625)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Moves</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (8058.9833984375, 5660.31982421875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Survives</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (7650.9716796875, 5801.63623046875)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeak</FOR>
|
||||
<GIVEN>IcyWeather</GIVEN>
|
||||
<TABLE>0.2 0.8 0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeakWarning</FOR>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<TABLE>0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>IcyWeather</FOR>
|
||||
<TABLE>0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailure</FOR>
|
||||
<TABLE>0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailureWarning</FOR>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<TABLE>0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Meltdown</FOR>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<TABLE>0.2 0.8 0.1 0.9 0.15 0.85 0.001 0.999</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Battery</FOR>
|
||||
<GIVEN>IcyWeather</GIVEN>
|
||||
<TABLE>0.8 0.2 0.95 0.05</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Radio</FOR>
|
||||
<GIVEN>Battery</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Ignition</FOR>
|
||||
<GIVEN>Battery</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Gas</FOR>
|
||||
<TABLE>0.95 0.05</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Start</FOR>
|
||||
<GIVEN>Ignition</GIVEN>
|
||||
<GIVEN>Gas</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0 0.0 1.0 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Moves</FOR>
|
||||
<GIVEN>Start</GIVEN>
|
||||
<TABLE>0.95 0.05 0.0 1.0</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Survives</FOR>
|
||||
<GIVEN>Meltdown</GIVEN>
|
||||
<GIVEN>Moves</GIVEN>
|
||||
<TABLE>0.8 0.2 0.0 1.0 1.0 0.0 1.0 0.0</TABLE>
|
||||
</DEFINITION>
|
||||
</NETWORK>
|
||||
</BIF>
|
88
lab3/nuclear_power_station.xml
Normal file
88
lab3/nuclear_power_station.xml
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0" encoding="US-ASCII"?>
|
||||
|
||||
<BIF VERSION="0.3" xmlns="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3 http://www.cs.ubc.ca/labs/lci/fopi/ve/XMLBIFv0_3/XMLBIFv0_3.xsd">
|
||||
<NETWORK>
|
||||
<NAME>Nuclear Power Station</NAME>
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeak</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (53.0, -52.0)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>WaterLeakWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (112.0, 49.0)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>IcyWeather</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (53.0, -144.0)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailure</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (-145.0, -54.0)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>PumpFailureWarning</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (-203.0, 47.0)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
<VARIABLE TYPE="nature">
|
||||
<NAME>Meltdown</NAME>
|
||||
<OUTCOME>T</OUTCOME>
|
||||
<OUTCOME>F</OUTCOME>
|
||||
<PROPERTY>position = (-60.0, 140.0)</PROPERTY>
|
||||
</VARIABLE>
|
||||
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeak</FOR>
|
||||
<GIVEN>IcyWeather</GIVEN>
|
||||
<TABLE> 0.2 0.8 0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>WaterLeakWarning</FOR>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<TABLE> 0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>IcyWeather</FOR>
|
||||
<TABLE> 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailure</FOR>
|
||||
<TABLE> 0.1 0.9</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>PumpFailureWarning</FOR>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<TABLE> 0.9 0.1 0.05 0.95</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
<DEFINITION>
|
||||
<FOR>Meltdown</FOR>
|
||||
<GIVEN>PumpFailure</GIVEN>
|
||||
<GIVEN>WaterLeak</GIVEN>
|
||||
<TABLE> 0.2 0.8 0.15 0.85 0.1 0.9 0.0010 0.999</TABLE>
|
||||
</DEFINITION>
|
||||
|
||||
|
||||
</NETWORK>
|
||||
</BIF>
|
63
lab4/part1/results.md
Normal file
63
lab4/part1/results.md
Normal file
|
@ -0,0 +1,63 @@
|
|||
## Some results for pb1 on domain "Shakey"
|
||||
The problem 1 is not complex enough to have time comparison, but we can observe different strategies.
|
||||
|
||||
### IPP algorithm
|
||||
```
|
||||
time step 0: MOVE R2 R1
|
||||
time step 1: PUSH BOX1 R1 R2
|
||||
time step 2: PUSH BOX1 R2 R3
|
||||
time step 3: TURN_ON_LIGHT R3 BOX1
|
||||
time step 4: GRAB SMALL4 R3 LEFT
|
||||
GRAB SMALL3 R3 RIGHT
|
||||
time step 5: PUSH BOX1 R3 R2
|
||||
time step 6: PUSH BOX1 R2 R1
|
||||
time step 7: RELEASE SMALL3 R1 RIGHT
|
||||
RELEASE SMALL4 R1 LEFT
|
||||
time step 8: PUSH BOX1 R1 R2
|
||||
time step 9: TURN_ON_LIGHT R2 BOX1
|
||||
time step 10: GRAB SMALL2 R2 RIGHT
|
||||
time step 11: PUSH BOX1 R2 R1
|
||||
time step 12: RELEASE SMALL2 R1 RIGHT
|
||||
|
||||
Memory used: 0.09 MBytes for domain representation
|
||||
2.50 MBytes for graph
|
||||
0.04 MBytes for exclusions
|
||||
0.04 MBytes for memoization
|
||||
0.14 MBytes for wave front
|
||||
```
|
||||
### FF algorithm
|
||||
```
|
||||
step 0: MOVE R2 R1
|
||||
1: PUSH BOX1 R1 R2
|
||||
2: TURN_ON_LIGHT R2 BOX1
|
||||
3: GRAB SMALL2 R2 LEFT
|
||||
4: MOVE R2 R1
|
||||
5: RELEASE SMALL2 R1 LEFT
|
||||
6: MOVE R1 R2
|
||||
7: PUSH BOX1 R2 R3
|
||||
8: TURN_ON_LIGHT R3 BOX1
|
||||
9: GRAB SMALL3 R3 LEFT
|
||||
10: GRAB SMALL4 R3 RIGHT
|
||||
11: MOVE R3 R2
|
||||
12: MOVE R2 R1
|
||||
13: RELEASE SMALL3 R1 LEFT
|
||||
14: RELEASE SMALL4 R1 RIGHT
|
||||
```
|
||||
### LAMA algorithm
|
||||
```
|
||||
(move r2 r1)
|
||||
(push box1 r1 r2)
|
||||
(turn_on_light r2 box1)
|
||||
(grab small2 r2 right)
|
||||
(move r2 r1)
|
||||
(release small2 r1 right)
|
||||
(move r1 r2)
|
||||
(push box1 r2 r3)
|
||||
(turn_on_light r3 box1)
|
||||
(grab small3 r3 left)
|
||||
(grab small4 r3 right)
|
||||
(move r3 r2)
|
||||
(move r2 r1)
|
||||
(release small3 r1 left)
|
||||
(release small4 r1 right)
|
||||
```
|
73
lab4/part1/task1_domain.pddl
Normal file
73
lab4/part1/task1_domain.pddl
Normal file
|
@ -0,0 +1,73 @@
|
|||
;; TDDC17 - Lab 4
|
||||
;; Shakey's World
|
||||
|
||||
;; The objective here is to give a basic
|
||||
;; domain for the Shakey's World problem.
|
||||
|
||||
;; Our domain definition
|
||||
(define (domain shakey)
|
||||
;; We only use strips
|
||||
(:requirements :strips)
|
||||
|
||||
(:types
|
||||
room ;; Represent a room
|
||||
object ;; Represent any object (small objects or boxes)
|
||||
gripper ;; Represent Shakey's gripper
|
||||
)
|
||||
|
||||
;; Predicates definition
|
||||
(:predicates
|
||||
(position ?r - room) ;; Is Shakey in the given room?
|
||||
(light ?r - room) ;; Are lights on in the given room?
|
||||
|
||||
(connected_wide ?r1 ?r2 - room) ;; Are rooms connected by a wide door?
|
||||
(connected ?r1 ?r2 - room) ;; Are rooms connected by a door?
|
||||
|
||||
(in ?o - object ?r - room) ;; Is the given object in the given room?
|
||||
(is_empty ?g - gripper) ;; Is the given gripper empty?
|
||||
(hold_on ?g - gripper ?o - object) ;; Is the given gripper holding the given object?
|
||||
(is_big ?o - object) ;; Is this object big? I.e. is this object a box?
|
||||
)
|
||||
|
||||
;; Actions definition
|
||||
;; Robot's actions
|
||||
(:action move ;; MOVE action, from the room ?pos to ?trg
|
||||
:parameters (?pos ?trg - room)
|
||||
:precondition (and (position ?pos)
|
||||
(connected ?pos ?trg))
|
||||
:effect (and (not (position ?pos)) (position ?trg))
|
||||
)
|
||||
(:action turn_on_light ;; Act of turning on lights. Requires a support.
|
||||
:parameters (?pos - room ?support - object)
|
||||
:precondition (and (position ?pos)
|
||||
(in ?support ?pos)
|
||||
(is_big ?support)
|
||||
(not (light ?pos)))
|
||||
:effect (light ?pos)
|
||||
)
|
||||
|
||||
;; Object actions
|
||||
(:action grab ;; Action to GRAB sth
|
||||
:parameters (?what - object ?where - room ?g - gripper)
|
||||
:precondition (and (position ?where)
|
||||
(light ?where)
|
||||
(in ?what ?where)
|
||||
(is_empty ?g)
|
||||
(not (is_big ?what)))
|
||||
:effect (and (not (is_empty ?g))(hold_on ?g ?what)(in ?what ?where))
|
||||
)
|
||||
(:action release ;; Action to RELEASE sth
|
||||
:parameters (?what - object ?where - room ?g - gripper)
|
||||
:precondition (and (position ?where)
|
||||
(hold_on ?g ?what))
|
||||
:effect (and (not (hold_on ?g ?what))(in ?what ?where)(is_empty ?g))
|
||||
)
|
||||
(:action push ;; Action to PUSH sth
|
||||
:parameters (?what - object ?r1 - room ?r2 - room)
|
||||
:precondition (and (position ?r1)
|
||||
(is_big ?what)
|
||||
(in ?what ?r1)
|
||||
(connected_wide ?r1 ?r2))
|
||||
:effect (and (position ?r2)(not (position ?r1))(in ?what ?r2)(not(in ?what ?r1)))
|
||||
)
|
||||
)
|
89
lab4/part1/task1_pb1.pddl
Normal file
89
lab4/part1/task1_pb1.pddl
Normal file
|
@ -0,0 +1,89 @@
|
|||
;; TDDC17 - Lab 4
|
||||
;; S.'s W. problem 1
|
||||
;; Last modification: 2020-10-04
|
||||
|
||||
;; Problem description
|
||||
;; The first problem has three rooms, connect by doors as discribed below:
|
||||
;; -------------------------------------------------------------------------
|
||||
;; | | | |
|
||||
;; | | | |
|
||||
;; | light switch 1 -|- light switch2 |- light switch3 |
|
||||
;; | | | |
|
||||
;; | --- | door2 |
|
||||
;; | | | door1 shakey | |
|
||||
;; | --- (wide) | |
|
||||
;; | box | | |
|
||||
;; | | door3 |
|
||||
;; | | (wide) |
|
||||
;; | r1 | r2 | r3 |
|
||||
;; -------------------------------------------------------------------------
|
||||
;; Shakey must find four small objects distributed in the three rooms and bring
|
||||
;; them back to the first room. All lights are off initially. The box allowing
|
||||
;; Shakey to turn on the lights is in the first room.
|
||||
|
||||
|
||||
;; Our problem1 definition
|
||||
(define (problem pb1)
|
||||
(:domain shakey)
|
||||
|
||||
(:objects
|
||||
;; Our three rooms
|
||||
r1 - room
|
||||
r2 - room
|
||||
r3 - room
|
||||
|
||||
;; The box
|
||||
box1 - object
|
||||
|
||||
;; The four small objects
|
||||
small1 - object
|
||||
small2 - object
|
||||
small3 - object
|
||||
small4 - object
|
||||
|
||||
;; The two Shakey's grippers
|
||||
right - gripper
|
||||
left - gripper
|
||||
)
|
||||
|
||||
(:init
|
||||
;; Init position
|
||||
;; At the beginning, Shakey is in room 2.
|
||||
(position r2)
|
||||
|
||||
;; Init connections (as discribed above).
|
||||
(connected_wide r1 r2)
|
||||
(connected_wide r2 r1)
|
||||
(connected_wide r2 r3)
|
||||
(connected_wide r3 r2)
|
||||
(connected r1 r2)
|
||||
(connected r2 r1)
|
||||
(connected r2 r3)
|
||||
(connected r3 r2)
|
||||
|
||||
;; Init object positions
|
||||
(in box1 r1)
|
||||
(is_big box1)
|
||||
(in small1 r1)
|
||||
(in small2 r2)
|
||||
(in small3 r3)
|
||||
(in small4 r3)
|
||||
|
||||
;; Init light (light nowhere)
|
||||
;;(not (light r1))
|
||||
;;(not (light r2))
|
||||
;;(not (light r3))
|
||||
|
||||
;; Init gripper
|
||||
(is_empty right)
|
||||
(is_empty left)
|
||||
)
|
||||
|
||||
;; The goal is to have all four objects in the room 1.
|
||||
(:goal
|
||||
(and (in small1 r1)
|
||||
(in small2 r1)
|
||||
(in small3 r1)
|
||||
(in small4 r1))
|
||||
)
|
||||
)
|
68
lab4/part2/domain.pddl
Normal file
68
lab4/part2/domain.pddl
Normal file
|
@ -0,0 +1,68 @@
|
|||
(define (domain transport-strips)
|
||||
(:requirements :typing :action-costs)
|
||||
|
||||
(:types location fuellevel locatable - object
|
||||
package truck - locatable
|
||||
)
|
||||
|
||||
(:predicates
|
||||
(connected ?l1 ?l2 - location)
|
||||
(at ?o - locatable ?l - location)
|
||||
(in ?p - package ?t - truck)
|
||||
(fuel ?t - truck ?level - fuellevel)
|
||||
(fuelcost ?level - fuellevel ?l1 ?l2 - location)
|
||||
(sum ?a ?b ?c - fuellevel)
|
||||
)
|
||||
|
||||
(:functions
|
||||
(total-cost) - number)
|
||||
|
||||
(:action LOAD
|
||||
:parameters
|
||||
(?p - package
|
||||
?t - truck
|
||||
?l - location)
|
||||
:precondition
|
||||
(and (at ?t ?l) (at ?p ?l))
|
||||
:effect
|
||||
(and (not (at ?p ?l)) (in ?p ?t) (increase (total-cost) 1))
|
||||
)
|
||||
|
||||
(:action UNLOAD
|
||||
:parameters
|
||||
(?p - package
|
||||
?t - truck
|
||||
?l - location)
|
||||
:precondition
|
||||
(and (at ?t ?l) (in ?p ?t))
|
||||
:effect
|
||||
(and (at ?p ?l) (not (in ?p ?t)) (increase (total-cost) 1))
|
||||
)
|
||||
|
||||
(:action DRIVE
|
||||
:parameters
|
||||
(?t - truck
|
||||
?l1 - location
|
||||
?l2 - location
|
||||
?fuelpost - fuellevel
|
||||
?fueldelta - fuellevel
|
||||
?fuelpre - fuellevel)
|
||||
:precondition
|
||||
(and
|
||||
(connected ?l1 ?l2)
|
||||
(fuelcost ?fueldelta ?l1 ?l2)
|
||||
(fuel ?t ?fuelpre)
|
||||
(sum ?fuelpost ?fueldelta ?fuelpre)
|
||||
(at ?t ?l1)
|
||||
)
|
||||
:effect
|
||||
(and (not (at ?t ?l1))
|
||||
(at ?t ?l2)
|
||||
(not (fuel ?t ?fuelpre))
|
||||
(fuel ?t ?fuelpost)
|
||||
(increase (total-cost) 1))
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
|
27
lab4/part2/exe.sh
Executable file
27
lab4/part2/exe.sh
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/bash
|
||||
# TDDC17
|
||||
# Script to run all problems with all configurations
|
||||
|
||||
echo "Setting up env."
|
||||
mkdir output
|
||||
echo -ne "Working in: "
|
||||
pwd
|
||||
echo ""
|
||||
|
||||
## CONFIG 1: FF heuristic
|
||||
echo "$i: Running configuration 1 (Eager greedy search, FF heuristic)"
|
||||
/courses/TDDC17/sw/fdlog/fast-downward.py domain.pddl p02.pddl --log-file output/output-config1FF-pb2 --heuristic 'hff=ff()' --search 'eager_greedy([hff])'
|
||||
/courses/TDDC17/sw/fdlog/fast-downward.py domain.pddl p03.pddl --log-file output/output-config1FF-pb3 --heuristic 'hff=ff()' --search 'eager_greedy([hff])'
|
||||
|
||||
## CONFIG 2: Goal count heristic
|
||||
echo "$i: Running configuration 2 (Eager greedy search, Goal count heuristic)"
|
||||
/courses/TDDC17/sw/fdlog/fast-downward.py domain.pddl p02.pddl --log-file output/output-config2GC-pb2 --heuristic 'gc=goalcount()' --search 'eager_greedy([gc])'
|
||||
/courses/TDDC17/sw/fdlog/fast-downward.py domain.pddl p03.pddl --log-file output/output-config2GC-pb3 --heuristic 'gc=goalcount()' --search 'eager_greedy([gc])'
|
||||
|
||||
## CONFIG 3: Goal count heuristic with FF helpful actions
|
||||
echo "$i: Running configuration 2 (Eager greedy search, goal count heuristic with FF helpful actions)"
|
||||
/courses/TDDC17/sw/fdlog/fast-downward.py domain.pddl p02.pddl --log-file output/output-config3GF-pb2 --heuristic 'gc=goalcount()' --heuristic 'hff=ff()' --search 'eager_greedy([gc], preferred=[hff], boost=256)'
|
||||
/courses/TDDC17/sw/fdlog/fast-downward.py domain.pddl p03.pddl --log-file output/output-config3GF-pb3 --heuristic 'gc=goalcount()' --heuristic 'hff=ff()' --search 'eager_greedy([gc], preferred=[hff], boost=256)'
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
1421
lab4/part2/output/output-config1ff-pb2.txt
Normal file
1421
lab4/part2/output/output-config1ff-pb2.txt
Normal file
File diff suppressed because it is too large
Load diff
48394
lab4/part2/output/output-config1ff-pb3.txt
Normal file
48394
lab4/part2/output/output-config1ff-pb3.txt
Normal file
File diff suppressed because it is too large
Load diff
269167
lab4/part2/output/output-config2gc-pb2.txt
Normal file
269167
lab4/part2/output/output-config2gc-pb2.txt
Normal file
File diff suppressed because it is too large
Load diff
10366
lab4/part2/output/output-config2gc-pb3.txt
Normal file
10366
lab4/part2/output/output-config2gc-pb3.txt
Normal file
File diff suppressed because it is too large
Load diff
52447
lab4/part2/output/output-config3gf-pb2.txt
Normal file
52447
lab4/part2/output/output-config3gf-pb2.txt
Normal file
File diff suppressed because it is too large
Load diff
8976
lab4/part2/output/output-config3gf-pb3.txt
Normal file
8976
lab4/part2/output/output-config3gf-pb3.txt
Normal file
File diff suppressed because it is too large
Load diff
699
lab4/part2/output_shakey/output-config1ff-shakey.txt
Normal file
699
lab4/part2/output_shakey/output-config1ff-shakey.txt
Normal file
|
@ -0,0 +1,699 @@
|
|||
{"act": "begin_group", "ts": 0}
|
||||
{"act": "open_list_sorting", "key_list": ["h_SINGLE", "h_(", "h_ff", "h_INSERTION_ORDER", "h_)"]}
|
||||
{"ts":0, "act": "state_update", "state_id": 0, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "g": -1, "real_g": -1}
|
||||
{"ts": 0, "act": "evaluated_states", "state_id": 0, "preferred": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 0}
|
||||
{"ts":0, "act": "state_update", "state_id": 0, "h_ff": 12}
|
||||
{"ts": 0, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "preferred_heuristics", "key_list": []}
|
||||
{"act": "main_heuristic", "target": "h_ff"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 1}
|
||||
{"ts":1, "act": "state_update", "state_id": 0, "g": 0, "real_g": 0}
|
||||
{"ts": 1, "act": "expanded_states", "state_id": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 1}
|
||||
{"ts":1, "act": "state_update", "state_id": 1, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [0, "move r2 r1", 1]}
|
||||
{"ts": 1, "act": "generated_states", "state_id": 0, "op": "move r2 r1"}
|
||||
{"ts":1, "act": "state_update", "state_id": 1, "g": -1, "real_g": -1}
|
||||
{"ts": 1, "act": "evaluated_states", "state_id": 1, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 1}
|
||||
{"ts":1, "act": "state_update", "state_id": 1, "h_ff": 12}
|
||||
{"ts": 1, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":1, "act": "state_update", "state_id": 2, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [0, "move r2 r3", 1]}
|
||||
{"ts": 1, "act": "generated_states", "state_id": 0, "op": "move r2 r3"}
|
||||
{"ts":1, "act": "state_update", "state_id": 2, "g": -1, "real_g": -1}
|
||||
{"ts": 1, "act": "evaluated_states", "state_id": 2, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 1}
|
||||
{"ts":1, "act": "state_update", "state_id": 2, "h_ff": 12}
|
||||
{"ts": 1, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 2}
|
||||
{"ts":2, "act": "state_update", "state_id": 1, "g": 1, "real_g": 1}
|
||||
{"ts": 2, "act": "expanded_states", "state_id": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 2}
|
||||
{"ts":2, "act": "state_update", "state_id": 3, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [1, "push box1 r1 r2", 1]}
|
||||
{"ts": 2, "act": "generated_states", "state_id": 1, "op": "push box1 r1 r2"}
|
||||
{"ts":2, "act": "state_update", "state_id": 3, "g": -1, "real_g": -1}
|
||||
{"ts": 2, "act": "evaluated_states", "state_id": 3, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 2}
|
||||
{"ts":2, "act": "state_update", "state_id": 3, "h_ff": 11}
|
||||
{"ts": 2, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":2, "act": "state_update", "state_id": 4, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "0(Atom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [1, "turn_on_light r1 box1", 1]}
|
||||
{"ts": 2, "act": "generated_states", "state_id": 1, "op": "turn_on_light r1 box1"}
|
||||
{"ts":2, "act": "state_update", "state_id": 4, "g": -1, "real_g": -1}
|
||||
{"ts": 2, "act": "evaluated_states", "state_id": 4, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 2}
|
||||
{"ts":2, "act": "state_update", "state_id": 4, "h_ff": 12}
|
||||
{"ts": 2, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":2, "act": "state_update", "state_id": 0, "new_parent": [1, "move r1 r2", 1]}
|
||||
{"ts": 2, "act": "generated_states", "state_id": 1, "op": "move r1 r2"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 3}
|
||||
{"ts":3, "act": "state_update", "state_id": 3, "g": 2, "real_g": 2}
|
||||
{"ts": 3, "act": "expanded_states", "state_id": 3}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 3}
|
||||
{"ts":3, "act": "state_update", "state_id": 5, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [3, "move r2 r1", 1]}
|
||||
{"ts": 3, "act": "generated_states", "state_id": 3, "op": "move r2 r1"}
|
||||
{"ts":3, "act": "state_update", "state_id": 5, "g": -1, "real_g": -1}
|
||||
{"ts": 3, "act": "evaluated_states", "state_id": 5, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 3}
|
||||
{"ts":3, "act": "state_update", "state_id": 5, "h_ff": 11}
|
||||
{"ts": 3, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":3, "act": "state_update", "state_id": 6, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "0(Atom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [3, "move r2 r3", 1]}
|
||||
{"ts": 3, "act": "generated_states", "state_id": 3, "op": "move r2 r3"}
|
||||
{"ts":3, "act": "state_update", "state_id": 6, "g": -1, "real_g": -1}
|
||||
{"ts": 3, "act": "evaluated_states", "state_id": 6, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 3}
|
||||
{"ts":3, "act": "state_update", "state_id": 6, "h_ff": 11}
|
||||
{"ts": 3, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":3, "act": "state_update", "state_id": 1, "new_parent": [3, "push box1 r2 r1", 1]}
|
||||
{"ts": 3, "act": "generated_states", "state_id": 3, "op": "push box1 r2 r1"}
|
||||
{"ts":3, "act": "state_update", "state_id": 7, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "1(NegatedAtom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [3, "push box1 r2 r3", 1]}
|
||||
{"ts": 3, "act": "generated_states", "state_id": 3, "op": "push box1 r2 r3"}
|
||||
{"ts":3, "act": "state_update", "state_id": 7, "g": -1, "real_g": -1}
|
||||
{"ts": 3, "act": "evaluated_states", "state_id": 7, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 3}
|
||||
{"ts":3, "act": "state_update", "state_id": 7, "h_ff": 11}
|
||||
{"ts": 3, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":3, "act": "state_update", "state_id": 8, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [3, "turn_on_light r2 box1", 1]}
|
||||
{"ts": 3, "act": "generated_states", "state_id": 3, "op": "turn_on_light r2 box1"}
|
||||
{"ts":3, "act": "state_update", "state_id": 8, "g": -1, "real_g": -1}
|
||||
{"ts": 3, "act": "evaluated_states", "state_id": 8, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 3}
|
||||
{"ts":3, "act": "state_update", "state_id": 8, "h_ff": 10}
|
||||
{"ts": 3, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 8, "g": 3, "real_g": 3}
|
||||
{"ts": 4, "act": "expanded_states", "state_id": 8}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 9, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [8, "move r2 r1", 1]}
|
||||
{"ts": 4, "act": "generated_states", "state_id": 8, "op": "move r2 r1"}
|
||||
{"ts":4, "act": "state_update", "state_id": 9, "g": -1, "real_g": -1}
|
||||
{"ts": 4, "act": "evaluated_states", "state_id": 9, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 9, "h_ff": 10}
|
||||
{"ts": 4, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":4, "act": "state_update", "state_id": 10, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [8, "move r2 r3", 1]}
|
||||
{"ts": 4, "act": "generated_states", "state_id": 8, "op": "move r2 r3"}
|
||||
{"ts":4, "act": "state_update", "state_id": 10, "g": -1, "real_g": -1}
|
||||
{"ts": 4, "act": "evaluated_states", "state_id": 10, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 10, "h_ff": 10}
|
||||
{"ts": 4, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":4, "act": "state_update", "state_id": 11, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [8, "push box1 r2 r1", 1]}
|
||||
{"ts": 4, "act": "generated_states", "state_id": 8, "op": "push box1 r2 r1"}
|
||||
{"ts":4, "act": "state_update", "state_id": 11, "g": -1, "real_g": -1}
|
||||
{"ts": 4, "act": "evaluated_states", "state_id": 11, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 11, "h_ff": 11}
|
||||
{"ts": 4, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":4, "act": "state_update", "state_id": 12, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [8, "push box1 r2 r3", 1]}
|
||||
{"ts": 4, "act": "generated_states", "state_id": 8, "op": "push box1 r2 r3"}
|
||||
{"ts":4, "act": "state_update", "state_id": 12, "g": -1, "real_g": -1}
|
||||
{"ts": 4, "act": "evaluated_states", "state_id": 12, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 12, "h_ff": 9}
|
||||
{"ts": 4, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":4, "act": "state_update", "state_id": 13, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "1(Atom hold_on(left, small2))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [8, "grab small2 r2 left", 1]}
|
||||
{"ts": 4, "act": "generated_states", "state_id": 8, "op": "grab small2 r2 left"}
|
||||
{"ts":4, "act": "state_update", "state_id": 13, "g": -1, "real_g": -1}
|
||||
{"ts": 4, "act": "evaluated_states", "state_id": 13, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 13, "h_ff": 9}
|
||||
{"ts": 4, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":4, "act": "state_update", "state_id": 14, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "1(Atom hold_on(right, small2))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [8, "grab small2 r2 right", 1]}
|
||||
{"ts": 4, "act": "generated_states", "state_id": 8, "op": "grab small2 r2 right"}
|
||||
{"ts":4, "act": "state_update", "state_id": 14, "g": -1, "real_g": -1}
|
||||
{"ts": 4, "act": "evaluated_states", "state_id": 14, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 4}
|
||||
{"ts":4, "act": "state_update", "state_id": 14, "h_ff": 9}
|
||||
{"ts": 4, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 5}
|
||||
{"ts":5, "act": "state_update", "state_id": 12, "g": 4, "real_g": 4}
|
||||
{"ts": 5, "act": "expanded_states", "state_id": 12}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 5}
|
||||
{"ts":5, "act": "state_update", "state_id": 8, "new_parent": [12, "push box1 r3 r2", 1]}
|
||||
{"ts": 5, "act": "generated_states", "state_id": 12, "op": "push box1 r3 r2"}
|
||||
{"ts":5, "act": "state_update", "state_id": 15, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [12, "turn_on_light r3 box1", 1]}
|
||||
{"ts": 5, "act": "generated_states", "state_id": 12, "op": "turn_on_light r3 box1"}
|
||||
{"ts":5, "act": "state_update", "state_id": 15, "g": -1, "real_g": -1}
|
||||
{"ts": 5, "act": "evaluated_states", "state_id": 15, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 5}
|
||||
{"ts":5, "act": "state_update", "state_id": 15, "h_ff": 8}
|
||||
{"ts": 5, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":5, "act": "state_update", "state_id": 16, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "1(NegatedAtom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [12, "move r3 r2", 1]}
|
||||
{"ts": 5, "act": "generated_states", "state_id": 12, "op": "move r3 r2"}
|
||||
{"ts":5, "act": "state_update", "state_id": 16, "g": -1, "real_g": -1}
|
||||
{"ts": 5, "act": "evaluated_states", "state_id": 16, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 5}
|
||||
{"ts":5, "act": "state_update", "state_id": 16, "h_ff": 9}
|
||||
{"ts": 5, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 15, "g": 5, "real_g": 5}
|
||||
{"ts": 6, "act": "expanded_states", "state_id": 15}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 17, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [15, "push box1 r3 r2", 1]}
|
||||
{"ts": 6, "act": "generated_states", "state_id": 15, "op": "push box1 r3 r2"}
|
||||
{"ts":6, "act": "state_update", "state_id": 17, "g": -1, "real_g": -1}
|
||||
{"ts": 6, "act": "evaluated_states", "state_id": 17, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 17, "h_ff": 8}
|
||||
{"ts": 6, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":6, "act": "state_update", "state_id": 18, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [15, "move r3 r2", 1]}
|
||||
{"ts": 6, "act": "generated_states", "state_id": 15, "op": "move r3 r2"}
|
||||
{"ts":6, "act": "state_update", "state_id": 18, "g": -1, "real_g": -1}
|
||||
{"ts": 6, "act": "evaluated_states", "state_id": 18, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 18, "h_ff": 8}
|
||||
{"ts": 6, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":6, "act": "state_update", "state_id": 19, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [15, "grab small3 r3 left", 1]}
|
||||
{"ts": 6, "act": "generated_states", "state_id": 15, "op": "grab small3 r3 left"}
|
||||
{"ts":6, "act": "state_update", "state_id": 19, "g": -1, "real_g": -1}
|
||||
{"ts": 6, "act": "evaluated_states", "state_id": 19, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 19, "h_ff": 7}
|
||||
{"ts": 6, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":6, "act": "state_update", "state_id": 20, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "3(Atom hold_on(left, small4))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [15, "grab small4 r3 left", 1]}
|
||||
{"ts": 6, "act": "generated_states", "state_id": 15, "op": "grab small4 r3 left"}
|
||||
{"ts":6, "act": "state_update", "state_id": 20, "g": -1, "real_g": -1}
|
||||
{"ts": 6, "act": "evaluated_states", "state_id": 20, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 20, "h_ff": 7}
|
||||
{"ts": 6, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":6, "act": "state_update", "state_id": 21, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "2(Atom hold_on(right, small3))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [15, "grab small3 r3 right", 1]}
|
||||
{"ts": 6, "act": "generated_states", "state_id": 15, "op": "grab small3 r3 right"}
|
||||
{"ts":6, "act": "state_update", "state_id": 21, "g": -1, "real_g": -1}
|
||||
{"ts": 6, "act": "evaluated_states", "state_id": 21, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 21, "h_ff": 7}
|
||||
{"ts": 6, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":6, "act": "state_update", "state_id": 22, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [15, "grab small4 r3 right", 1]}
|
||||
{"ts": 6, "act": "generated_states", "state_id": 15, "op": "grab small4 r3 right"}
|
||||
{"ts":6, "act": "state_update", "state_id": 22, "g": -1, "real_g": -1}
|
||||
{"ts": 6, "act": "evaluated_states", "state_id": 22, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 6}
|
||||
{"ts":6, "act": "state_update", "state_id": 22, "h_ff": 7}
|
||||
{"ts": 6, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 7}
|
||||
{"ts":7, "act": "state_update", "state_id": 19, "g": 6, "real_g": 6}
|
||||
{"ts": 7, "act": "expanded_states", "state_id": 19}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 7}
|
||||
{"ts":7, "act": "state_update", "state_id": 23, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [19, "push box1 r3 r2", 1]}
|
||||
{"ts": 7, "act": "generated_states", "state_id": 19, "op": "push box1 r3 r2"}
|
||||
{"ts":7, "act": "state_update", "state_id": 23, "g": -1, "real_g": -1}
|
||||
{"ts": 7, "act": "evaluated_states", "state_id": 23, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 7}
|
||||
{"ts":7, "act": "state_update", "state_id": 23, "h_ff": 7}
|
||||
{"ts": 7, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":7, "act": "state_update", "state_id": 24, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [19, "move r3 r2", 1]}
|
||||
{"ts": 7, "act": "generated_states", "state_id": 19, "op": "move r3 r2"}
|
||||
{"ts":7, "act": "state_update", "state_id": 24, "g": -1, "real_g": -1}
|
||||
{"ts": 7, "act": "evaluated_states", "state_id": 24, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 7}
|
||||
{"ts":7, "act": "state_update", "state_id": 24, "h_ff": 7}
|
||||
{"ts": 7, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":7, "act": "state_update", "state_id": 25, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "2(Atom hold_on(right, small3))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [19, "grab small3 r3 right", 1]}
|
||||
{"ts": 7, "act": "generated_states", "state_id": 19, "op": "grab small3 r3 right"}
|
||||
{"ts":7, "act": "state_update", "state_id": 25, "g": -1, "real_g": -1}
|
||||
{"ts": 7, "act": "evaluated_states", "state_id": 25, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 7}
|
||||
{"ts":7, "act": "state_update", "state_id": 25, "h_ff": 9}
|
||||
{"ts": 7, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":7, "act": "state_update", "state_id": 26, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [19, "grab small4 r3 right", 1]}
|
||||
{"ts": 7, "act": "generated_states", "state_id": 19, "op": "grab small4 r3 right"}
|
||||
{"ts":7, "act": "state_update", "state_id": 26, "g": -1, "real_g": -1}
|
||||
{"ts": 7, "act": "evaluated_states", "state_id": 26, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 7}
|
||||
{"ts":7, "act": "state_update", "state_id": 26, "h_ff": 7}
|
||||
{"ts": 7, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":7, "act": "state_update", "state_id": 15, "new_parent": [19, "release small3 r3 left", 1]}
|
||||
{"ts": 7, "act": "generated_states", "state_id": 19, "op": "release small3 r3 left"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 8}
|
||||
{"ts":8, "act": "state_update", "state_id": 20, "g": 6, "real_g": 6}
|
||||
{"ts": 8, "act": "expanded_states", "state_id": 20}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 8}
|
||||
{"ts":8, "act": "state_update", "state_id": 27, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "3(Atom hold_on(left, small4))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [20, "push box1 r3 r2", 1]}
|
||||
{"ts": 8, "act": "generated_states", "state_id": 20, "op": "push box1 r3 r2"}
|
||||
{"ts":8, "act": "state_update", "state_id": 27, "g": -1, "real_g": -1}
|
||||
{"ts": 8, "act": "evaluated_states", "state_id": 27, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 8}
|
||||
{"ts":8, "act": "state_update", "state_id": 27, "h_ff": 7}
|
||||
{"ts": 8, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":8, "act": "state_update", "state_id": 28, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "3(Atom hold_on(left, small4))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [20, "move r3 r2", 1]}
|
||||
{"ts": 8, "act": "generated_states", "state_id": 20, "op": "move r3 r2"}
|
||||
{"ts":8, "act": "state_update", "state_id": 28, "g": -1, "real_g": -1}
|
||||
{"ts": 8, "act": "evaluated_states", "state_id": 28, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 8}
|
||||
{"ts":8, "act": "state_update", "state_id": 28, "h_ff": 7}
|
||||
{"ts": 8, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":8, "act": "state_update", "state_id": 29, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "3(Atom hold_on(left, small4))", "var13": "2(Atom hold_on(right, small3))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [20, "grab small3 r3 right", 1]}
|
||||
{"ts": 8, "act": "generated_states", "state_id": 20, "op": "grab small3 r3 right"}
|
||||
{"ts":8, "act": "state_update", "state_id": 29, "g": -1, "real_g": -1}
|
||||
{"ts": 8, "act": "evaluated_states", "state_id": 29, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 8}
|
||||
{"ts":8, "act": "state_update", "state_id": 29, "h_ff": 7}
|
||||
{"ts": 8, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":8, "act": "state_update", "state_id": 30, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "3(Atom hold_on(left, small4))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [20, "grab small4 r3 right", 1]}
|
||||
{"ts": 8, "act": "generated_states", "state_id": 20, "op": "grab small4 r3 right"}
|
||||
{"ts":8, "act": "state_update", "state_id": 30, "g": -1, "real_g": -1}
|
||||
{"ts": 8, "act": "evaluated_states", "state_id": 30, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 8}
|
||||
{"ts":8, "act": "state_update", "state_id": 30, "h_ff": 9}
|
||||
{"ts": 8, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":8, "act": "state_update", "state_id": 15, "new_parent": [20, "release small4 r3 left", 1]}
|
||||
{"ts": 8, "act": "generated_states", "state_id": 20, "op": "release small4 r3 left"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 9}
|
||||
{"ts":9, "act": "state_update", "state_id": 21, "g": 6, "real_g": 6}
|
||||
{"ts": 9, "act": "expanded_states", "state_id": 21}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 9}
|
||||
{"ts":9, "act": "state_update", "state_id": 31, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "2(Atom hold_on(right, small3))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [21, "push box1 r3 r2", 1]}
|
||||
{"ts": 9, "act": "generated_states", "state_id": 21, "op": "push box1 r3 r2"}
|
||||
{"ts":9, "act": "state_update", "state_id": 31, "g": -1, "real_g": -1}
|
||||
{"ts": 9, "act": "evaluated_states", "state_id": 31, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 9}
|
||||
{"ts":9, "act": "state_update", "state_id": 31, "h_ff": 7}
|
||||
{"ts": 9, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":9, "act": "state_update", "state_id": 32, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "2(Atom hold_on(right, small3))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [21, "move r3 r2", 1]}
|
||||
{"ts": 9, "act": "generated_states", "state_id": 21, "op": "move r3 r2"}
|
||||
{"ts":9, "act": "state_update", "state_id": 32, "g": -1, "real_g": -1}
|
||||
{"ts": 9, "act": "evaluated_states", "state_id": 32, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 9}
|
||||
{"ts":9, "act": "state_update", "state_id": 32, "h_ff": 7}
|
||||
{"ts": 9, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":9, "act": "state_update", "state_id": 25, "new_parent": [21, "grab small3 r3 left", 1]}
|
||||
{"ts": 9, "act": "generated_states", "state_id": 21, "op": "grab small3 r3 left"}
|
||||
{"ts":9, "act": "state_update", "state_id": 25, "g": 7, "real_g": 7}
|
||||
{"ts":9, "act": "state_update", "state_id": 29, "new_parent": [21, "grab small4 r3 left", 1]}
|
||||
{"ts": 9, "act": "generated_states", "state_id": 21, "op": "grab small4 r3 left"}
|
||||
{"ts":9, "act": "state_update", "state_id": 29, "g": 7, "real_g": 7}
|
||||
{"ts":9, "act": "state_update", "state_id": 15, "new_parent": [21, "release small3 r3 right", 1]}
|
||||
{"ts": 9, "act": "generated_states", "state_id": 21, "op": "release small3 r3 right"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 10}
|
||||
{"ts":10, "act": "state_update", "state_id": 22, "g": 6, "real_g": 6}
|
||||
{"ts": 10, "act": "expanded_states", "state_id": 22}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 10}
|
||||
{"ts":10, "act": "state_update", "state_id": 33, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [22, "push box1 r3 r2", 1]}
|
||||
{"ts": 10, "act": "generated_states", "state_id": 22, "op": "push box1 r3 r2"}
|
||||
{"ts":10, "act": "state_update", "state_id": 33, "g": -1, "real_g": -1}
|
||||
{"ts": 10, "act": "evaluated_states", "state_id": 33, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 10}
|
||||
{"ts":10, "act": "state_update", "state_id": 33, "h_ff": 7}
|
||||
{"ts": 10, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":10, "act": "state_update", "state_id": 34, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [22, "move r3 r2", 1]}
|
||||
{"ts": 10, "act": "generated_states", "state_id": 22, "op": "move r3 r2"}
|
||||
{"ts":10, "act": "state_update", "state_id": 34, "g": -1, "real_g": -1}
|
||||
{"ts": 10, "act": "evaluated_states", "state_id": 34, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 10}
|
||||
{"ts":10, "act": "state_update", "state_id": 34, "h_ff": 7}
|
||||
{"ts": 10, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":10, "act": "state_update", "state_id": 26, "new_parent": [22, "grab small3 r3 left", 1]}
|
||||
{"ts": 10, "act": "generated_states", "state_id": 22, "op": "grab small3 r3 left"}
|
||||
{"ts":10, "act": "state_update", "state_id": 26, "g": 7, "real_g": 7}
|
||||
{"ts":10, "act": "state_update", "state_id": 30, "new_parent": [22, "grab small4 r3 left", 1]}
|
||||
{"ts": 10, "act": "generated_states", "state_id": 22, "op": "grab small4 r3 left"}
|
||||
{"ts":10, "act": "state_update", "state_id": 30, "g": 7, "real_g": 7}
|
||||
{"ts":10, "act": "state_update", "state_id": 15, "new_parent": [22, "release small4 r3 right", 1]}
|
||||
{"ts": 10, "act": "generated_states", "state_id": 22, "op": "release small4 r3 right"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 11}
|
||||
{"ts":11, "act": "state_update", "state_id": 23, "g": 7, "real_g": 7}
|
||||
{"ts": 11, "act": "expanded_states", "state_id": 23}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 11}
|
||||
{"ts":11, "act": "state_update", "state_id": 35, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [23, "move r2 r1", 1]}
|
||||
{"ts": 11, "act": "generated_states", "state_id": 23, "op": "move r2 r1"}
|
||||
{"ts":11, "act": "state_update", "state_id": 35, "g": -1, "real_g": -1}
|
||||
{"ts": 11, "act": "evaluated_states", "state_id": 35, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 11}
|
||||
{"ts":11, "act": "state_update", "state_id": 35, "h_ff": 7}
|
||||
{"ts": 11, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":11, "act": "state_update", "state_id": 36, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [23, "move r2 r3", 1]}
|
||||
{"ts": 11, "act": "generated_states", "state_id": 23, "op": "move r2 r3"}
|
||||
{"ts":11, "act": "state_update", "state_id": 36, "g": -1, "real_g": -1}
|
||||
{"ts": 11, "act": "evaluated_states", "state_id": 36, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 11}
|
||||
{"ts":11, "act": "state_update", "state_id": 36, "h_ff": 7}
|
||||
{"ts": 11, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":11, "act": "state_update", "state_id": 37, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [23, "push box1 r2 r1", 1]}
|
||||
{"ts": 11, "act": "generated_states", "state_id": 23, "op": "push box1 r2 r1"}
|
||||
{"ts":11, "act": "state_update", "state_id": 37, "g": -1, "real_g": -1}
|
||||
{"ts": 11, "act": "evaluated_states", "state_id": 37, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 11}
|
||||
{"ts":11, "act": "state_update", "state_id": 37, "h_ff": 7}
|
||||
{"ts": 11, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":11, "act": "state_update", "state_id": 19, "new_parent": [23, "push box1 r2 r3", 1]}
|
||||
{"ts": 11, "act": "generated_states", "state_id": 23, "op": "push box1 r2 r3"}
|
||||
{"ts":11, "act": "state_update", "state_id": 38, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "1(Atom hold_on(right, small2))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [23, "grab small2 r2 right", 1]}
|
||||
{"ts": 11, "act": "generated_states", "state_id": 23, "op": "grab small2 r2 right"}
|
||||
{"ts":11, "act": "state_update", "state_id": 38, "g": -1, "real_g": -1}
|
||||
{"ts": 11, "act": "evaluated_states", "state_id": 38, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 11}
|
||||
{"ts":11, "act": "state_update", "state_id": 38, "h_ff": 7}
|
||||
{"ts": 11, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":11, "act": "state_update", "state_id": 39, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "0(Atom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [23, "release small3 r2 left", 1]}
|
||||
{"ts": 11, "act": "generated_states", "state_id": 23, "op": "release small3 r2 left"}
|
||||
{"ts":11, "act": "state_update", "state_id": 39, "g": -1, "real_g": -1}
|
||||
{"ts": 11, "act": "evaluated_states", "state_id": 39, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 11}
|
||||
{"ts":11, "act": "state_update", "state_id": 39, "h_ff": 8}
|
||||
{"ts": 11, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 12}
|
||||
{"ts":12, "act": "state_update", "state_id": 24, "g": 7, "real_g": 7}
|
||||
{"ts": 12, "act": "expanded_states", "state_id": 24}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 12}
|
||||
{"ts":12, "act": "state_update", "state_id": 40, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [24, "move r2 r1", 1]}
|
||||
{"ts": 12, "act": "generated_states", "state_id": 24, "op": "move r2 r1"}
|
||||
{"ts":12, "act": "state_update", "state_id": 40, "g": -1, "real_g": -1}
|
||||
{"ts": 12, "act": "evaluated_states", "state_id": 40, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 12}
|
||||
{"ts":12, "act": "state_update", "state_id": 40, "h_ff": 7}
|
||||
{"ts": 12, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":12, "act": "state_update", "state_id": 19, "new_parent": [24, "move r2 r3", 1]}
|
||||
{"ts": 12, "act": "generated_states", "state_id": 24, "op": "move r2 r3"}
|
||||
{"ts":12, "act": "state_update", "state_id": 41, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "1(Atom hold_on(right, small2))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [24, "grab small2 r2 right", 1]}
|
||||
{"ts": 12, "act": "generated_states", "state_id": 24, "op": "grab small2 r2 right"}
|
||||
{"ts":12, "act": "state_update", "state_id": 41, "g": -1, "real_g": -1}
|
||||
{"ts": 12, "act": "evaluated_states", "state_id": 41, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 12}
|
||||
{"ts":12, "act": "state_update", "state_id": 41, "h_ff": 7}
|
||||
{"ts": 12, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":12, "act": "state_update", "state_id": 42, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "0(Atom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [24, "release small3 r2 left", 1]}
|
||||
{"ts": 12, "act": "generated_states", "state_id": 24, "op": "release small3 r2 left"}
|
||||
{"ts":12, "act": "state_update", "state_id": 42, "g": -1, "real_g": -1}
|
||||
{"ts": 12, "act": "evaluated_states", "state_id": 42, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 12}
|
||||
{"ts":12, "act": "state_update", "state_id": 42, "h_ff": 8}
|
||||
{"ts": 12, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 13}
|
||||
{"ts": 13, "act": "expanded_states", "state_id": 26}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 13}
|
||||
{"ts":13, "act": "state_update", "state_id": 43, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [26, "push box1 r3 r2", 1]}
|
||||
{"ts": 13, "act": "generated_states", "state_id": 26, "op": "push box1 r3 r2"}
|
||||
{"ts":13, "act": "state_update", "state_id": 43, "g": -1, "real_g": -1}
|
||||
{"ts": 13, "act": "evaluated_states", "state_id": 43, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 13}
|
||||
{"ts":13, "act": "state_update", "state_id": 43, "h_ff": 6}
|
||||
{"ts": 13, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":13, "act": "state_update", "state_id": 44, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [26, "move r3 r2", 1]}
|
||||
{"ts": 13, "act": "generated_states", "state_id": 26, "op": "move r3 r2"}
|
||||
{"ts":13, "act": "state_update", "state_id": 44, "g": -1, "real_g": -1}
|
||||
{"ts": 13, "act": "evaluated_states", "state_id": 44, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 13}
|
||||
{"ts":13, "act": "state_update", "state_id": 44, "h_ff": 6}
|
||||
{"ts": 13, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":13, "act": "state_update", "state_id": 22, "new_parent": [26, "release small3 r3 left", 1]}
|
||||
{"ts": 13, "act": "generated_states", "state_id": 26, "op": "release small3 r3 left"}
|
||||
{"ts":13, "act": "state_update", "state_id": 19, "new_parent": [26, "release small4 r3 right", 1]}
|
||||
{"ts": 13, "act": "generated_states", "state_id": 26, "op": "release small4 r3 right"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 14}
|
||||
{"ts":14, "act": "state_update", "state_id": 43, "g": 8, "real_g": 8}
|
||||
{"ts": 14, "act": "expanded_states", "state_id": 43}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 14}
|
||||
{"ts":14, "act": "state_update", "state_id": 45, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [43, "move r2 r1", 1]}
|
||||
{"ts": 14, "act": "generated_states", "state_id": 43, "op": "move r2 r1"}
|
||||
{"ts":14, "act": "state_update", "state_id": 45, "g": -1, "real_g": -1}
|
||||
{"ts": 14, "act": "evaluated_states", "state_id": 45, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 14}
|
||||
{"ts":14, "act": "state_update", "state_id": 45, "h_ff": 5}
|
||||
{"ts": 14, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":14, "act": "state_update", "state_id": 46, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [43, "move r2 r3", 1]}
|
||||
{"ts": 14, "act": "generated_states", "state_id": 43, "op": "move r2 r3"}
|
||||
{"ts":14, "act": "state_update", "state_id": 46, "g": -1, "real_g": -1}
|
||||
{"ts": 14, "act": "evaluated_states", "state_id": 46, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 14}
|
||||
{"ts":14, "act": "state_update", "state_id": 46, "h_ff": 7}
|
||||
{"ts": 14, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":14, "act": "state_update", "state_id": 47, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [43, "push box1 r2 r1", 1]}
|
||||
{"ts": 14, "act": "generated_states", "state_id": 43, "op": "push box1 r2 r1"}
|
||||
{"ts":14, "act": "state_update", "state_id": 47, "g": -1, "real_g": -1}
|
||||
{"ts": 14, "act": "evaluated_states", "state_id": 47, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 14}
|
||||
{"ts":14, "act": "state_update", "state_id": 47, "h_ff": 5}
|
||||
{"ts": 14, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":14, "act": "state_update", "state_id": 26, "new_parent": [43, "push box1 r2 r3", 1]}
|
||||
{"ts": 14, "act": "generated_states", "state_id": 43, "op": "push box1 r2 r3"}
|
||||
{"ts":14, "act": "state_update", "state_id": 48, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "0(Atom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [43, "release small3 r2 left", 1]}
|
||||
{"ts": 14, "act": "generated_states", "state_id": 43, "op": "release small3 r2 left"}
|
||||
{"ts":14, "act": "state_update", "state_id": 48, "g": -1, "real_g": -1}
|
||||
{"ts": 14, "act": "evaluated_states", "state_id": 48, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 14}
|
||||
{"ts":14, "act": "state_update", "state_id": 48, "h_ff": 6}
|
||||
{"ts": 14, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":14, "act": "state_update", "state_id": 49, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "0(Atom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [43, "release small4 r2 right", 1]}
|
||||
{"ts": 14, "act": "generated_states", "state_id": 43, "op": "release small4 r2 right"}
|
||||
{"ts":14, "act": "state_update", "state_id": 49, "g": -1, "real_g": -1}
|
||||
{"ts": 14, "act": "evaluated_states", "state_id": 49, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 14}
|
||||
{"ts":14, "act": "state_update", "state_id": 49, "h_ff": 6}
|
||||
{"ts": 14, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 15}
|
||||
{"ts":15, "act": "state_update", "state_id": 45, "g": 9, "real_g": 9}
|
||||
{"ts": 15, "act": "expanded_states", "state_id": 45}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 15}
|
||||
{"ts":15, "act": "state_update", "state_id": 43, "new_parent": [45, "move r1 r2", 1]}
|
||||
{"ts": 15, "act": "generated_states", "state_id": 45, "op": "move r1 r2"}
|
||||
{"ts":15, "act": "state_update", "state_id": 50, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [45, "release small3 r1 left", 1]}
|
||||
{"ts": 15, "act": "generated_states", "state_id": 45, "op": "release small3 r1 left"}
|
||||
{"ts":15, "act": "state_update", "state_id": 50, "g": -1, "real_g": -1}
|
||||
{"ts": 15, "act": "evaluated_states", "state_id": 50, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 15}
|
||||
{"ts":15, "act": "state_update", "state_id": 50, "h_ff": 4}
|
||||
{"ts": 15, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":15, "act": "state_update", "state_id": 51, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "2(Atom hold_on(left, small3))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "1(NegatedAtom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [45, "release small4 r1 right", 1]}
|
||||
{"ts": 15, "act": "generated_states", "state_id": 45, "op": "release small4 r1 right"}
|
||||
{"ts":15, "act": "state_update", "state_id": 51, "g": -1, "real_g": -1}
|
||||
{"ts": 15, "act": "evaluated_states", "state_id": 51, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 15}
|
||||
{"ts":15, "act": "state_update", "state_id": 51, "h_ff": 4}
|
||||
{"ts": 15, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 16}
|
||||
{"ts":16, "act": "state_update", "state_id": 50, "g": 10, "real_g": 10}
|
||||
{"ts": 16, "act": "expanded_states", "state_id": 50}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 16}
|
||||
{"ts":16, "act": "state_update", "state_id": 52, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "3(Atom hold_on(right, small4))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "1(NegatedAtom in(small4, r1))"}, "new_parent": [50, "move r1 r2", 1]}
|
||||
{"ts": 16, "act": "generated_states", "state_id": 50, "op": "move r1 r2"}
|
||||
{"ts":16, "act": "state_update", "state_id": 52, "g": -1, "real_g": -1}
|
||||
{"ts": 16, "act": "evaluated_states", "state_id": 52, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 16}
|
||||
{"ts":16, "act": "state_update", "state_id": 52, "h_ff": 4}
|
||||
{"ts": 16, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":16, "act": "state_update", "state_id": 53, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [50, "release small4 r1 right", 1]}
|
||||
{"ts": 16, "act": "generated_states", "state_id": 50, "op": "release small4 r1 right"}
|
||||
{"ts":16, "act": "state_update", "state_id": 53, "g": -1, "real_g": -1}
|
||||
{"ts": 16, "act": "evaluated_states", "state_id": 53, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 16}
|
||||
{"ts":16, "act": "state_update", "state_id": 53, "h_ff": 3}
|
||||
{"ts": 16, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 17}
|
||||
{"ts":17, "act": "state_update", "state_id": 53, "g": 11, "real_g": 11}
|
||||
{"ts": 17, "act": "expanded_states", "state_id": 53}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 17}
|
||||
{"ts":17, "act": "state_update", "state_id": 54, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [53, "move r1 r2", 1]}
|
||||
{"ts": 17, "act": "generated_states", "state_id": 53, "op": "move r1 r2"}
|
||||
{"ts":17, "act": "state_update", "state_id": 54, "g": -1, "real_g": -1}
|
||||
{"ts": 17, "act": "evaluated_states", "state_id": 54, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 17}
|
||||
{"ts":17, "act": "state_update", "state_id": 54, "h_ff": 3}
|
||||
{"ts": 17, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 18}
|
||||
{"ts":18, "act": "state_update", "state_id": 54, "g": 12, "real_g": 12}
|
||||
{"ts": 18, "act": "expanded_states", "state_id": 54}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 18}
|
||||
{"ts":18, "act": "state_update", "state_id": 53, "new_parent": [54, "move r2 r1", 1]}
|
||||
{"ts": 18, "act": "generated_states", "state_id": 54, "op": "move r2 r1"}
|
||||
{"ts":18, "act": "state_update", "state_id": 55, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [54, "move r2 r3", 1]}
|
||||
{"ts": 18, "act": "generated_states", "state_id": 54, "op": "move r2 r3"}
|
||||
{"ts":18, "act": "state_update", "state_id": 55, "g": -1, "real_g": -1}
|
||||
{"ts": 18, "act": "evaluated_states", "state_id": 55, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 18}
|
||||
{"ts":18, "act": "state_update", "state_id": 55, "h_ff": 4}
|
||||
{"ts": 18, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":18, "act": "state_update", "state_id": 56, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [54, "push box1 r2 r1", 1]}
|
||||
{"ts": 18, "act": "generated_states", "state_id": 54, "op": "push box1 r2 r1"}
|
||||
{"ts":18, "act": "state_update", "state_id": 56, "g": -1, "real_g": -1}
|
||||
{"ts": 18, "act": "evaluated_states", "state_id": 56, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 18}
|
||||
{"ts":18, "act": "state_update", "state_id": 56, "h_ff": 3}
|
||||
{"ts": 18, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":18, "act": "state_update", "state_id": 57, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [54, "push box1 r2 r3", 1]}
|
||||
{"ts": 18, "act": "generated_states", "state_id": 54, "op": "push box1 r2 r3"}
|
||||
{"ts":18, "act": "state_update", "state_id": 57, "g": -1, "real_g": -1}
|
||||
{"ts": 18, "act": "evaluated_states", "state_id": 57, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 18}
|
||||
{"ts":18, "act": "state_update", "state_id": 57, "h_ff": 4}
|
||||
{"ts": 18, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":18, "act": "state_update", "state_id": 58, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "1(Atom hold_on(left, small2))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [54, "grab small2 r2 left", 1]}
|
||||
{"ts": 18, "act": "generated_states", "state_id": 54, "op": "grab small2 r2 left"}
|
||||
{"ts":18, "act": "state_update", "state_id": 58, "g": -1, "real_g": -1}
|
||||
{"ts": 18, "act": "evaluated_states", "state_id": 58, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 18}
|
||||
{"ts":18, "act": "state_update", "state_id": 58, "h_ff": 2}
|
||||
{"ts": 18, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":18, "act": "state_update", "state_id": 59, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "1(Atom hold_on(right, small2))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [54, "grab small2 r2 right", 1]}
|
||||
{"ts": 18, "act": "generated_states", "state_id": 54, "op": "grab small2 r2 right"}
|
||||
{"ts":18, "act": "state_update", "state_id": 59, "g": -1, "real_g": -1}
|
||||
{"ts": 18, "act": "evaluated_states", "state_id": 59, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 18}
|
||||
{"ts":18, "act": "state_update", "state_id": 59, "h_ff": 2}
|
||||
{"ts": 18, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 19}
|
||||
{"ts":19, "act": "state_update", "state_id": 58, "g": 13, "real_g": 13}
|
||||
{"ts": 19, "act": "expanded_states", "state_id": 58}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 19}
|
||||
{"ts":19, "act": "state_update", "state_id": 60, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "1(Atom hold_on(left, small2))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [58, "move r2 r1", 1]}
|
||||
{"ts": 19, "act": "generated_states", "state_id": 58, "op": "move r2 r1"}
|
||||
{"ts":19, "act": "state_update", "state_id": 60, "g": -1, "real_g": -1}
|
||||
{"ts": 19, "act": "evaluated_states", "state_id": 60, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 19}
|
||||
{"ts":19, "act": "state_update", "state_id": 60, "h_ff": 1}
|
||||
{"ts": 19, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":19, "act": "state_update", "state_id": 61, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "1(Atom hold_on(left, small2))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [58, "move r2 r3", 1]}
|
||||
{"ts": 19, "act": "generated_states", "state_id": 58, "op": "move r2 r3"}
|
||||
{"ts":19, "act": "state_update", "state_id": 61, "g": -1, "real_g": -1}
|
||||
{"ts": 19, "act": "evaluated_states", "state_id": 61, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 19}
|
||||
{"ts":19, "act": "state_update", "state_id": 61, "h_ff": 3}
|
||||
{"ts": 19, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":19, "act": "state_update", "state_id": 62, "state": {"var0": "0(Atom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "1(Atom hold_on(left, small2))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [58, "push box1 r2 r1", 1]}
|
||||
{"ts": 19, "act": "generated_states", "state_id": 58, "op": "push box1 r2 r1"}
|
||||
{"ts":19, "act": "state_update", "state_id": 62, "g": -1, "real_g": -1}
|
||||
{"ts": 19, "act": "evaluated_states", "state_id": 62, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 19}
|
||||
{"ts":19, "act": "state_update", "state_id": 62, "h_ff": 1}
|
||||
{"ts": 19, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":19, "act": "state_update", "state_id": 63, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "0(Atom in(box1, r3))", "var2": "2(Atom position(r3))", "var3": "1(NegatedAtom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "1(Atom hold_on(left, small2))", "var13": "4(Atom is_empty(right))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [58, "push box1 r2 r3", 1]}
|
||||
{"ts": 19, "act": "generated_states", "state_id": 58, "op": "push box1 r2 r3"}
|
||||
{"ts":19, "act": "state_update", "state_id": 63, "g": -1, "real_g": -1}
|
||||
{"ts": 19, "act": "evaluated_states", "state_id": 63, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 19}
|
||||
{"ts":19, "act": "state_update", "state_id": 63, "h_ff": 3}
|
||||
{"ts": 19, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":19, "act": "state_update", "state_id": 64, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "1(Atom position(r2))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "1(Atom hold_on(left, small2))", "var13": "1(Atom hold_on(right, small2))", "var14": "1(NegatedAtom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [58, "grab small2 r2 right", 1]}
|
||||
{"ts": 19, "act": "generated_states", "state_id": 58, "op": "grab small2 r2 right"}
|
||||
{"ts":19, "act": "state_update", "state_id": 64, "g": -1, "real_g": -1}
|
||||
{"ts": 19, "act": "evaluated_states", "state_id": 64, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 19}
|
||||
{"ts":19, "act": "state_update", "state_id": 64, "h_ff": 2}
|
||||
{"ts": 19, "act": "evaluated_heuristics", "count": 1}
|
||||
{"ts":19, "act": "state_update", "state_id": 54, "new_parent": [58, "release small2 r2 left", 1]}
|
||||
{"ts": 19, "act": "generated_states", "state_id": 58, "op": "release small2 r2 left"}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 20}
|
||||
{"ts":20, "act": "state_update", "state_id": 60, "g": 14, "real_g": 14}
|
||||
{"ts": 20, "act": "expanded_states", "state_id": 60}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 20}
|
||||
{"ts":20, "act": "state_update", "state_id": 58, "new_parent": [60, "move r1 r2", 1]}
|
||||
{"ts": 20, "act": "generated_states", "state_id": 60, "op": "move r1 r2"}
|
||||
{"ts":20, "act": "state_update", "state_id": 65, "state": {"var0": "1(NegatedAtom in(box1, r1))", "var1": "1(NegatedAtom in(box1, r3))", "var2": "0(Atom position(r1))", "var3": "0(Atom in(box1, r2))", "var4": "0(Atom light(r2))", "var5": "1(NegatedAtom light(r1))", "var6": "0(Atom light(r3))", "var7": "1(NegatedAtom in(small1, r2))", "var8": "1(NegatedAtom in(small1, r3))", "var9": "1(NegatedAtom in(small2, r3))", "var10": "1(NegatedAtom in(small3, r2))", "var11": "1(NegatedAtom in(small4, r2))", "var12": "4(Atom is_empty(left))", "var13": "4(Atom is_empty(right))", "var14": "0(Atom in(small2, r1))", "var15": "0(Atom in(small3, r1))", "var16": "0(Atom in(small4, r1))"}, "new_parent": [60, "release small2 r1 left", 1]}
|
||||
{"ts": 20, "act": "generated_states", "state_id": 60, "op": "release small2 r1 left"}
|
||||
{"ts":20, "act": "state_update", "state_id": 65, "g": -1, "real_g": -1}
|
||||
{"ts": 20, "act": "evaluated_states", "state_id": 65, "preferred": 0}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 20}
|
||||
{"ts":20, "act": "state_update", "state_id": 65, "h_ff": 0}
|
||||
{"ts": 20, "act": "evaluated_heuristics", "count": 1}
|
||||
{"act": "end_group"}
|
||||
{"act": "begin_group", "ts": 21}
|
||||
{"ts":21, "act": "state_update", "state_id": 65, "g": 15, "real_g": 15}
|
||||
{"ts": 21, "act": "expanded_states", "state_id": 65}
|
||||
{"act": "end_group"}
|
||||
{"ts": 21, "act": "plan_found", "state_ids": [0, 1, 3, 8, 12, 15, 19, 26, 43, 45, 50, 53, 54, 58, 60, 65]}
|
7134
lab4/part2/output_shakey/output-config2gc-shakey.txt
Normal file
7134
lab4/part2/output_shakey/output-config2gc-shakey.txt
Normal file
File diff suppressed because it is too large
Load diff
1871
lab4/part2/output_shakey/output-config3gf-shakey.txt
Normal file
1871
lab4/part2/output_shakey/output-config3gf-shakey.txt
Normal file
File diff suppressed because it is too large
Load diff
5128
lab4/part2/p02.pddl
Normal file
5128
lab4/part2/p02.pddl
Normal file
File diff suppressed because it is too large
Load diff
16559
lab4/part2/p03.pddl
Normal file
16559
lab4/part2/p03.pddl
Normal file
File diff suppressed because it is too large
Load diff
308
lab5/QLearningController.java
Normal file
308
lab5/QLearningController.java
Normal file
|
@ -0,0 +1,308 @@
|
|||
import java.text.DecimalFormat;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Locale;
|
||||
import java.util.Random;
|
||||
|
||||
// TDDC17 - Lab 5
|
||||
// Part 2: Q Learning Controller
|
||||
// Last modification: 2020-10-06
|
||||
|
||||
/* GUI commands :
|
||||
* M : disable GUI, much faster
|
||||
* E : toggle exploration
|
||||
* V : Speed up learning
|
||||
* P : turn off controller
|
||||
* O : turn on controller
|
||||
* W, A, S, D : manual commands
|
||||
*/
|
||||
|
||||
/* TODO:
|
||||
* -Define state and reward functions (StateAndReward.java) suitable for your problem --> done.
|
||||
* -Define actions --> done.
|
||||
* -Implement missing parts of Q-learning --> done.
|
||||
* -Tune state and reward function, and parameters below if the result is not satisfactory */
|
||||
|
||||
public class QLearningController extends Controller {
|
||||
// Change this value for part 3 (State & reward hover)
|
||||
boolean HOVER_MODE = true;
|
||||
|
||||
/* These are the agents senses (inputs) */
|
||||
DoubleFeature x; /* Positions */
|
||||
DoubleFeature y;
|
||||
DoubleFeature vx; /* Velocities */
|
||||
DoubleFeature vy;
|
||||
DoubleFeature angle; /* Angle */
|
||||
|
||||
/* These are the agents actuators (outputs)*/
|
||||
RocketEngine leftEngine;
|
||||
RocketEngine middleEngine;
|
||||
RocketEngine rightEngine;
|
||||
|
||||
final static int NUM_ACTIONS = 7; /* The takeAction function must be changed if this is modified */
|
||||
|
||||
/* Keep track of the previous state and action */
|
||||
String previous_state = null;
|
||||
double previous_vx = 0;
|
||||
double previous_vy = 0;
|
||||
double previous_angle = 0;
|
||||
int previous_action = 0;
|
||||
|
||||
/* The tables used by Q-learning */
|
||||
Hashtable<String, Double> Qtable = new Hashtable<String, Double>(); /* Contains the Q-values - the state-action utilities */
|
||||
Hashtable<String, Integer> Ntable = new Hashtable<String, Integer>(); /* Keeps track of how many times each state-action combination has been used */
|
||||
|
||||
/* PARAMETERS OF THE LEARNING ALGORITHM - THESE MAY BE TUNED BUT THE DEFAULT VALUES OFTEN WORK REASONABLY WELL */
|
||||
static final double GAMMA_DISCOUNT_FACTOR = 0.95; /* Must be < 1, small values make it very greedy */
|
||||
static final double LEARNING_RATE_CONSTANT = 10; /* See alpha(), lower values are good for quick results in large and deterministic state spaces */
|
||||
double explore_chance = 0.5; /* The exploration chance during the exploration phase */
|
||||
final static int REPEAT_ACTION_MAX = 30; /* Repeat selected action at most this many times trying reach a new state, without a max it could loop forever if the action cannot lead to a new state */
|
||||
|
||||
/* Some internal counters */
|
||||
int iteration = 0; /* Keeps track of how many iterations the agent has run */
|
||||
int action_counter = 0; /* Keeps track of how many times we have repeated the current action */
|
||||
int print_counter = 0; /* Makes printouts less spammy */
|
||||
|
||||
/* These are just internal helper variables, you can ignore these */
|
||||
boolean paused = false;
|
||||
boolean explore = true; /* Will always do exploration by default */
|
||||
|
||||
DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.US);
|
||||
public SpringObject object;
|
||||
ComposedSpringObject cso;
|
||||
long lastPressedExplore = 0;
|
||||
|
||||
public void init() {
|
||||
cso = (ComposedSpringObject) object;
|
||||
x = (DoubleFeature) cso.getObjectById("x");
|
||||
y = (DoubleFeature) cso.getObjectById("y");
|
||||
vx = (DoubleFeature) cso.getObjectById("vx");
|
||||
vy = (DoubleFeature) cso.getObjectById("vy");
|
||||
angle = (DoubleFeature) cso.getObjectById("angle");
|
||||
|
||||
previous_vy = vy.getValue();
|
||||
previous_vx = vx.getValue();
|
||||
previous_angle = angle.getValue();
|
||||
|
||||
leftEngine = (RocketEngine) cso.getObjectById("rocket_engine_left");
|
||||
rightEngine = (RocketEngine) cso.getObjectById("rocket_engine_right");
|
||||
middleEngine = (RocketEngine) cso.getObjectById("rocket_engine_middle");
|
||||
}
|
||||
|
||||
|
||||
/* Turn off all rockets */
|
||||
void resetRockets() {
|
||||
leftEngine.setBursting(false);
|
||||
rightEngine.setBursting(false);
|
||||
middleEngine.setBursting(false);
|
||||
}
|
||||
|
||||
/* Performs the chosen action */
|
||||
void performAction(int action) {
|
||||
/* Fire zeh rockets! */
|
||||
resetRockets();
|
||||
switch (action) {
|
||||
// Do nothing
|
||||
case 0: break;
|
||||
|
||||
case 1: leftEngine.setBursting(true);
|
||||
break;
|
||||
|
||||
case 2: rightEngine.setBursting(true);
|
||||
break;
|
||||
|
||||
case 3: middleEngine.setBursting(true);
|
||||
break;
|
||||
|
||||
case 4: leftEngine.setBursting(true);
|
||||
middleEngine.setBursting(true);
|
||||
break;
|
||||
|
||||
case 5: rightEngine.setBursting(true);
|
||||
middleEngine.setBursting(true);
|
||||
break;
|
||||
|
||||
case 6: middleEngine.setBursting(true);
|
||||
leftEngine.setBursting(true);
|
||||
rightEngine.setBursting(true);
|
||||
break;
|
||||
|
||||
case 7: rightEngine.setBursting(true);
|
||||
leftEngine.setBursting(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main decision loop. Called every iteration by the simulator */
|
||||
public void tick(int currentTime) {
|
||||
iteration++;
|
||||
|
||||
if (!paused) {
|
||||
String new_state;
|
||||
double previous_reward;
|
||||
|
||||
// You can choose the value of HOVER_MODE line 19 (for part 3)
|
||||
if (!HOVER_MODE) {
|
||||
new_state = StateAndReward.getStateAngle(angle.getValue(), vx.getValue(), vy.getValue());
|
||||
previous_reward = StateAndReward.getRewardAngle(previous_angle, previous_vx, previous_vy);
|
||||
}
|
||||
else {
|
||||
new_state = StateAndReward.getStateHover(angle.getValue(), vx.getValue(), vy.getValue());
|
||||
previous_reward = StateAndReward.getRewardHover(previous_angle, previous_vx, previous_vy);
|
||||
}
|
||||
|
||||
/* Repeat the chosen action for a while, hoping to reach a new state. This is a trick to speed up learning on this problem. */
|
||||
action_counter++;
|
||||
if (new_state.equals(previous_state) && action_counter < REPEAT_ACTION_MAX) {
|
||||
return;
|
||||
}
|
||||
|
||||
action_counter = 0;
|
||||
|
||||
/* The agent is in a new state, do learning and action selection */
|
||||
if (previous_state != null) {
|
||||
/* Create state-action key */
|
||||
String prev_stateaction = previous_state + previous_action;
|
||||
|
||||
/* Increment state-action counter */
|
||||
if (Ntable.get(prev_stateaction) == null) {
|
||||
Ntable.put(prev_stateaction, 0);
|
||||
}
|
||||
Ntable.put(prev_stateaction, Ntable.get(prev_stateaction) + 1);
|
||||
|
||||
/* Update Q value */
|
||||
if (Qtable.get(prev_stateaction) == null) {
|
||||
Qtable.put(prev_stateaction, 0.0);
|
||||
} else {
|
||||
// Here, we use temporal-difference Q-learning equation, as define in
|
||||
// AI: A Modern Approach, 4th ed. (Russell, Norvig) p. 802 (22.7):
|
||||
// Q(s,a) <-- Q(s,a) + alpha*[R(s,a,s') + gamma*max(a')(Q(s',a')) - Q(s,a)]
|
||||
// where: alpha --> learning rate
|
||||
// gamma --> discount factor
|
||||
|
||||
double gamma = GAMMA_DISCOUNT_FACTOR;
|
||||
double alpha = alpha(Ntable.get(prev_stateaction));
|
||||
|
||||
double Q = Qtable.get(prev_stateaction)
|
||||
+ alpha*(previous_reward + gamma*getMaxActionQValue(new_state) - Qtable.get(prev_stateaction));
|
||||
|
||||
Qtable.put(prev_stateaction, Q);
|
||||
|
||||
// done.
|
||||
}
|
||||
|
||||
int action = selectAction(new_state); /* Make sure you understand how it selects an action */
|
||||
|
||||
performAction(action);
|
||||
|
||||
/* Only print every 10th line to reduce spam */
|
||||
print_counter++;
|
||||
if (print_counter % 1000 == 0) {
|
||||
System.out.println("ITERATION: " + iteration + " SENSORS: a=" + df.format(angle.getValue()) + " vx=" + df.format(vx.getValue()) +
|
||||
" vy=" + df.format(vy.getValue()) + " P_STATE: " + previous_state + " P_ACTION: " + previous_action +
|
||||
" P_REWARD: " + df.format(previous_reward) + " P_QVAL: " + df.format(Qtable.get(prev_stateaction)) + " Tested: "
|
||||
+ Ntable.get(prev_stateaction) + " times.");
|
||||
}
|
||||
|
||||
previous_vy = vy.getValue();
|
||||
previous_vx = vx.getValue();
|
||||
previous_angle = angle.getValue();
|
||||
previous_action = action;
|
||||
}
|
||||
previous_state = new_state;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Computes the learning rate parameter alpha based on the number of times the state-action combination has been tested */
|
||||
public double alpha(int num_tested) {
|
||||
/* Lower learning rate constants means that alpha will become small faster and therefore make the agent behavior converge to
|
||||
* to a solution faster, but if the state space is not properly explored at that point the resulting behavior may be poor.
|
||||
* If your state-space is really huge you may need to increase it. */
|
||||
double alpha = (LEARNING_RATE_CONSTANT/(LEARNING_RATE_CONSTANT + num_tested));
|
||||
return alpha;
|
||||
}
|
||||
|
||||
/* Finds the highest Qvalue of any action in the given state */
|
||||
public double getMaxActionQValue(String state) {
|
||||
double maxQval = Double.NEGATIVE_INFINITY;
|
||||
|
||||
for (int action = 0; action < NUM_ACTIONS; action++) {
|
||||
Double Qval = Qtable.get(state+action);
|
||||
if (Qval != null && Qval > maxQval) {
|
||||
maxQval = Qval;
|
||||
}
|
||||
}
|
||||
|
||||
if (maxQval == Double.NEGATIVE_INFINITY) {
|
||||
/* Assign 0 as that corresponds to initializing the Qtable to 0. */
|
||||
maxQval = 0;
|
||||
}
|
||||
return maxQval;
|
||||
}
|
||||
|
||||
/* Selects an action in a state based on the registered Q-values and the exploration chance */
|
||||
public int selectAction(String state) {
|
||||
Random rand = new Random();
|
||||
|
||||
int action = 0;
|
||||
/* May do exploratory move if in exploration mode */
|
||||
if (explore && Math.abs(rand.nextDouble()) < explore_chance) {
|
||||
/* Taking random exploration action! */
|
||||
action = Math.abs(rand. nextInt()) % NUM_ACTIONS;
|
||||
return action;
|
||||
}
|
||||
|
||||
/* Find action with highest Q-val (utility) in given state */
|
||||
double maxQval = Double.NEGATIVE_INFINITY;
|
||||
for (int i = 0; i < NUM_ACTIONS; i++) {
|
||||
String test_pair = state + i; /* Generate a state-action pair for all actions */
|
||||
double Qval = 0;
|
||||
if (Qtable.get(test_pair) != null) {
|
||||
Qval = Qtable.get(test_pair);
|
||||
}
|
||||
if (Qval > maxQval) {
|
||||
maxQval = Qval;
|
||||
action = i;
|
||||
}
|
||||
}
|
||||
return action;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* The 'E' key will toggle the agents exploration mode. Turn this off to test its behavior */
|
||||
public void toggleExplore() {
|
||||
/* Make sure we don't toggle it multiple times */
|
||||
if (System.currentTimeMillis() - lastPressedExplore < 1000) {
|
||||
return;
|
||||
}
|
||||
if (explore) {
|
||||
System.out.println("Turning OFF exploration!");
|
||||
explore = false;
|
||||
} else {
|
||||
System.out.println("Turning ON exploration!");
|
||||
explore = true;
|
||||
}
|
||||
lastPressedExplore = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
/* Keys 1 and 2 can be customized for whatever purpose if you want to */
|
||||
public void toggleCustom1() {
|
||||
System.out.println("Custom key 1 pressed!");
|
||||
}
|
||||
|
||||
/* Keys 1 and 2 can be customized for whatever purpose if you want to */
|
||||
public void toggleCustom2() {
|
||||
System.out.println("Custom key 2 pressed!");
|
||||
}
|
||||
|
||||
public void pause() {
|
||||
paused = true;
|
||||
resetRockets();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
paused = false;
|
||||
}
|
||||
}
|
87
lab5/StateAndReward.java
Normal file
87
lab5/StateAndReward.java
Normal file
|
@ -0,0 +1,87 @@
|
|||
public class StateAndReward {
|
||||
|
||||
|
||||
/* State discretization function for the angle controller */
|
||||
public static String getStateAngle(double angle, double vx, double vy) {
|
||||
return " " + discretize2(angle, 20, 2*-Math.PI/3, 2*Math.PI/3) + " ";
|
||||
}
|
||||
|
||||
/* Reward function for the angle controller */
|
||||
public static double getRewardAngle(double angle, double vx, double vy) {
|
||||
return Math.PI - Math.abs(angle);
|
||||
}
|
||||
|
||||
/* State discretization function for the full hover controller */
|
||||
public static String getStateHover(double angle, double vx, double vy) {
|
||||
return discretize2(angle, 10, 2*-Math.PI/3, 2*Math.PI/3)
|
||||
+ " / " + discretize(vx, 3, -1, 1)
|
||||
+ " / " + discretize(vy, 11, -1, 1);
|
||||
}
|
||||
|
||||
/* Reward function for the full hover controller */
|
||||
public static double getRewardHover(double angle, double vx, double vy) {
|
||||
return (Math.PI - Math.abs(angle))/2 + (10 - Math.abs(Math.max(Math.abs(vx), Math.abs(vy)))) / 5;
|
||||
}
|
||||
|
||||
// ///////////////////////////////////////////////////////////
|
||||
// discretize() performs a uniform discretization of the
|
||||
// value parameter.
|
||||
// It returns an integer between 0 and nrValues-1.
|
||||
// The min and max parameters are used to specify the interval
|
||||
// for the discretization.
|
||||
// If the value is lower than min, 0 is returned
|
||||
// If the value is higher than min, nrValues-1 is returned
|
||||
// otherwise a value between 1 and nrValues-2 is returned.
|
||||
//
|
||||
// Use discretize2() if you want a discretization method that does
|
||||
// not handle values lower than min and higher than max.
|
||||
// ///////////////////////////////////////////////////////////
|
||||
public static int discretize(double value, int nrValues, double min,
|
||||
double max) {
|
||||
if (nrValues < 2) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
double diff = max - min;
|
||||
|
||||
if (value < min) {
|
||||
return 0;
|
||||
}
|
||||
if (value > max) {
|
||||
return nrValues - 1;
|
||||
}
|
||||
|
||||
double tempValue = value - min;
|
||||
double ratio = tempValue / diff;
|
||||
|
||||
return (int) (ratio * (nrValues - 2)) + 1;
|
||||
}
|
||||
|
||||
// ///////////////////////////////////////////////////////////
|
||||
// discretize2() performs a uniform discretization of the
|
||||
// value parameter.
|
||||
// It returns an integer between 0 and nrValues-1.
|
||||
// The min and max parameters are used to specify the interval
|
||||
// for the discretization.
|
||||
// If the value is lower than min, 0 is returned
|
||||
// If the value is higher than min, nrValues-1 is returned
|
||||
// otherwise a value between 0 and nrValues-1 is returned.
|
||||
// ///////////////////////////////////////////////////////////
|
||||
public static int discretize2(double value, int nrValues, double min,
|
||||
double max) {
|
||||
double diff = max - min;
|
||||
|
||||
if (value < min) {
|
||||
return 0;
|
||||
}
|
||||
if (value > max) {
|
||||
return nrValues - 1;
|
||||
}
|
||||
|
||||
double tempValue = value - min;
|
||||
double ratio = tempValue / diff;
|
||||
|
||||
return (int) (ratio * nrValues);
|
||||
}
|
||||
|
||||
}
|
80
lab5/TutorialController.java
Normal file
80
lab5/TutorialController.java
Normal file
|
@ -0,0 +1,80 @@
|
|||
// INFO: See below.
|
||||
|
||||
public class TutorialController extends Controller {
|
||||
|
||||
public SpringObject object;
|
||||
|
||||
ComposedSpringObject cso;
|
||||
|
||||
/* These are the agents senses (inputs) */
|
||||
DoubleFeature x; /* Positions */
|
||||
DoubleFeature y;
|
||||
DoubleFeature vx; /* Velocities */
|
||||
DoubleFeature vy;
|
||||
DoubleFeature angle; /* Angle */
|
||||
|
||||
/* Example:
|
||||
* x.getValue() returns the vertical position of the rocket
|
||||
*/
|
||||
|
||||
/* These are the agents actuators (outputs)*/
|
||||
RocketEngine leftRocket;
|
||||
RocketEngine middleRocket;
|
||||
RocketEngine rightRocket;
|
||||
|
||||
/* Example:
|
||||
* leftRocket.setBursting(true) turns on the left rocket
|
||||
*/
|
||||
|
||||
public void init() {
|
||||
cso = (ComposedSpringObject) object;
|
||||
x = (DoubleFeature) cso.getObjectById("x");
|
||||
y = (DoubleFeature) cso.getObjectById("y");
|
||||
vx = (DoubleFeature) cso.getObjectById("vx");
|
||||
vy = (DoubleFeature) cso.getObjectById("vy");
|
||||
angle = (DoubleFeature) cso.getObjectById("angle");
|
||||
|
||||
leftRocket = (RocketEngine) cso.getObjectById("rocket_engine_left");
|
||||
rightRocket = (RocketEngine) cso.getObjectById("rocket_engine_right");
|
||||
middleRocket = (RocketEngine) cso.getObjectById("rocket_engine_middle");
|
||||
}
|
||||
|
||||
public void tick(int currentTime) {
|
||||
|
||||
// TDDC17
|
||||
// Part1: Print useful informations and use
|
||||
// threshold to guide the vessel
|
||||
|
||||
System.out.println("Tick: " + currentTime + ". Angle: " + angle.getValue() + ", vx: " + vx.getValue() + ", vy: " + vy.getValue());
|
||||
|
||||
|
||||
System.out.print("Vessel state: ");
|
||||
if (angle.getValue() > 0.01) {
|
||||
rightRocket.setBursting(true);
|
||||
System.out.print("ENG_RGT ON; ");
|
||||
}
|
||||
else {
|
||||
rightRocket.setBursting(false);
|
||||
System.out.print("ENG_RGT OFF; ");
|
||||
}
|
||||
if (angle.getValue() < -0.01) {
|
||||
leftRocket.setBursting(true);
|
||||
System.out.print("ENG_LFT ON; ");
|
||||
}
|
||||
else {
|
||||
leftRocket.setBursting(false);
|
||||
System.out.print("ENG_LFT OFF; ");
|
||||
}
|
||||
if (vy.getValue() > 0.05) {
|
||||
middleRocket.setBursting(true);
|
||||
System.out.print("ENG_MDL ON; ");
|
||||
}
|
||||
else {
|
||||
middleRocket.setBursting(false);
|
||||
System.out.print("ENG_MDL OFF; ");
|
||||
}
|
||||
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue