JaCaMo team for MAPC 2020
Requirements:
- jdk >= 13
- Edit the script
/clientconf/createFile.sh, setting on both teams thehostparameter tolocalhost,passwordto1, and set the parameterusernametoagentA%dandagentB%don team A and B respectivelly. - Execute the script to create the client configuration files.
- Make sure the server is being launched by setting the instruction
Server.main(...)at the filesrc/java/runMAPC2020/Control.java. - Execute the default strategy running
./gradlew run, press enter to start the simulation, and see the execution on a browser. You can set another strategy giving arguments, for instance:./gradlew run --args="src/jcm/individualist.jcm
- Edit the script
/clientconf/createFile.sh, setting on both teams configuration thehost,password, andusernamethat will be used for the competition (e.g.:agentcontest1.in.tu-clausthal.de,some-password,agentJaCaMo_Builders%d). In this case, you can set teamA to play on a server (e.g.agentcontest1.in.tu-clausthal.de) and team B to play on a second server (e.g.agentcontest2.in.tu-clausthal.de). - Execute the script to create the client configuration files.
- Make sure the server is NOT being launched removing/commenting the instruction
Server.main(...)at the filesrc/java/runMAPC2020/Control.java. - Execute
./gradlew run --args="src/jcm/teamA.jcmor./gradlew run --args="src/jcm/teamB.jcmaccording to the server.
Requirements:
- jdk >= 13
- Eclipse Java-EE or Committer
To add the project in your workspace, use the Eclipse menu File|Import|Existing Gradle Project and select the project directory.
Then
- use gradle tasks to run the team, or
- select and run class
runMAPC2020.Run
Requirements:
- Docker
- (no need to install java, gradle, jacamo, ... only Docker)
Run once (sudo - root privileges can be necessary):
docker volume create --name gradle-cache
Run the team (sudo - root privileges can be necessary):
docker run -ti --rm -u gradle -v gradle-cache:/home/gradle/.gradle -v "$PWD":/home/gradle/project -w /home/gradle/project -p 8000:8000 gradle:6.3.0-jdk13 ./gradlew run
- To add addition configurations when running add
--args=after./gradlew run.- Use the first argument to specify an JCM file (e.g.:
./gradlew run --args="src/jcm/donothing_X_donothing.jcm. - Use the second argument to specify whether you want to open the standard browser automatically (e.g.:
./gradlew run --args="src/jcm/donothing_X_donothing.jcm browserto open it. Use something else to do not open the browser./gradlew run --args="src/jcm/donothing_X_donothing.jcm noBrowser).
- Use the first argument to specify an JCM file (e.g.:
- No X11 DISPLAY variable was set. Solution:
- change
./logging.propertiesfile to usehandlers=java.util.logging.ConsoleHandlerand make sure no debug windows are activated in the.jcmfile. - make sure in the
.jcmthe visual interface for local position system is off (0), which is the second parameter oflocalPositionSystem.lps(_,0).
- change
mapc2020/
src/
agt/ -- Jason Agents
buildblock/ -- mid-level plans for assembling complex structures
environment/ -- low-level bridges to artifacts
exploration/ -- low-level helpers for gps facilities
simulation/ -- low-level bridges for interacting with massim
strategies/ -- top-level strategies
tasks/ -- mid-level helpers for task accomplishment
walking/ -- low-level helpers for walking
agentBase.asl -- the base for top-level strategies
env/ -- CArtAgO Artifacts
connection/ -- artifacts to connect agents and the simulator
coordination/ -- artifacts to coordinate agents
localPositionSystem/ -- artifacts to provide gps facilities
java/ -- Java supportive classes
bb/ -- can be used to store beliefs of agents for tests
jason/stdlib/ -- internal actions for mapc
mabOptimizer/ -- libs for Multi Armed Bandit stochastic algorithm
runMAPPC2020/ -- classes for launching the simulator and JaCaMo
scenario/ -- classes for scenario interpretations
jcm/ -- initialization scripts
test/
jacamo/ -- tests for jacamo systems
agt/ -- mapc tester agents folder
inc/ -- test helpers for mapc tester agents
- MAPC provides an environment which provides body representations for agents which walk on a 2 dimensional space and are expected to achieve given tasks.
- We play at the client side but while developing we are also able to launch the server side and do local simulations.
- The simulation run in steps and each agent has a timeout, i.e., a deadline to reply to the simulator a given action to the current step (default is 4 seconds).
- If no action is provided by a given agent it is counted as a missed step. For the qualification we cannot miss more than 30% of the steps on each round.
- Each round usually has 750 steps.
- The agents have to explore the area and map it to properly navigate and accomplish tasks.
- Tasks ask for delivering some structures composed by blocks (b0, b1 or b2) which must be attached to the agent that has accepted the task and must be delivered on goal areas. The blocks must be positioned exactly as specified by the task and only the agent must be on a goal square. And the given deadline (in steps) for the task must be respected in order to get a reward.
- Tasks rewards falls dramatically each step until they get their minimum reward. For instance, by default a single block task gives at least
1point and a 2 blocks task gives4points. - Normal terrains,
goalareas,dispensersandtaskboardsare walkable, butobstaclesor terrains occupied by agents/entitiesorblocksare not. - To attach a block the agent must go to an adjacent position of a
dropped blockto attach it, or it can go to an adjacent position of a specificdispenserto request and attach it. - The whole local simulation is composed by three rounds, the first starts with 15 agents and the other ones with 30 and 50 agents respectivelly.
** Currently, the strategy for the qualification is starting with 50 agents. In the first round, only 15 agents take place in the simulation which does not bring major problems.
** Notice that
src/agt/simulationprovides libraries to deal with the end of a round in order to clean agents' mids and artifacts. - There are two teams (
aandb). In most of our tests we are developing the teamaand running againstbcomposed bydo_nothingagents, i.e., these agents justskiptheir actions every step. - Default agents' identifications start with the word
agent, followed by the team identification (AorB) and an unique number for each team starting from the number 1 (e.g.: agentA1, agentA2,... and, agentB1, agentB2,...)
- Although we still have many work on low and mid-level libraries, we already have some base code which allows to focus more on top-level strategies.
- To create new strategies you can use
src/jcm/weak_individualistg.jcmandsrc/agt/strategies/weak_individualist.aslas model, duplicating these file and changing the copy for your own purposes. This model agent already usessrc/agt/agentBase.aslwhich provides exploration facilities, i.e., an empty new strategy (just including theagentBase.aslcode) is already supposed to work well, but just doing the exploration. - In your strategy you may find a good starting point to create a plan for
+task(T,D,R,REQs)in order to define actions that your strategy will perform when the simulator announces a task. - While launching, please, give some time to the system to create the agents and artifacts instances. After a few seconds, and no new messages are printed, just press ENTER to start the simulation.
- Running locally, open in your browser the address http://127.0.0.1:8000 to watch the simulation. You can also debug your agents at http://127.0.0.1:3272 and your artifacts at http://127.0.0.1:3273.
- We are creating the artifacts from
aslfiles instead ofjcm. To create new artifacts you may find interesting using the same model we have insrc/agt/environmentfiles. For instance,artifact_eis.aslshows how to create one artifact for each existing agent andartifact_gps.aslshows how to create a shared artifact.
- The server setup is stated at
mapc2020/serverconf/and client setups, which are the most important part for us, are stated atmapc2020/clientconf/folder. - When running locally, our
jsonconfiguration files onmapc2020/clientconf/are set to connect to thelocalhostmachine. When qualifying or during matches we will need to set our agents to some given server. ** The scriptcreateFiles.shhelps to quickly create a set of configuration files, just edit the template inside ofcreateFiles.shand run it$ ./createFiles.sh.
- Create an agent for testing your agent(s). You can use the default
src/test/jason/aslfolder (all agents in this folder are automatically launched in the test task). - Provide to your tester agent the testing facilities
{ include("$jasonJar/test/jason/inc/tester_agent.asl") }
- Add to your test agent (eg.:
src/test/jason/asl/test_meeting.asl) support to the agent it is going to test:
{ include("exploration/meeting.asl") }
- The plans in which the label has the annotation
[test]are automatically launched (e.g.:@test_coord_same_position[test]) - Run
./gradlew testto check results. You can run./gradlew test -ito see more detailed messages or event./gradlew test --debugfor a full debug
For instance, let us say tat @test_coord_same_position is as below:
@test_coord_same_position[test]
+!test_coord_same_position
<-
?coord(0,0,0,0,[],L1);
!assert_equals(61,.length(L1));
.findall(p(X,Y),proof(X,Y),L0);
.difference(L0,L1,DIFF);
!assert_equals([],DIFF);
.
In the file src/test/jason/asl/test_meeting.asl we add some known facts. When running ./gradlew test, it will launch this [test] plan and get from a rule coord/6 which is provided by exploration/meeting.asl a list L1. From the known facts, we know that two perspectives from the same origin (0,0) have same view, so, they are sharing 61 elements, so we can assert it as done in !assert_equals(61,.length(L1));. Then since we previously know each coordinate they are sharing (which regards to vision(5), i.e., 5 squares in radius) we have also created proof facts that are being confronted with the result provided by coord/6. The difference from the proof and the result from coord/6 must be an empty set! In this sense, we are testing in this plan the rule coord/6 in the hypothetical case of two agents sharing the same position (0,0).
Tests are run every git push and can also be performed locally using ./gradlew test or gradle test.
- When we have a plan being tested on every push we have the opportunity to be advised if some change has affected other parts of the system. It is specially effective when we have many developers working in the same project.
- Performing local tests may also be a more convenient and faster way to test new features. The local tests usually run faster than the simulation. It is also often hard to test from the simulation since usually we have to wait for agents to reach some specific condition in which some test is going to be performed. It takes time, needs focus of the developer and usually many .print/.log messages.
We have a JCM using jacamo-web which may be helpful for faster the development of new features and tests. Actually, since MAPC uses a simulator which can produce changes very fast, jacamo-web is not being shown a good development environment. For this reason, the playground proposes the use jacamo-web out of the simulation. It is useful since it allows to quickly make changes (even while running) and after it has some maturity we can move from player's code to a final agent code or a tester agent. The script src/jcm/playground.jcm just launches a jacamo-web environment with the agent src/agt/player.asl. For instance, if we want to test the rule get_rotation provided by walking/rotate_jA_star.asl.
{ include("test_walking_helpers.asl") }
{ include("walking/rotate_jA_star.asl") }
+!start
<-
-+myposition(0,0);
-+origin(mymap);
?get_rotation(b(1,0,b0),b(0,1,b0),D0);
.log(warning,"Rotate a block from 3 o'clock to 6 o'clock got ",D0);
.
- We can use jacamo-web command box to trigger the plan
!startwhenever we want to check the result. - We can use jacamo-web to edit and reload the agent
playerwith the new code to quickly try different possibilities. - Since we don't have inputs from the simulation, it is often necessary to use some snapshot of the simulation like the one we have at
src/test/inc/test_walking.bb. - It is also often necessary to mock plans that triggers actions on the environment (the file
src/test/inc/test_walking_helpers.aslhas some examples of mocks at plan!add_test_plans_do(MIN_I)).
WARNING:
- Unfortunately, jacamo-web is not updating agent's rules after hot-swapping the agent, instead it is necessary to manually kill/create the agent.