├── .github └── workflows │ ├── gradle.yml │ └── pages.yml ├── .gitignore ├── LICENSE ├── build.gradle ├── demos ├── basic-cartago │ ├── alice.asl │ ├── basic_cartago.mas2j │ ├── bob.asl │ ├── build.gradle │ ├── logging.properties │ └── src │ │ └── main │ │ └── java │ │ └── env │ │ └── tools │ │ └── Counter.java ├── big │ ├── BEnv.java │ ├── a.asl │ ├── b.asl │ ├── big.mas2j │ └── logging.properties ├── cArtAgOandJasonEnv │ ├── cArtAgOandJasonEnv.mas2j │ ├── lib │ │ ├── cartago-2.5-SNAPSHOT.jar │ │ └── jaca-2.5-SNAPSHOT.jar │ └── src │ │ ├── asl │ │ └── sample_agent.asl │ │ └── java │ │ ├── MixedAgentArch.java │ │ ├── MixedEnvironment.java │ │ └── cenv │ │ └── SomeArt.java ├── chain-bb │ ├── bob.asl │ └── chain-bb.mas2j ├── clone │ ├── clone.mas2j │ └── main.asl ├── communication │ ├── Communication.mas2j │ ├── bob.asl │ ├── logging.properties │ └── maria.asl ├── concurrent-goals │ ├── concurrent_goals.mas2j │ ├── logging.properties │ └── sample_agent.asl ├── controller │ ├── mind-inspection.mas2j │ └── src │ │ ├── asl │ │ ├── bob.asl │ │ ├── jh.asl │ │ └── sample.asl │ │ └── java │ │ └── MyController.java ├── create-agent │ ├── ag1.asl │ ├── bob.asl │ ├── createAgDemo.mas2j │ ├── mylib │ │ └── my_create_ag.java │ └── readme.txt ├── current-intention │ ├── current_intention.mas2j │ └── sample_agent.asl ├── custom-ag │ ├── custom_ag.mas2j │ ├── logging.properties │ ├── sample_agent.asl │ └── src │ │ └── java │ │ └── MyAg.java ├── custom-send │ ├── MyAgArch.java │ ├── MySend.java │ ├── bob.asl │ └── custom-ia.mas2j ├── directives │ ├── a.asl │ ├── b.asl │ ├── c.asl │ ├── directives.mas2j │ └── myp │ │ ├── Env.java │ │ └── LoggerDirective.java ├── distributed-jade │ ├── case1 │ │ ├── a.asl │ │ ├── b.asl │ │ ├── c.asl │ │ ├── d.asl │ │ ├── demo-case1.mas2j │ │ ├── logging.properties │ │ └── readme.txt │ └── case2 │ │ ├── a.asl │ │ ├── b.asl │ │ ├── c.asl │ │ ├── d.asl │ │ ├── demo-case2.mas2j │ │ ├── myAllocator.java │ │ └── sniffer.properties ├── failure │ ├── a.asl │ └── demoFail.mas2j ├── function │ ├── a.asl │ ├── function.mas2j │ └── myf │ │ └── sin.java ├── goal-listener │ ├── goal_listener.mas2j │ ├── karlos.asl │ └── src │ │ └── java │ │ └── MyArch.java ├── gui │ ├── gui1 │ │ ├── gui │ │ │ └── yes_no.java │ │ ├── gui1.mas2j │ │ └── sample.asl │ ├── gui2 │ │ ├── gui │ │ │ └── create.java │ │ ├── gui2.mas2j │ │ └── sample.asl │ └── readme.txt ├── hard_deadline │ ├── bob.asl │ └── hard_deadline.mas2j ├── idle │ ├── idle.mas2j │ ├── idleag.asl │ ├── logging.properties │ └── sender.asl ├── java-object-terms │ ├── ObjectTerm.mas2j │ ├── date │ │ ├── add_days.java │ │ └── today.java │ └── sample.asl ├── meta-events │ ├── World.java │ ├── meta-events.mas2j │ └── robot.asl ├── meta-programming │ ├── meta_programming.mas2j │ └── sample_agent.asl ├── open-world │ ├── testOW.mas2j │ ├── testOWEnv.java │ └── tow.asl ├── persistent-belief-base │ ├── .gitignore │ ├── VoidBB.java │ ├── a.asl │ ├── b.asl │ ├── bookstore.properties │ ├── bookstore.script │ ├── c.asl │ ├── custBelBase.mas2j │ ├── lib │ │ └── hsqldb.jar │ ├── logging.properties │ ├── runDataManager.bat │ └── runDataManager.sh ├── search │ ├── a_star.asl │ ├── jason.properties │ ├── logging.properties │ ├── missionaries.asl │ ├── numbers.asl │ ├── readme.txt │ ├── run.sh │ ├── search.mas2j │ └── waterjug.asl ├── snapshot │ ├── .gitignore │ ├── bob.asl │ ├── karlos.asl │ ├── logging.properties │ ├── snapshot.mas2j │ ├── src │ │ └── java │ │ │ └── ia │ │ │ ├── create_ag_sst.java │ │ │ └── snapshot.java │ └── supervisor.asl ├── stat-arch │ ├── BEnv.java │ ├── StatArch.java │ ├── app.mas2j │ ├── bob.asl │ ├── logging.properties │ └── void.asl ├── suspend-resume │ ├── suspend.mas2j │ └── test.asl ├── sync-environment │ ├── Env.java │ ├── EnvSync.java │ ├── act-sync.mas2j │ ├── b.asl │ ├── bount.asl │ ├── count.asl │ ├── dcount.asl │ ├── logging.properties │ └── screen │ │ ├── Counters.java │ │ └── show_counter.java ├── tell-rule │ ├── receiver.asl │ ├── sender.asl │ └── tell-rule.mas2j ├── threaded_ia │ ├── a.asl │ ├── logging.properties │ ├── mylib │ │ ├── tia.java │ │ └── tiac.java │ └── threaded_ia.mas2j ├── using-only-jason-BDI-engine │ ├── SimpleJasonAgent.java │ ├── demo.asl │ ├── logging.properties │ └── readme.txt └── using-parser │ ├── DemoParser.java │ ├── build.gradle │ ├── mars.mas2j │ ├── r1.asl │ └── settings.gradle ├── doc ├── Jason.pdf ├── adoc-empty.css ├── asciidoc-docker ├── faq.adoc ├── install.adoc ├── jason-cli │ ├── commands.adoc │ ├── figs │ │ └── s1.png │ └── readme.adoc ├── publish.sh ├── publishDocInGHPages.sh ├── publishFAQ.sh ├── readme.adoc ├── release-notes.adoc ├── tech │ ├── Jason Operators and Events.pdf │ ├── annotations.adoc │ ├── concurrency.adoc │ ├── goal-states.gv │ ├── goal-states.pdf │ ├── intention-states.gv │ ├── intention-states.pdf │ ├── modules-namespaces.pdf │ ├── patterns.adoc │ ├── performatives.adoc │ ├── run-jason-without-gradle.txt │ └── unit-tests.adoc └── tutorials │ ├── getting-started │ ├── VacuumCleaning-1.zip │ ├── VacuumCleaning-1 │ │ ├── VCWorld.java │ │ ├── vacuum-cleaning-1.mas2j │ │ └── vc.asl │ ├── exercise-answers.txt │ ├── figures │ │ ├── JasonEx-CR-ss1.png │ │ ├── ambiente.png │ │ ├── bob-ini-code.png │ │ ├── debug.gif │ │ ├── greeting.png │ │ ├── overview.png │ │ ├── screen-mars.png │ │ ├── screen-masconsole.png │ │ ├── screen-mindinsp.png │ │ └── suspend.png │ ├── publish.sh │ └── readme.adoc │ ├── hello-bdi │ ├── code │ │ ├── Calendar.java │ │ ├── alice.asl │ │ ├── bdi_hw.mas2j │ │ └── bob.asl │ ├── hello-bdi-code.zip │ ├── hello-bdi-code │ │ ├── Calendar.java │ │ ├── bdih.jcm │ │ ├── bob.asl │ │ ├── build.gradle │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── logging.properties │ ├── publish.sh │ ├── readme.adoc │ └── screens │ │ ├── mind-1.png │ │ └── mind-2.png │ ├── jason-jade │ ├── Makefile │ ├── book_trading.zip │ ├── book_trading │ │ ├── book_trading.mas2j │ │ ├── build.gradle │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── settings.gradle │ │ └── src │ │ │ ├── agt │ │ │ └── john.asl │ │ │ └── main │ │ │ └── java │ │ │ └── examples │ │ │ └── bookTrading │ │ │ ├── BookBuyerAgent.java │ │ │ ├── BookSellerAgent.java │ │ │ └── BookSellerGui.java │ ├── figures │ │ ├── ams1.png │ │ ├── ams2.png │ │ └── screen-df.png │ └── readme.adoc │ ├── vscode-browser │ ├── figs │ │ ├── codespace1.png │ │ ├── codespace2.png │ │ ├── vscweb1.png │ │ └── vscweb2.png │ └── readme.adoc │ └── vscode │ ├── figs │ ├── app-files.png │ └── inst.png │ └── readme.adoc ├── examples ├── airport │ ├── HeathrowEnv.java │ ├── HeathrowRobots.mas2j │ ├── airportChronicle.pdf │ ├── bd.asl │ ├── cph.asl │ ├── cph │ │ ├── CPHAgArch.java │ │ └── CPHAgent.java │ ├── mds.asl │ └── mds │ │ ├── MDSAgent.java │ │ └── calculateMyBid.java ├── auction │ ├── AuctioneerGUI.java │ ├── ag1.asl │ ├── ag2.asl │ ├── ag3.asl │ ├── auction.mas2j │ ├── auctioneer.asl │ └── doc │ │ ├── Auction.pd │ │ └── html │ │ ├── AgentOverviewDiagram_ag1_26.png │ │ ├── AgentOverviewDiagram_ag2_31.png │ │ ├── AgentOverviewDiagram_ag3_32.png │ │ ├── AgentOverviewDiagram_auctioneer agent_25.png │ │ ├── GoalOverviewDiagram.png │ │ ├── RolesDiagram.png │ │ ├── SystemOverviewDiagram.png │ │ └── index.html ├── blocks-world │ ├── BlocksEnv │ │ ├── BlocksWorld.java │ │ ├── WorldModel.java │ │ └── WorldView.java │ ├── BlocksWorld.mas2j │ ├── agent.asl │ ├── agent_c.asl │ ├── agent_g.asl │ ├── agent_o.asl │ └── agent_p.asl ├── cleaning-robots │ ├── MarsEnv.java │ ├── doc │ │ ├── Mars.pd │ │ └── overview.png │ ├── logging.properties │ ├── mars.mas2j │ ├── r1.asl │ └── r2.asl ├── contract-net-protocol-er │ ├── ContractNetProtocol.mas2j │ ├── c.asl │ ├── c_alt.asl │ ├── doc │ │ └── cnp.pdf │ ├── logging.properties │ ├── p.asl │ ├── pn.asl │ └── pr.asl ├── contract-net-protocol-module │ ├── alice.asl │ ├── bob.asl │ ├── company_A.asl │ ├── company_B.asl │ ├── contract_net_protocol.mas2j │ ├── initiator.asl │ ├── logging.properties │ └── participant.asl ├── contract-net-protocol │ ├── ContractNetProtocol.mas2j │ ├── c.asl │ ├── doc │ │ └── cnp.pdf │ ├── p.asl │ ├── pn.asl │ └── pr.asl ├── domestic-robot │ ├── DomesticRobot.mas2j │ ├── HouseEnv.java │ ├── HouseModel.java │ ├── HouseView.java │ ├── doc │ │ ├── House.pd │ │ ├── cdHouse.pdf │ │ └── overview.png │ ├── owner.asl │ ├── robot.asl │ ├── supermarket.asl │ └── time │ │ └── check.java ├── food-simulation │ ├── FoodSimulation.mas2j │ ├── lib │ │ ├── jcommon-1.0.12.jar │ │ └── jfreechart-1.0.8a.jar │ └── src │ │ ├── asl │ │ ├── blind.asl │ │ ├── normative.asl │ │ ├── reputation.asl │ │ └── strategic.asl │ │ └── java │ │ ├── FoodEnvironment.java │ │ ├── FoodModel.java │ │ ├── FoodView.java │ │ ├── bb │ │ └── list.java │ │ └── math │ │ └── distance.java ├── game-of-life │ ├── LifeEnvironment.java │ ├── LifeModel.java │ ├── LifeView.java │ ├── cell.asl │ └── game-of-life.mas2j ├── gold-miners-II │ ├── agent │ │ ├── DiscardBelsBB.java │ │ ├── SelectEvent.java │ │ └── UniqueBelsBB.java │ ├── arch │ │ ├── LocalMinerArch.java │ │ ├── LocalWorldModel.java │ │ └── MinerArch.java │ ├── asl │ │ ├── allocation_protocol.asl │ │ ├── dummy.asl │ │ ├── fetch_gold.asl │ │ ├── goals.pdf │ │ ├── goto_depot.asl │ │ ├── leader.asl │ │ ├── miner.asl │ │ ├── moving.asl │ │ ├── search_quadrant.asl │ │ └── search_unvisited.asl │ ├── env │ │ ├── MiningEnvironment.java │ │ ├── WorldFactory.java │ │ ├── WorldModel.java │ │ ├── WorldView.java │ │ └── serverconfig.contest-2007.xml │ ├── jia │ │ ├── Search.java │ │ ├── add_fatigue.java │ │ ├── ag_pos.java │ │ ├── direction.java │ │ ├── dist.java │ │ ├── near_least_visited.java │ │ ├── neighbour.java │ │ ├── obstacle.java │ │ ├── path_length.java │ │ ├── random.java │ │ ├── random_direction.java │ │ └── set_target.java │ ├── lib │ │ └── search.jar │ ├── logging.properties │ └── miners.mas2j ├── gold-miners │ ├── doc │ │ ├── Gold-Miners.pd │ │ ├── cc-jason-lncs.pdf │ │ ├── leader.png │ │ ├── miner.png │ │ └── overview.png │ ├── jasonTeam.mas2j │ ├── jia │ │ ├── dist.java │ │ ├── get_direction.java │ │ ├── neighbour.java │ │ └── random_direction.java │ ├── leader.asl │ ├── lib │ │ └── search.jar │ ├── logging.properties │ ├── miner.asl │ └── mining │ │ ├── MiningPlanet.java │ │ ├── WorldModel.java │ │ └── WorldView.java ├── iterated-prisoners-dilemma │ ├── arbitrer.asl │ ├── ipd.mas2j │ ├── lib │ │ ├── jcommon-1.0.12.jar │ │ └── jfreechart-1.0.8a.jar │ ├── my │ │ ├── plot.java │ │ └── random.java │ ├── pd_payoffs.asl │ ├── player.asl │ ├── playerAllC.asl │ ├── playerAllD.asl │ └── playerTFT.asl ├── mining-robots │ ├── builder.asl │ ├── col.asl │ ├── env │ │ ├── GUI.java │ │ ├── PlanetCell.java │ │ ├── PlanetGUI.java │ │ ├── Resource.java │ │ ├── Site.java │ │ └── planetEnv.java │ ├── logging.properties │ ├── readme.txt │ └── resourceCollection.mas2j ├── room │ ├── Room.mas2j │ ├── RoomEnv.java │ ├── claustrophobe.asl │ ├── doc │ │ ├── Room.pd │ │ └── Room.png │ ├── paranoid.asl │ └── porter.asl ├── sniffer │ ├── .gitignore │ ├── Sniffer.mas2j │ ├── bob.asl │ ├── comm │ │ └── SnifferCentralised.java │ ├── logging.properties │ ├── maria.asl │ └── monitor.asl ├── st-claus │ ├── jason_stclaus.mas2j │ ├── readme.txt │ ├── santa.asl │ ├── secretary.asl │ └── worker.asl └── water-jugs │ ├── Jugs.java │ ├── a_star.asl │ ├── agent_a_star.asl │ ├── agent_simple.asl │ ├── logging.properties │ ├── readme.txt │ └── water_jugs.mas2j ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jason-cli ├── build.gradle ├── examples │ ├── hello.jcli │ ├── mind.jcli │ └── status.jcli └── src │ ├── main │ ├── java │ │ └── jason │ │ │ └── cli │ │ │ ├── JasonCLI.java │ │ │ ├── JasonCommands.java │ │ │ ├── agent │ │ │ ├── Agent.java │ │ │ ├── BaseAgent.java │ │ │ ├── ListAgents.java │ │ │ ├── LoadIntoAgent.java │ │ │ ├── MindAgent.java │ │ │ ├── RunAsAgent.java │ │ │ ├── StartAgent.java │ │ │ ├── StatusAgent.java │ │ │ └── StopAgent.java │ │ │ ├── app │ │ │ ├── AddAgent.java │ │ │ ├── AddInternalAction.java │ │ │ ├── Application.java │ │ │ ├── Common.java │ │ │ ├── Compile.java │ │ │ ├── Create.java │ │ │ ├── Gradle.java │ │ │ └── Run.java │ │ │ └── mas │ │ │ ├── CLILocalMAS.java │ │ │ ├── ListMAS.java │ │ │ ├── MAS.java │ │ │ ├── MasAppClassLoader.java │ │ │ ├── RunningMASs.java │ │ │ ├── StartMAS.java │ │ │ └── StopMAS.java │ └── resources │ │ └── scripts │ │ ├── create-bin.sh │ │ └── jason.sh │ └── test │ ├── jason │ ├── hello.asl │ └── plan.asl │ ├── test-hotswap.jcli │ ├── test-loadinto.jcli │ ├── test-runas.jcli │ └── water-jugs │ ├── Jugs.java │ ├── a_star.asl │ ├── agent_a_star.asl │ ├── run.jcli │ ├── run2.jcli │ └── water_jugs.mas2j ├── jason-interpreter ├── build.gradle ├── maven-central.gradle └── src │ ├── main │ ├── java │ │ └── jason │ │ │ ├── JasonException.java │ │ │ ├── NoValueException.java │ │ │ ├── ReceiverNotFoundException.java │ │ │ ├── RevisionFailedException.java │ │ │ ├── architecture │ │ │ ├── AgArch.java │ │ │ ├── MindInspectorAgArch.java │ │ │ ├── MindInspectorWeb.java │ │ │ └── MindInspectorWebImpl.java │ │ │ ├── asSemantics │ │ │ ├── ActionExec.java │ │ │ ├── Agent.java │ │ │ ├── ArithFunction.java │ │ │ ├── Circumstance.java │ │ │ ├── CircumstanceListener.java │ │ │ ├── ConcurrentInternalAction.java │ │ │ ├── DefaultArithFunction.java │ │ │ ├── DefaultInternalAction.java │ │ │ ├── Event.java │ │ │ ├── GoalListener.java │ │ │ ├── GoalListenerForMetaEvents.java │ │ │ ├── IMCondition.java │ │ │ ├── IntendedMeans.java │ │ │ ├── Intention.java │ │ │ ├── InternalAction.java │ │ │ ├── Message.java │ │ │ ├── NoOptionException.java │ │ │ ├── Option.java │ │ │ ├── TransitionSystem.java │ │ │ └── Unifier.java │ │ │ ├── asSyntax │ │ │ ├── ASSyntax.java │ │ │ ├── ArithExpr.java │ │ │ ├── ArithFunctionTerm.java │ │ │ ├── Atom.java │ │ │ ├── BinaryStructure.java │ │ │ ├── BodyLiteral.java │ │ │ ├── CyclicTerm.java │ │ │ ├── DefaultTerm.java │ │ │ ├── InternalActionLiteral.java │ │ │ ├── ListTerm.java │ │ │ ├── ListTermImpl.java │ │ │ ├── Literal.java │ │ │ ├── LiteralImpl.java │ │ │ ├── LogExpr.java │ │ │ ├── LogicalFormula.java │ │ │ ├── MapTerm.java │ │ │ ├── MapTermImpl.java │ │ │ ├── NumberTerm.java │ │ │ ├── NumberTermImpl.java │ │ │ ├── ObjectTerm.java │ │ │ ├── ObjectTermImpl.java │ │ │ ├── Plan.java │ │ │ ├── PlanBody.java │ │ │ ├── PlanBodyImpl.java │ │ │ ├── Pred.java │ │ │ ├── PredicateIndicator.java │ │ │ ├── RelExpr.java │ │ │ ├── Rule.java │ │ │ ├── SetTerm.java │ │ │ ├── SetTermImpl.java │ │ │ ├── SourceInfo.java │ │ │ ├── StringTerm.java │ │ │ ├── StringTermImpl.java │ │ │ ├── Structure.java │ │ │ ├── Term.java │ │ │ ├── Trigger.java │ │ │ ├── UnnamedVar.java │ │ │ ├── VarTerm.java │ │ │ ├── directives │ │ │ │ ├── DefaultDirective.java │ │ │ │ ├── Directive.java │ │ │ │ ├── DirectiveProcessor.java │ │ │ │ ├── FunctionRegister.java │ │ │ │ ├── Include.java │ │ │ │ └── NameSpace.java │ │ │ └── patterns │ │ │ │ └── goal │ │ │ │ ├── BC.java │ │ │ │ ├── BDG.java │ │ │ │ ├── DG.java │ │ │ │ ├── EBDG.java │ │ │ │ ├── MG.java │ │ │ │ ├── OMC.java │ │ │ │ ├── RC.java │ │ │ │ ├── SGA.java │ │ │ │ └── SMC.java │ │ │ ├── bb │ │ │ ├── AgentJDBCPersistentBB.java │ │ │ ├── BeliefBase.java │ │ │ ├── ChainBB.java │ │ │ ├── ChainBBAdapter.java │ │ │ ├── DefaultBeliefBase.java │ │ │ ├── IndexedBB.java │ │ │ ├── JDBCPersistentBB.java │ │ │ ├── StructureWrapperForLiteral.java │ │ │ └── TextPersistentBB.java │ │ │ ├── control │ │ │ ├── ExecutionControl.java │ │ │ ├── ExecutionControlGUI.java │ │ │ └── ExecutionControlInfraTier.java │ │ │ ├── environment │ │ │ ├── Environment.java │ │ │ ├── EnvironmentInfraTier.java │ │ │ ├── TimeSteppedEnvironment.java │ │ │ └── grid │ │ │ │ ├── Area.java │ │ │ │ ├── GridWorldModel.java │ │ │ │ ├── GridWorldView.java │ │ │ │ └── Location.java │ │ │ ├── functions │ │ │ ├── Abs.java │ │ │ ├── Average.java │ │ │ ├── Count.java │ │ │ ├── Length.java │ │ │ ├── Max.java │ │ │ ├── Min.java │ │ │ ├── Random.java │ │ │ ├── Round.java │ │ │ ├── RuleToFunction.java │ │ │ ├── Sqrt.java │ │ │ ├── StdDev.java │ │ │ ├── Sum.java │ │ │ ├── acos.java │ │ │ ├── asin.java │ │ │ ├── atan.java │ │ │ ├── ceil.java │ │ │ ├── cos.java │ │ │ ├── e.java │ │ │ ├── floor.java │ │ │ ├── log.java │ │ │ ├── mean.java │ │ │ ├── median.java │ │ │ ├── pi.java │ │ │ ├── sin.java │ │ │ ├── tan.java │ │ │ └── time.java │ │ │ ├── infra │ │ │ ├── components │ │ │ │ ├── ActComponent.java │ │ │ │ ├── AgentComponent.java │ │ │ │ ├── CircumstanceListenerComponents.java │ │ │ │ ├── DeliberateComponent.java │ │ │ │ └── SenseComponent.java │ │ │ ├── jade │ │ │ │ ├── ContainerAllocation.java │ │ │ │ ├── JadeAg.java │ │ │ │ ├── JadeAgArch.java │ │ │ │ ├── JadeEnvironment.java │ │ │ │ ├── JadeExecutionControl.java │ │ │ │ ├── JadeRuntimeServices.java │ │ │ │ ├── JasonBridgeArch.java │ │ │ │ └── RunJadeMAS.java │ │ │ └── local │ │ │ │ ├── BaseDialogGUI.java │ │ │ │ ├── BaseLocalMAS.java │ │ │ │ ├── BaseRuntimeServices.java │ │ │ │ ├── KillAgentGUI.java │ │ │ │ ├── LocalAgArch.java │ │ │ │ ├── LocalAgArchAsynchronous.java │ │ │ │ ├── LocalAgArchForPool.java │ │ │ │ ├── LocalEnvironment.java │ │ │ │ ├── LocalExecutionControl.java │ │ │ │ ├── LocalRuntimeServices.java │ │ │ │ ├── MsgListener.java │ │ │ │ ├── RConf.java │ │ │ │ ├── ReplAgGUI.java │ │ │ │ ├── RunLocalMAS.java │ │ │ │ ├── RunLocalMASMBean.java │ │ │ │ └── StartNewAgentGUI.java │ │ │ ├── mas2j │ │ │ ├── AgentParameters.java │ │ │ ├── ClassParameters.java │ │ │ └── MAS2JProject.java │ │ │ ├── pl │ │ │ ├── PlanLibrary.java │ │ │ └── PlanLibraryListener.java │ │ │ ├── runtime │ │ │ ├── DelegatedRuntimeServices.java │ │ │ ├── MASConsoleColorGUI.java │ │ │ ├── MASConsoleGUI.java │ │ │ ├── MASConsoleLogFormatter.java │ │ │ ├── MASConsoleLogHandler.java │ │ │ ├── OutputStreamAdapter.java │ │ │ ├── RuntimeServices.java │ │ │ ├── RuntimeServicesFactory.java │ │ │ ├── Settings.java │ │ │ └── SourcePath.java │ │ │ ├── stdlib │ │ │ ├── Manual.java │ │ │ ├── abolish.java │ │ │ ├── add_annot.java │ │ │ ├── add_nested_source.java │ │ │ ├── add_plan.java │ │ │ ├── all_names.java │ │ │ ├── asserta.java │ │ │ ├── assertz.java │ │ │ ├── at.java │ │ │ ├── atom.java │ │ │ ├── belief.java │ │ │ ├── broadcast.java │ │ │ ├── clone.java │ │ │ ├── concat.java │ │ │ ├── copy_term.java │ │ │ ├── count.java │ │ │ ├── create_agent.java │ │ │ ├── current_intention.java │ │ │ ├── date.java │ │ │ ├── delete.java │ │ │ ├── desire.java │ │ │ ├── df_deregister.java │ │ │ ├── df_register.java │ │ │ ├── df_search.java │ │ │ ├── df_subscribe.java │ │ │ ├── difference.java │ │ │ ├── done.java │ │ │ ├── drop_all_desires.java │ │ │ ├── drop_all_events.java │ │ │ ├── drop_all_intentions.java │ │ │ ├── drop_desire.java │ │ │ ├── drop_event.java │ │ │ ├── drop_future_intention.java │ │ │ ├── drop_intention.java │ │ │ ├── empty.java │ │ │ ├── eval.java │ │ │ ├── fail.java │ │ │ ├── fail_goal.java │ │ │ ├── findall.java │ │ │ ├── foreach.java │ │ │ ├── fork.java │ │ │ ├── get_src_info.java │ │ │ ├── ground.java │ │ │ ├── if_then_else.java │ │ │ ├── include.java │ │ │ ├── intend.java │ │ │ ├── intention.java │ │ │ ├── internal_action.java │ │ │ ├── intersection.java │ │ │ ├── join.java │ │ │ ├── kill_agent.java │ │ │ ├── length.java │ │ │ ├── list.java │ │ │ ├── list_files.java │ │ │ ├── list_plans.java │ │ │ ├── list_rules.java │ │ │ ├── literal.java │ │ │ ├── log.java │ │ │ ├── loop.java │ │ │ ├── lower_case.java │ │ │ ├── map │ │ │ │ ├── clear.java │ │ │ │ ├── copy.java │ │ │ │ ├── create.java │ │ │ │ ├── get.java │ │ │ │ ├── key.java │ │ │ │ ├── put.java │ │ │ │ ├── remove.java │ │ │ │ └── value.java │ │ │ ├── max.java │ │ │ ├── member.java │ │ │ ├── min.java │ │ │ ├── my_name.java │ │ │ ├── namespace.java │ │ │ ├── namespace_get_prop.java │ │ │ ├── namespace_set_prop.java │ │ │ ├── nano_time.java │ │ │ ├── nth.java │ │ │ ├── number.java │ │ │ ├── package-info.java │ │ │ ├── perceive.java │ │ │ ├── plan_label.java │ │ │ ├── prefix.java │ │ │ ├── print.java │ │ │ ├── print_unifier.java │ │ │ ├── printf.java │ │ │ ├── println.java │ │ │ ├── puts.java │ │ │ ├── queue │ │ │ │ ├── add.java │ │ │ │ ├── add_all.java │ │ │ │ ├── clear.java │ │ │ │ ├── copy.java │ │ │ │ ├── create.java │ │ │ │ ├── head.java │ │ │ │ ├── remove.java │ │ │ │ └── to_list.java │ │ │ ├── random.java │ │ │ ├── range.java │ │ │ ├── relevant_plan.java │ │ │ ├── relevant_plans.java │ │ │ ├── relevant_rules.java │ │ │ ├── remove_plan.java │ │ │ ├── remove_source_annot.java │ │ │ ├── rename_apart.java │ │ │ ├── replace.java │ │ │ ├── resume.java │ │ │ ├── reverse.java │ │ │ ├── save_agent.java │ │ │ ├── send.java │ │ │ ├── set │ │ │ │ ├── add.java │ │ │ │ ├── add_all.java │ │ │ │ ├── clear.java │ │ │ │ ├── copy.java │ │ │ │ ├── create.java │ │ │ │ ├── difference.java │ │ │ │ ├── intersection.java │ │ │ │ ├── remove.java │ │ │ │ ├── to_list.java │ │ │ │ └── union.java │ │ │ ├── set_random_seed.java │ │ │ ├── setof.java │ │ │ ├── shuffle.java │ │ │ ├── signal.java │ │ │ ├── sort.java │ │ │ ├── stopMAS.java │ │ │ ├── string.java │ │ │ ├── structure.java │ │ │ ├── sublist.java │ │ │ ├── substring.java │ │ │ ├── succeed_goal.java │ │ │ ├── suffix.java │ │ │ ├── suspend.java │ │ │ ├── suspended.java │ │ │ ├── term2string.java │ │ │ ├── time.java │ │ │ ├── type.java │ │ │ ├── union.java │ │ │ ├── upper_case.java │ │ │ ├── verbose.java │ │ │ ├── version.java │ │ │ └── wait.java │ │ │ └── util │ │ │ ├── Config.java │ │ │ ├── Pair.java │ │ │ ├── RunnableSerializable.java │ │ │ ├── ToDOM.java │ │ │ ├── ToJson.java │ │ │ ├── asl2dot.java │ │ │ ├── asl2html.java │ │ │ ├── asl2tex.java │ │ │ └── asl2xml.java │ ├── javacc │ │ └── jason │ │ │ ├── asSyntax │ │ │ └── parser │ │ │ │ └── AS2JavaParser.jj │ │ │ └── mas2j │ │ │ └── parser │ │ │ └── MAS2JavaParser.jj │ └── resources │ │ ├── asl │ │ └── kqmlPlans.asl │ │ ├── images │ │ ├── Active1.png │ │ ├── Active2.png │ │ ├── Active3.png │ │ ├── Active4.png │ │ ├── Blank.png │ │ ├── Jason-GMoreau-Icon.icns │ │ ├── Jason-GMoreau-Icon.ico │ │ ├── Jason-GMoreau-Icon.jpg │ │ ├── Jason-GMoreau-Small-Icon.jpg │ │ ├── Jason-GMoreau-Small.jpg │ │ ├── Jason-GMoreau.jpg │ │ ├── clear.gif │ │ ├── createEnv.gif │ │ ├── createIA.gif │ │ ├── debug.gif │ │ ├── killAgent.gif │ │ ├── list.gif │ │ ├── new.gif │ │ ├── newAgent.gif │ │ ├── newProject.gif │ │ ├── open.gif │ │ ├── openProject.gif │ │ ├── plan.png │ │ ├── resume_co.gif │ │ ├── run.gif │ │ ├── save.gif │ │ ├── saveAll.gif │ │ ├── startDebugger.gif │ │ └── suspend.gif │ │ ├── pygments_init.rb │ │ ├── templates │ │ ├── CArtAgOartifact │ │ ├── agent │ │ ├── build-template.xml │ │ ├── build.gradle │ │ ├── console-debug-logging.properties │ │ ├── console-info-logging.properties │ │ ├── console-lifecycle-logging.properties │ │ ├── console-logging.properties │ │ ├── environment │ │ ├── environment2 │ │ ├── ia │ │ ├── logging.properties │ │ ├── project │ │ └── project2.mas2j │ │ └── xml │ │ ├── ag2tex.xsl │ │ ├── agInspection-nd.xsl │ │ ├── agInspection.xsl │ │ ├── asl2html.xsl │ │ ├── asl2tex.xsl │ │ ├── mind1.out.html │ │ └── mind1.xml │ ├── site │ └── new-project-scripts │ │ ├── 3.1 │ │ ├── build.gradle │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ └── gradlew.bat │ │ ├── np24.gradle │ │ ├── np26.gradle │ │ ├── np30.gradle │ │ ├── npss.gradle │ │ └── publish.sh │ └── test │ ├── jason │ ├── asl │ │ ├── functions │ │ │ ├── median.asl │ │ │ └── random.asl │ │ ├── patterns │ │ │ ├── queueplan.asl │ │ │ └── singleton.asl │ │ ├── stdlib │ │ │ ├── abolish.asl │ │ │ ├── add_plan.asl │ │ │ ├── at.asl │ │ │ ├── atom.asl │ │ │ ├── broadcast.asl │ │ │ ├── count.asl │ │ │ ├── current_intention.asl │ │ │ ├── desire.asl │ │ │ ├── drop_all_desires.asl │ │ │ ├── drop_all_events.asl │ │ │ ├── drop_all_intentions.asl │ │ │ ├── drop_desire.asl │ │ │ ├── drop_event.asl │ │ │ ├── drop_intention.asl │ │ │ ├── eval.asl │ │ │ ├── fail_goal.asl │ │ │ ├── findall.asl │ │ │ ├── ground.asl │ │ │ ├── if_then_else.asl │ │ │ ├── intend.asl │ │ │ ├── intention.asl │ │ │ ├── list.asl │ │ │ ├── list_files.asl │ │ │ ├── list_plans.asl │ │ │ ├── list_rules.asl │ │ │ ├── literal.asl │ │ │ ├── member.asl │ │ │ ├── namespace.asl │ │ │ ├── number.asl │ │ │ ├── plan_label.asl │ │ │ ├── random.asl │ │ │ ├── range.asl │ │ │ ├── relevant_plans.asl │ │ │ ├── relevant_rules.asl │ │ │ ├── remove_plan.asl │ │ │ ├── resume.asl │ │ │ ├── send.asl │ │ │ ├── set_random_seed.asl │ │ │ ├── setof.asl │ │ │ ├── string.asl │ │ │ ├── structure.asl │ │ │ ├── substring.asl │ │ │ ├── succeed_goal.asl │ │ │ ├── suspend.asl │ │ │ ├── suspended.asl │ │ │ └── type.asl │ │ ├── test_failure_event.asl │ │ ├── test_lists.asl │ │ ├── test_rules.asl │ │ ├── test_sample_agent.asl │ │ ├── test_sample_performance.asl │ │ └── test_unification.asl │ ├── inc │ │ ├── mock_agent.asl │ │ ├── self_tester.asl │ │ ├── test_assert.asl │ │ ├── test_manager.asl │ │ ├── test_performance.asl │ │ └── tester_agent.asl │ ├── logging.properties │ ├── unit_tests.mas2j │ ├── unit_tests_2.mas2j │ └── unit_tests_project.mas2j │ └── java │ ├── jason │ ├── asl │ │ ├── ag1.asl │ │ └── ag3.asl │ └── asunit │ │ ├── Condition.java │ │ ├── TestAgent.java │ │ ├── TestArch.java │ │ └── print.java │ └── test │ ├── ASMistakesTest.java │ ├── ASParserTest.java │ ├── BeliefBaseTest.java │ ├── ExprTermTest.java │ ├── FunctionsTest.java │ ├── JadeAgTest.java │ ├── ListTermTest.java │ ├── MAS2JParserTest.java │ ├── NSTest.java │ ├── PlanERTest.java │ ├── PlanTest.java │ ├── RuleTest.java │ ├── StdLibTest.java │ ├── StringTermTest.java │ ├── TSTest.java │ ├── TermTest.java │ ├── VarTermTest.java │ └── asunit │ ├── BugDelBel.java │ ├── BugDelVar.java │ ├── BugEval.java │ ├── BugFail.java │ ├── BugFor.java │ ├── BugIfGoalReturn.java │ ├── BugIfLength.java │ ├── BugInference.java │ ├── BugInference2.java │ ├── BugList1.java │ ├── BugListReturnUnification.java │ ├── BugMapInFor.java │ ├── BugMetaProgramming.java │ ├── BugRelPlans.java │ ├── BugSucceedGoal.java │ ├── BugUnamedVars.java │ ├── BugVarStringAbs.java │ ├── BugVarsAsArg.java │ ├── BugVarsAsGoal.java │ ├── BugVarsInInitBels.java │ ├── BugWait.java │ ├── TestAddLogExprInBB.java │ ├── TestCopyTerm.java │ ├── TestFailFail.java │ ├── TestGoalSource.java │ ├── TestIA.java │ ├── TestIAdelete.java │ ├── TestIF.java │ ├── TestKQML.java │ ├── TestLoop.java │ ├── TestMap.java │ ├── TestNS.java │ ├── TestNegatedVar.java │ ├── TestPlanER.java │ ├── TestPlanFailure.java │ ├── TestPlanbodyAsTerm.java │ ├── TestRuleTerm.java │ ├── TestSet.java │ ├── TestSpecialAtom.java │ ├── TestTRO.java │ ├── TestUnnamedVar.java │ └── TestVarInContext.java ├── readme.adoc └── settings.gradle /.github/workflows/gradle.yml: -------------------------------------------------------------------------------- 1 | name: Java CI 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v4 12 | - name: Set up JDK 21 13 | uses: actions/setup-java@v4 14 | with: 15 | distribution: 'oracle' 16 | java-version: 21 17 | - name: Grant execute permission for gradlew 18 | run: chmod +x gradlew 19 | - name: Test java 20 | run: ./gradlew :jason-interpreter:test 21 | - name: Test jason 22 | run: ./gradlew :jason-interpreter:testJason 23 | 24 | # run: ./gradlew build --info 25 | -------------------------------------------------------------------------------- /demos/basic-cartago/alice.asl: -------------------------------------------------------------------------------- 1 | 2 | +!focus(C) 3 | <- lookupArtifact(C,Id); 4 | focus(Id). 5 | 6 | +count(X) <- .print("Counter is ",X). 7 | -------------------------------------------------------------------------------- /demos/basic-cartago/basic_cartago.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | Project to illustrate the basic use of Cartago as the 3 | Environment 4 | --------------------------- 5 | 6 | Jason Project File 7 | 8 | This file defines the initial state of the MAS 9 | 10 | Jason 2.6.3 11 | April 13, 2021 - 12:58:25 12 | */ 13 | 14 | MAS basic_cartago { 15 | 16 | environment: jaca.CartagoEnvironment 17 | 18 | agents: 19 | 20 | bob agentArchClass jaca.CAgentArch; 21 | alice agentArchClass jaca.CAgentArch; 22 | } 23 | -------------------------------------------------------------------------------- /demos/basic-cartago/bob.asl: -------------------------------------------------------------------------------- 1 | 2 | !start. 3 | 4 | +!start : true 5 | <- .print("creating an artifact..."); 6 | makeArtifact(c1,"tools.Counter",[10],ArtId); 7 | focus(ArtId); 8 | .send(alice,achieve,focus(c1)); 9 | .wait(1000); 10 | inc; 11 | . 12 | -------------------------------------------------------------------------------- /demos/basic-cartago/src/main/java/env/tools/Counter.java: -------------------------------------------------------------------------------- 1 | package tools; 2 | 3 | import cartago.*; 4 | 5 | public class Counter extends Artifact { 6 | void init(int initialValue) { 7 | defineObsProperty("count", initialValue); 8 | } 9 | 10 | @OPERATION 11 | void inc() { 12 | ObsProperty prop = getObsProperty("count"); 13 | prop.updateValue(prop.intValue()+1); 14 | signal("tick"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /demos/big/BEnv.java: -------------------------------------------------------------------------------- 1 | // Environment code for project big.mas2j 2 | 3 | import jason.asSyntax.Structure; 4 | 5 | import java.util.logging.Logger; 6 | 7 | public class BEnv extends jason.environment.Environment { 8 | 9 | private Logger logger = Logger.getLogger("big.mas2j."+BEnv.class.getName()); 10 | 11 | @Override 12 | public boolean executeAction(String ag, Structure action) { 13 | logger.info("executing: "+action); 14 | return true; 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /demos/big/a.asl: -------------------------------------------------------------------------------- 1 | // Agent a in project big.mas2j 2 | 3 | /* Initial goals */ 4 | 5 | !start(0). 6 | 7 | /* Plans */ 8 | 9 | +!start(X) : X < 100 & (X mod 2 == 0) <- .print("run ",X); !!start(X+1). 10 | +!start(X) : X < 100 <- !!start(X+1). 11 | +!start(_) : .my_name(a1000) <- .stopMAS. 12 | +!start(_). 13 | 14 | -------------------------------------------------------------------------------- /demos/big/b.asl: -------------------------------------------------------------------------------- 1 | // Agent b in project big.mas2j 2 | 3 | /* Initial goals */ 4 | 5 | !start(0). 6 | 7 | /* Plans */ 8 | 9 | +!start(X) : X < 5 <- a(X); !start(X+1). 10 | +!start(_). 11 | 12 | -------------------------------------------------------------------------------- /demos/big/big.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This demo shows how to create an MAS with 4 | several agents (3000 in this case) 5 | 6 | */ 7 | 8 | MAS big { 9 | // use a thread pool instead of one thread per agent 10 | // (the threads in the pool are shared by the agents) 11 | infrastructure: Local(pool) 12 | 13 | environment: BEnv 14 | 15 | agents: 16 | a #2000; // 2000 agents of type a 17 | b #1000; // 1000 agents of type b 18 | } 19 | 20 | -------------------------------------------------------------------------------- /demos/cArtAgOandJasonEnv/cArtAgOandJasonEnv.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | * This example shows how to develop an application that 3 | * uses both 4 | * - a usual Jason environment and 5 | * - a CArtAgO environment 6 | * 7 | * see the code of MixedEnvironment and MixedAgentArch for details. 8 | * 9 | */ 10 | 11 | MAS cArtAgOandJasonEnv { 12 | 13 | environment: MixedEnvironment // this class uses normal Jason environment and also CArtAgO environment 14 | 15 | agents: 16 | agent1 sample_agent 17 | agentArchClass MixedAgentArch // architecture that deal with Jason vs CArtAgO environment 18 | agentArchClass jaca.CAgentArch; // usual architecture of CArtAgO 19 | 20 | aslSourcePath: 21 | "src/asl"; 22 | } 23 | -------------------------------------------------------------------------------- /demos/cArtAgOandJasonEnv/lib/cartago-2.5-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/demos/cArtAgOandJasonEnv/lib/cartago-2.5-SNAPSHOT.jar -------------------------------------------------------------------------------- /demos/cArtAgOandJasonEnv/lib/jaca-2.5-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/demos/cArtAgOandJasonEnv/lib/jaca-2.5-SNAPSHOT.jar -------------------------------------------------------------------------------- /demos/cArtAgOandJasonEnv/src/asl/sample_agent.asl: -------------------------------------------------------------------------------- 1 | /* Initial goals */ 2 | 3 | !start. 4 | 5 | /* Plans */ 6 | 7 | +!start 8 | <- makeArtifact("a0","cenv.SomeArt",[10],Id); 9 | focus(Id); 10 | .print("Artifact created."). 11 | 12 | +percept(X) // from Jason Environment 13 | <- .print("I see ",X); 14 | a2; // action on Jason environment 15 | .wait(100); 16 | inc; // action on CArtAgO environment 17 | . 18 | +count(X) 19 | <- .print("Count is ",X). 20 | -------------------------------------------------------------------------------- /demos/cArtAgOandJasonEnv/src/java/cenv/SomeArt.java: -------------------------------------------------------------------------------- 1 | package cenv; 2 | 3 | import cartago.*; 4 | 5 | public class SomeArt extends Artifact { 6 | public void init(int initialValue) { 7 | defineObsProperty("count", initialValue); 8 | } 9 | 10 | @OPERATION 11 | void inc() { 12 | ObsProperty prop = getObsProperty("count"); 13 | prop.updateValue(prop.intValue()+1); 14 | signal("tick"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /demos/chain-bb/bob.asl: -------------------------------------------------------------------------------- 1 | // Agent bob in project chainBB.mas2j 2 | 3 | /* Initial beliefs and rules */ 4 | 5 | /* Initial goals */ 6 | 7 | !start. 8 | 9 | /* Plans */ 10 | 11 | +!start : true 12 | <- +boss(1,"Vercouter"); 13 | +boss(2,"Rosine"); 14 | +boss(2,"Boissier"); // will replace "boss(2,Rosine)" since both have the same key 15 | +boss(math.round(math.random(10)), "Picard"); 16 | ?boss(2,X); .print("Boss 2 is (should be Boissier or Picard): ",X). 17 | -------------------------------------------------------------------------------- /demos/chain-bb/chain-bb.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Project 2 | 3 | Example of chain belief bases. 4 | 5 | The agent bob uses two customisations of BB: 6 | one to persist the beliefs and 7 | another to have a kind of key based BB. 8 | 9 | To see the effect of the two BBs, run the program 10 | and, when finished, click on "Debug" mode and then 11 | select "bob" agent. Notice that the 'boss' beliefs have 12 | unique keys. If you run the program again you will 13 | note that beliefs added in previous executions 14 | are persisted (they are stored in the bob.bb file). 15 | 16 | */ 17 | 18 | MAS chainBB { 19 | 20 | agents: 21 | bob beliefBaseClass jason.bb.ChainBB( 22 | jason.bb.TextPersistentBB, 23 | jason.bb.IndexedBB("boss(key,_)") // the first argument of boss is the key 24 | ); 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /demos/clone/clone.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Project 2 | 3 | The agent "main" uses the an internal action to create a 4 | clone of itself. This internal action is implemented in 5 | this example. 6 | 7 | */ 8 | 9 | MAS clone { 10 | 11 | agents: 12 | main; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /demos/clone/main.asl: -------------------------------------------------------------------------------- 1 | test(1). 2 | 3 | !start. 4 | 5 | +!start 6 | <- +a(40); 7 | .print("expected [bob] 10 :41 "); 8 | .clone("bob"); 9 | .send(bob,tell,p(10)). 10 | 11 | +p(X) : a(V) & test(T) 12 | <- .print(X," : ",V+T). 13 | -------------------------------------------------------------------------------- /demos/communication/Communication.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Jason Project 4 | 5 | It is a very simple example of an agent (bob) 6 | that sends messages to another agent (maria) 7 | 8 | */ 9 | 10 | MAS communication { 11 | 12 | infrastructure: Local 13 | /* to use Jade, replace Local above by Jade 14 | and run as usual by the "play" button 15 | 16 | to run on several machines (A,B,C): 17 | 1. replace Local by Jade(main_container_host("localhost")) 18 | 2. go to host A, cd /bin, ant main-container 19 | 3. go to host B, cd /bin, ant c1 20 | 4. go to host C, cd /bin, ant c2 21 | */ 22 | agents: 23 | bob [beliefs="receiver(maria)"] at "c2"; // container c2 is used only in case infra is Jade 24 | maria [verbose=1] at "c1"; // set verbose=2 to see more details 25 | } 26 | 27 | 28 | -------------------------------------------------------------------------------- /demos/concurrent-goals/concurrent_goals.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | concurrent_goals 3 | --------------------------- 4 | 5 | demo of concurrent goals, see sample_agent.asl 6 | 7 | Jason 3.1 8 | June 28, 2022 - 20:17:25 9 | */ 10 | 11 | MAS concurrent_goals { 12 | agents: sample_agent; 13 | } 14 | -------------------------------------------------------------------------------- /demos/concurrent-goals/sample_agent.asl: -------------------------------------------------------------------------------- 1 | !start. 2 | 3 | +!start <- !g(c,7) |&| (!g(a,9) ||| !g(b,3)). 4 | 5 | +!g(_,0). 6 | +!g(L,X) <- .print(L,X); .wait(500); !g(L,X-1). 7 | -------------------------------------------------------------------------------- /demos/controller/src/asl/bob.asl: -------------------------------------------------------------------------------- 1 | // Agent bob in project MindInspection 2 | 3 | batata(5,kg). 4 | 5 | !start(0). 6 | 7 | +!start(X) 8 | <- .wait(1000); 9 | -+vl(X); 10 | .send(sample,tell,vl(X)); 11 | .send(sample,untell,vl(X-1)); 12 | !!start(X+1). 13 | -------------------------------------------------------------------------------- /demos/controller/src/asl/jh.asl: -------------------------------------------------------------------------------- 1 | // Agent jh in project MindInspection 2 | 3 | /* Initial beliefs and rules */ 4 | 5 | bacana(0). 6 | 7 | /* Initial goals */ 8 | 9 | !start(0). 10 | 11 | /* Plans */ 12 | 13 | +!start(X) <- -+bacana(X); !!start(X+1). 14 | -------------------------------------------------------------------------------- /demos/controller/src/asl/sample.asl: -------------------------------------------------------------------------------- 1 | // Agent sample in project MindInspection 2 | 3 | batata(10,kg). 4 | 5 | -------------------------------------------------------------------------------- /demos/create-agent/ag1.asl: -------------------------------------------------------------------------------- 1 | !start. // initial goal 2 | 3 | +!start : true 4 | <- .print("Creating agent"); 5 | .create_agent(bob, "bob.asl"); 6 | .send(bob, achieve, a); 7 | .wait(100); 8 | .print("Killing agent bob!"); 9 | .kill_agent(bob); 10 | 11 | .print("Creating agent with internal action"); 12 | mylib.my_create_ag; 13 | 14 | !end(10000). 15 | 16 | +!end(T) : T <= 0 <- .stopMAS. 17 | +!end(T) : true 18 | <- .print("The MAS will stop in ",T/1000," seconds!"); 19 | .wait(2000); !end(T-2000). 20 | -------------------------------------------------------------------------------- /demos/create-agent/bob.asl: -------------------------------------------------------------------------------- 1 | init. 2 | +init : true 3 | <- .print("i am running"). 4 | 5 | +!a : true 6 | <- .print("ok, I am here"). 7 | -------------------------------------------------------------------------------- /demos/create-agent/createAgDemo.mas2j: -------------------------------------------------------------------------------- 1 | // this example shows how an agent 2 | // can create another (see ag1.asl source) 3 | 4 | MAS create_agent { 5 | agents: ag1; 6 | } 7 | -------------------------------------------------------------------------------- /demos/create-agent/readme.txt: -------------------------------------------------------------------------------- 1 | This demo shows how an agent can create another agent, see ag1.asl and mylib/my_create_ag.java. 2 | 3 | Both, the internal action .create_agent and a new custom internal action are illustrated. 4 | -------------------------------------------------------------------------------- /demos/custom-ag/custom_ag.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | custom_ag 3 | --------------------------- 4 | 5 | Jason Project File 6 | 7 | example of custom agent (initAg method) 8 | 9 | the initAg method gets the myarg value (a number) and creates 10 | `myarg` goals `do(.)` 11 | 12 | */ 13 | 14 | MAS custom_ag { 15 | 16 | agents: 17 | sample_agent [myarg=5] 18 | agentClass MyAg; 19 | } 20 | -------------------------------------------------------------------------------- /demos/custom-ag/sample_agent.asl: -------------------------------------------------------------------------------- 1 | +!do(X) <- .print("doing ",X). 2 | -------------------------------------------------------------------------------- /demos/custom-ag/src/java/MyAg.java: -------------------------------------------------------------------------------- 1 | import jason.asSemantics.Agent; 2 | import jason.asSyntax.ASSyntax; 3 | 4 | @SuppressWarnings("serial") 5 | public class MyAg extends Agent { 6 | 7 | public void initAg() { 8 | super.initAg(); 9 | System.out.println("All arguments for this agent:\n\t"+getTS().getSettings().getUserParameters()); 10 | 11 | // get myarg argument 12 | int n = Integer.valueOf( getTS().getSettings().getUserParameter("myarg") ); 13 | System.out.println("myagr is "+n); 14 | 15 | // create n goals 16 | for (int i=0; i 10. 7 | x(V) :- V < 30. 8 | 9 | /* Initial goals */ 10 | 11 | !start. 12 | 13 | /* Plans */ 14 | 15 | +!start : true 16 | <- .send(receiver,tellRule, [{a :- b & c}]); // send a list with a single rule 17 | .wait(100); 18 | .send(receiver,achieve,test); 19 | .relevant_rules(x(_),L); // get all rules with head x(_) 20 | .print("Sending rules ", L); 21 | .send(receiver,tellRule, L). 22 | -------------------------------------------------------------------------------- /demos/tell-rule/tell-rule.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This example shows how to customise the KQML to add 4 | a new performative, identified by "tellRule", used by 5 | one agent to send rules like "a :- b & c" to another 6 | agent. 7 | 8 | */ 9 | 10 | 11 | MAS tell_rule { 12 | 13 | agents: 14 | sender; // the agent that sends the rules 15 | receiver; // the agent that receives them 16 | } 17 | 18 | -------------------------------------------------------------------------------- /demos/threaded_ia/a.asl: -------------------------------------------------------------------------------- 1 | // goals 2 | !start(0). 3 | !do_task. 4 | 5 | +!start(10) <- .stopMAS. 6 | +!start(X) <- .print("I am alive.... ",X); .wait(1000); !start(X+1). 7 | 8 | // the following plan runs an internal action that 9 | // suspends the intention, runs a thread, and, when finished, resume the intention 10 | 11 | +!do_task <- .print("start...."); mylib.tiac(3000,X); .print("finish with X=",X). 12 | -------------------------------------------------------------------------------- /demos/threaded_ia/threaded_ia.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Demo 2 | 3 | In this demo, an internal action runs a heavy task an 4 | does not block the agent thread, instead it creates 5 | a new thread for that task. 6 | 7 | See the code mylib/tiac.java 8 | 9 | */ 10 | 11 | MAS threaded_ia { 12 | 13 | agents: a; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /demos/using-only-jason-BDI-engine/demo.asl: -------------------------------------------------------------------------------- 1 | 2 | +x(N) : N < 3 3 | <- do(0); .print(end2). 4 | 5 | +x(N) : N >= 3 6 | <- do(50); .print(end1). 7 | 8 | -------------------------------------------------------------------------------- /demos/using-only-jason-BDI-engine/readme.txt: -------------------------------------------------------------------------------- 1 | This is a demo of how a Java program can use only the 2 | Jason AgentSpeak interpreter. See the FAQ for more information. 3 | 4 | To run this demo: 5 | 6 | 1. compile the source 7 | javac -classpath "$JASON_HOME/libs/*:." SimpleJasonAgent.java 8 | 9 | 2. run the Java code: 10 | java -classpath "$JASON_HOME/libs/*:." SimpleJasonAgent 11 | -------------------------------------------------------------------------------- /demos/using-parser/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | Example of using Jason Parser 3 | */ 4 | 5 | defaultTasks 'run' 6 | 7 | apply plugin: 'java' 8 | 9 | repositories { 10 | mavenCentral() 11 | maven { url "https://raw.githubusercontent.com/jacamo-lang/mvn-repo/master" } 12 | } 13 | 14 | dependencies { 15 | implementation 'io.github.jason-lang:jason-interpreter:3.2.1' 16 | } 17 | 18 | sourceSets { 19 | main { 20 | java { 21 | srcDir '.' 22 | } 23 | } 24 | } 25 | 26 | task run (type: JavaExec, dependsOn: 'classes') { 27 | mainClass = 'DemoParser' 28 | classpath sourceSets.main.runtimeClasspath 29 | } 30 | -------------------------------------------------------------------------------- /demos/using-parser/mars.mas2j: -------------------------------------------------------------------------------- 1 | // Implementation of the example described in chapter 2 2 | // of the Jason's manual 3 | 4 | MAS mars { 5 | 6 | environment: MarsEnv 7 | 8 | agents: r1; r2; 9 | } 10 | -------------------------------------------------------------------------------- /demos/using-parser/settings.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/demos/using-parser/settings.gradle -------------------------------------------------------------------------------- /doc/Jason.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/Jason.pdf -------------------------------------------------------------------------------- /doc/adoc-empty.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/adoc-empty.css -------------------------------------------------------------------------------- /doc/asciidoc-docker: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | echo asciidoc for $@ 3 | IMAGE=jomifred/adoc 4 | exec docker run --rm -i --user="$(id -u):$(id -g)" --net=none -v "$PWD":/app "$IMAGE" asciidoctor -r /pygments_init.rb "$@" 5 | -------------------------------------------------------------------------------- /doc/jason-cli/figs/s1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/jason-cli/figs/s1.png -------------------------------------------------------------------------------- /doc/publish.sh: -------------------------------------------------------------------------------- 1 | # 2 | # by Jomi 3 | # 4 | 5 | cd .. 6 | ./gradlew renderAsciidoc 7 | ./gradlew javadoc 8 | cd doc 9 | cp readme.html index.html 10 | scp -r * $USERSF,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/doc 11 | -------------------------------------------------------------------------------- /doc/publishFAQ.sh: -------------------------------------------------------------------------------- 1 | ../scripts/asciidoc-docker faq.adoc 2 | scp faq.html $USERSF,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/doc 3 | -------------------------------------------------------------------------------- /doc/tech/Jason Operators and Events.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tech/Jason Operators and Events.pdf -------------------------------------------------------------------------------- /doc/tech/goal-states.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tech/goal-states.pdf -------------------------------------------------------------------------------- /doc/tech/intention-states.gv: -------------------------------------------------------------------------------- 1 | // dot intention-states.gv -Tpdf -o intention-states.pdf 2 | 3 | digraph intention_states { 4 | compound=true; 5 | 6 | ENTRY[shape=point,color=black,label=""]; 7 | EXIT[shape=point,color=black,label=""]; 8 | 9 | node [shape=oval,style=filled,color=gray, fillcolor="lightgoldenrod", fixedsize=shape,width=2]; 10 | R [label=<running
(I,E,SE,SI)>]; 11 | S [label=<suspended
(PI,PE)>]; 12 | P [label=<waiting
(PI,PA)>]; 13 | 14 | R->S[arrowsize=0.5]; 15 | S->R[arrowsize=0.5]; 16 | 17 | R->P[arrowsize=0.5]; //[label=<^resumed>,fontsize="8",arrowsize=0.5]; 18 | P->R[arrowsize=0.5]; 19 | 20 | 21 | ENTRY->R[arrowsize=0.5]; 22 | {R,S,P} -> EXIT [arrowsize=0.5]; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /doc/tech/intention-states.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tech/intention-states.pdf -------------------------------------------------------------------------------- /doc/tech/modules-namespaces.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tech/modules-namespaces.pdf -------------------------------------------------------------------------------- /doc/tech/run-jason-without-gradle.txt: -------------------------------------------------------------------------------- 1 | 2 | if you want to run/test changes in Jason sources without publishing jars on maven/gradle repositories: 3 | 4 | 1. compile the changes 5 | ./gradlew :jason-cli:uberJar 6 | 7 | 2. set a var with UBERJAR 8 | export JASON_UJ=/jason-cli/build/ 9 | 10 | 3. go to an application directory 11 | 12 | 4. compile java sources of the application 13 | jason app compile 14 | or 15 | ./gradlew build 16 | 17 | 4. run with local infra: 18 | java -cp ".:build/classes/java/main:JASON_UJ/*" jason.infra.local.RunLocalMAS xx.mas2j 19 | 20 | 5. run with jade infra: 21 | java -cp ".:build/classes/java/main:JASON_UJ/*" jason.infra.jade.RunJadeMAS xx.mas2j 22 | 23 | -------------------------------------------------------------------------------- /doc/tutorials/getting-started/VacuumCleaning-1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/VacuumCleaning-1.zip -------------------------------------------------------------------------------- /doc/tutorials/getting-started/VacuumCleaning-1/vacuum-cleaning-1.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | Jason Exercise: Vacuum Cleaning 1 3 | */ 4 | 5 | MAS vacuum_cleaning { 6 | environment: VCWorld 7 | agents: vc; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /doc/tutorials/getting-started/VacuumCleaning-1/vc.asl: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | 4 | Very simple vacuum cleaner agent in a world that has only four locations. 5 | 6 | Perceptions: 7 | . dirty: the current location has dirty 8 | . clean: the current location is clean 9 | . pos(X): the agent position is X (0 < X < 5). 10 | 11 | Actions: 12 | . suck: clean the current location 13 | . left, right, up, down: move the agent 14 | 15 | */ 16 | 17 | // TODO: the code of the agent 18 | -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/JasonEx-CR-ss1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/JasonEx-CR-ss1.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/ambiente.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/ambiente.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/bob-ini-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/bob-ini-code.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/debug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/debug.gif -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/greeting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/greeting.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/overview.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/screen-mars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/screen-mars.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/screen-masconsole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/screen-masconsole.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/screen-mindinsp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/screen-mindinsp.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/figures/suspend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/getting-started/figures/suspend.png -------------------------------------------------------------------------------- /doc/tutorials/getting-started/publish.sh: -------------------------------------------------------------------------------- 1 | IMAGE=jomifred/adoc 2 | docker run --rm -i --user="$(id -u):$(id -g)" --net=none -v "$PWD":/app "$IMAGE" asciidoctor -r /pygments_init.rb readme.adoc 3 | docker run --rm -i --user="$(id -u):$(id -g)" --net=none -v "$PWD":/app "$IMAGE" asciidoctor -r /pygments_init.rb shell-based.adoc 4 | 5 | cp readme.html index.html 6 | 7 | scp -r *.html $USERSF,jason@web.sf.net:/home/project-web/jason/htdocs/doc/tutorials/getting-started 8 | 9 | #zip -r ../../getting-started/VacuumCleaning-1.zip VacuumCleaning-1/*.asl VacuumCleaning-1/*.mas2j VacuumCleaning-1/*.java 10 | #scp -r figures jomifred,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/mini-tutorial/getting-started 11 | #scp exercise-answers.txt jomifred,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/mini-tutorial/getting-started 12 | -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/code/alice.asl: -------------------------------------------------------------------------------- 1 | !start. 2 | 3 | +!start 4 | <- .send(bob,tell,happy(bob)); 5 | .send(bob,tell,happy(alice1)); 6 | .send(bob,tell,happy(alice2)); 7 | .send(bob,tell,happy(alice3)); 8 | .send(bob,tell,happy(alice4)); 9 | .wait(1000); 10 | .send(bob,tell,happy(morgana)); 11 | .wait(1000); 12 | /*.send(bob,tell,today(wednesday)); 13 | .wait(3000); 14 | .send(bob,tell,today(friday)); 15 | .wait(3000); 16 | .send(bob,tell,today(saturday)); 17 | */ 18 | //.send(bob,untell,happy(bob)); 19 | .wait(1000); 20 | .send(bob,untell,happy(alice)). 21 | -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/code/bdi_hw.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Project */ 2 | 3 | MAS bdi_hw { 4 | environment: jaca.CartagoEnvironment 5 | 6 | agents: 7 | bob agentArchClass jaca.CAgentArch; 8 | alice agentArchClass jaca.CAgentArch; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/hello-bdi-code.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/hello-bdi/hello-bdi-code.zip -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/hello-bdi-code/bdih.jcm: -------------------------------------------------------------------------------- 1 | /* 2 | JaCaMo Application File 3 | 4 | JaCaMo 1.0 5 | July 26, 2021 - 16:00:06 6 | */ 7 | mas bdi_hw { 8 | 9 | agent bob 10 | 11 | } 12 | -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/hello-bdi-code/bob.asl: -------------------------------------------------------------------------------- 1 | happy(bob). 2 | 3 | !say(hello). 4 | 5 | +!say(X) : happy(bob) <- .print(X). 6 | -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/hello-bdi-code/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/hello-bdi/hello-bdi-code/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/hello-bdi-code/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | docker run --rm -i --user="$(id -u):$(id -g)" --net=none -v "$PWD":/app jomifred/adoc asciidoctor -r /pygments_init.rb readme.adoc 4 | mv readme.html index.html 5 | scp index.html jomifred,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/mini-tutorial/hello-bdi 6 | 7 | #scp hello-bdi-code.zip jomifred,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/mini-tutorial/hello-bdi 8 | -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/screens/mind-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/hello-bdi/screens/mind-1.png -------------------------------------------------------------------------------- /doc/tutorials/hello-bdi/screens/mind-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/hello-bdi/screens/mind-2.png -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # by Jomi 3 | # 4 | 5 | adoc: 6 | asciidoctor -r ../../../src/main/resources/pygments_init.rb readme.adoc 7 | 8 | publish: 9 | cp readme.html index.html 10 | # zip -r ../../jason-jade/jade-example.zip jade-example/examples/bookTrading/*.java 11 | scp index.html jomifred,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/doc/tutorials/jason-jade 12 | scp readme.html jomifred,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/doc/tutorials/jason-jade 13 | scp -r figures jomifred,jason@web.sf.net:/home/groups/j/ja/jason/htdocs/doc/tutorials/jason-jade 14 | -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/book_trading.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/jason-jade/book_trading.zip -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/book_trading/book_trading.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Project */ 2 | 3 | MAS book_trading { 4 | 5 | agents: 6 | john; 7 | 8 | aslSourcePath: "src/agt"; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/book_trading/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/jason-jade/book_trading/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/book_trading/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/book_trading/settings.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/jason-jade/book_trading/settings.gradle -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/figures/ams1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/jason-jade/figures/ams1.png -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/figures/ams2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/jason-jade/figures/ams2.png -------------------------------------------------------------------------------- /doc/tutorials/jason-jade/figures/screen-df.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/jason-jade/figures/screen-df.png -------------------------------------------------------------------------------- /doc/tutorials/vscode-browser/figs/codespace1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/vscode-browser/figs/codespace1.png -------------------------------------------------------------------------------- /doc/tutorials/vscode-browser/figs/codespace2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/vscode-browser/figs/codespace2.png -------------------------------------------------------------------------------- /doc/tutorials/vscode-browser/figs/vscweb1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/vscode-browser/figs/vscweb1.png -------------------------------------------------------------------------------- /doc/tutorials/vscode-browser/figs/vscweb2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/vscode-browser/figs/vscweb2.png -------------------------------------------------------------------------------- /doc/tutorials/vscode/figs/app-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/vscode/figs/app-files.png -------------------------------------------------------------------------------- /doc/tutorials/vscode/figs/inst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/doc/tutorials/vscode/figs/inst.png -------------------------------------------------------------------------------- /examples/airport/HeathrowRobots.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Defines the Heathrow Robots MAS 4 | 5 | For more information about this example, see 6 | . airportChronicle.pdf and 7 | . Rafael H. Bordini, Mehdi Dastani, Jurgen Dix, and Amal El Fallah 8 | Seghrouchni, editors. Multi-Agent Programming: Languages, Platforms 9 | and Applications. Chapter 1. Springer-Verlag, 2005. 10 | 11 | */ 12 | 13 | MAS heathrow { 14 | 15 | environment: 16 | HeathrowEnv 17 | 18 | agents: 19 | mds agentClass mds.MDSAgent 20 | #5; 21 | 22 | cph agentArchClass cph.CPHAgArch 23 | agentClass cph.CPHAgent 24 | #2; 25 | 26 | bd #3; 27 | } 28 | -------------------------------------------------------------------------------- /examples/airport/airportChronicle.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/airport/airportChronicle.pdf -------------------------------------------------------------------------------- /examples/airport/cph.asl: -------------------------------------------------------------------------------- 1 | !test_disarm. // initial goal 2 | +!test_disarm <- disarm(_). // illegal tentative action, must cause an error 3 | 4 | // carry a Bomb to a safe place 5 | +!carry_to_safe_place(RN,Place) : true 6 | <- ?unattended_luggage(Trmnl,Gate,RN); 7 | !go(Trmnl,Gate); 8 | pick_up(Bomb); 9 | !go(Place); 10 | drop(Bomb). 11 | 12 | 13 | // void plans, not implemented yet. 14 | +!go(_,_). 15 | +!go(_). 16 | -------------------------------------------------------------------------------- /examples/airport/cph/CPHAgent.java: -------------------------------------------------------------------------------- 1 | package cph; 2 | 3 | import jason.asSemantics.Agent; 4 | import jason.asSemantics.Message; 5 | 6 | public class CPHAgent extends Agent { 7 | 8 | /** only accepts "achieve" messages from mds robots */ 9 | public boolean socAcc(Message m) { 10 | if (m.getIlForce().equals("achieve") && m.getSender().startsWith("mds")) { 11 | return true; 12 | } else { 13 | System.out.println("CustomAgentClass: CPH agent is not allowed to handle message "+m); 14 | return false; 15 | } 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /examples/airport/mds/calculateMyBid.java: -------------------------------------------------------------------------------- 1 | package mds; 2 | 3 | import jason.asSemantics.DefaultInternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.NumberTermImpl; 7 | import jason.asSyntax.Term; 8 | 9 | public class calculateMyBid extends DefaultInternalAction { 10 | 11 | @Override 12 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 13 | String id = ts.getUserAgArch().getAgName().substring(3); 14 | int bid = Integer.parseInt(id) * 10; 15 | // args[0] is the unattended luggage Report Number 16 | return un.unifies(args[1], new NumberTermImpl(bid)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /examples/auction/ag1.asl: -------------------------------------------------------------------------------- 1 | // this agent always bids 6 2 | 3 | @lbid 4 | +auction(N)[source(S)] : true 5 | <- .send(S, tell, place_bid(N,6)). 6 | 7 | -------------------------------------------------------------------------------- /examples/auction/ag2.asl: -------------------------------------------------------------------------------- 1 | // This agent usually bids 4, 2 | // when it has an alliance with ag3, it bids 0 3 | 4 | default_bid_value(4). 5 | ally(ag3). 6 | 7 | +auction(N)[source(S)] : not alliance 8 | <- ?default_bid_value(B); 9 | .send(S, tell, place_bid(N,B)). 10 | 11 | +auction(N)[source(S)] : alliance 12 | <- .send(S, tell, place_bid(N,0)). 13 | 14 | // alliance proposal from another agent 15 | +alliance[source(A)] 16 | : .my_name(I) & ally(A) 17 | <- .print("Alliance proposed by ", A); 18 | ?default_bid_value(B); 19 | .send(A,tell,bid(I,B)); 20 | .send(A,tell,alliance(A,I)). 21 | 22 | -------------------------------------------------------------------------------- /examples/auction/ag3.asl: -------------------------------------------------------------------------------- 1 | // this agent bids 3, 2 | // if it looses 3 auctions, it proposes an alliance to 3 | // ag2 and therefore it bids 7 (3 from itself + 4 from ag2) 4 | 5 | default_bid_value(3). 6 | ally(ag2). 7 | threshold(3). 8 | 9 | +auction(N)[source(S)] 10 | : (threshold(T) & N < T) 11 | | 12 | (.my_name(I) & winner(I) & ally(A) & not alliance(I,A)) 13 | <- !bid_normally(S,N). 14 | 15 | +auction(N)[source(S)] 16 | : .my_name(I) & not winner(I) & ally(A) & not alliance(I,A) 17 | <- !alliance(A); 18 | !bid_normally(S,N). 19 | 20 | @palliance 21 | +auction(N)[source(S)] 22 | : alliance(_,A) 23 | <- ?default_bid_value(B); 24 | ?bid(A,C); 25 | .send(S, tell, place_bid(N,B+C)). 26 | 27 | +!bid_normally(S,N) : true 28 | <- ?default_bid_value(B); 29 | .send(S, tell, place_bid(N,B)). 30 | 31 | @prop_alliance[breakpoint] 32 | +!alliance(A) : true 33 | <- .send(A,tell,alliance). 34 | 35 | -------------------------------------------------------------------------------- /examples/auction/auction.mas2j: -------------------------------------------------------------------------------- 1 | // simple implementation of first-price sealed-bid auction 2 | 3 | MAS auction { 4 | 5 | agents: ag1; 6 | ag2; 7 | ag3 [mindinspector="gui(cycle,html,history)"]; // this agent has a GUI mind inspector 8 | auctioneer agentArchClass AuctioneerGUI; 9 | } 10 | -------------------------------------------------------------------------------- /examples/auction/auctioneer.asl: -------------------------------------------------------------------------------- 1 | // this agent manages the auction and identify the winner 2 | 3 | +!start_auction(N) // this goal is created by the GUI of the agent 4 | <- .broadcast(tell, auction(N)). 5 | 6 | 7 | @pb1[atomic] 8 | +place_bid(N,_) // receives bids and checks for new winner 9 | : .findall(b(V,A),place_bid(N,V)[source(A)],L) & 10 | .length(L,3) // all 3 expected bids was received 11 | <- .max(L,b(V,W)); 12 | .print("Winner is ",W," with ", V); 13 | show_winner(N,W); // show it in the GUI 14 | .broadcast(tell, winner(W)); 15 | .abolish(place_bid(N,_)). 16 | -------------------------------------------------------------------------------- /examples/auction/doc/html/AgentOverviewDiagram_ag1_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/auction/doc/html/AgentOverviewDiagram_ag1_26.png -------------------------------------------------------------------------------- /examples/auction/doc/html/AgentOverviewDiagram_ag2_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/auction/doc/html/AgentOverviewDiagram_ag2_31.png -------------------------------------------------------------------------------- /examples/auction/doc/html/AgentOverviewDiagram_ag3_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/auction/doc/html/AgentOverviewDiagram_ag3_32.png -------------------------------------------------------------------------------- /examples/auction/doc/html/AgentOverviewDiagram_auctioneer agent_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/auction/doc/html/AgentOverviewDiagram_auctioneer agent_25.png -------------------------------------------------------------------------------- /examples/auction/doc/html/GoalOverviewDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/auction/doc/html/GoalOverviewDiagram.png -------------------------------------------------------------------------------- /examples/auction/doc/html/RolesDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/auction/doc/html/RolesDiagram.png -------------------------------------------------------------------------------- /examples/auction/doc/html/SystemOverviewDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/auction/doc/html/SystemOverviewDiagram.png -------------------------------------------------------------------------------- /examples/blocks-world/BlocksWorld.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Blocks World Project */ 2 | MAS blocksWorld { 3 | 4 | environment: BlocksEnv.BlocksWorld(1,500,yes) // change 500 to 0 to speed up 5 | // yes to use GUI 6 | 7 | // There are 5 different solutions to a Blocks World problem in this example. 8 | // Choose one of them below: 9 | agents: agent; // a straightforward Jason solution 10 | // agents: agent agent_o; // tries to optimise the choice of tower to work on 11 | // agents: agent agent_c; // tries each tower concurrently 12 | // agents: agent agent_p; // same know-how as above but using plan patterns 13 | // agents: agent agent_g; // a version implementing the solution from a GOAL program 14 | } 15 | -------------------------------------------------------------------------------- /examples/blocks-world/agent_c.asl: -------------------------------------------------------------------------------- 1 | // An agent for the Blocks World 2 | // Tries each stack of the goal world concurrently 3 | 4 | /* Initial beliefs and rules */ 5 | clear(table). 6 | clear(X) :- not(on(Y,X)). 7 | tower([X]) :- on(X,table). 8 | tower([X,Y|T]) :- on(X,Y) & tower([Y|T]). 9 | 10 | /* Initial goals */ 11 | // Try each stack concurrently 12 | !tower([g]). 13 | !tower([f,d,c]). 14 | !tower([a,e,b]). 15 | 16 | /* Plans */ 17 | 18 | +!tower(T) : tower(T). 19 | +!tower([T]) <- !on(T,table). 20 | +!tower([X,Y|T]) <- !tower([Y|T]); !on(X,Y). 21 | 22 | +!on(X,Y) : on(X,Y). 23 | @po[atomic] // don't allow concurrency within each "on(X,Y)" subgoal 24 | +!on(X,Y) <- !clear(X); !clear(Y); move(X,Y). 25 | 26 | +!clear(X) : clear(X). 27 | +!clear(X) : tower([H|T]) & .member(X,T) 28 | <- move(H,table); 29 | !clear(X). 30 | 31 | -------------------------------------------------------------------------------- /examples/blocks-world/agent_g.asl: -------------------------------------------------------------------------------- 1 | // An agent for the Block World 2 | // This ones tries to be closer to a GOAL program 3 | 4 | /* Initial beliefs and rules */ 5 | clear(table). 6 | clear(X) :- not(on(Y,X)). 7 | tower([X]) :- on(X,table). 8 | tower([X,Y|T]) :- on(X,Y) & tower([Y|T]). 9 | 10 | allowed(X,Y) :- clear(X) & clear(Y) & not on(X,Y). 11 | 12 | // an ad-hoc implementation of the GOAL "a_goal" construct for this problem 13 | a_goal(S,G) :- .member(S1,S) & .suffix(G,S1). 14 | 15 | /* Initial goals */ 16 | !state([[a,e,b],[f,d,c],[g]]). 17 | 18 | /* Plans */ 19 | +!state(S) 20 | : a_goal(S,[X,Y|T]) & tower([Y|T]) & allowed(X,Y) 21 | <- move(X,Y); !state(S). 22 | +!state(S) 23 | : a_goal(S,[X|T]) & not tower([X|T]) & allowed(X,table) 24 | <- move(X,table); !state(S). 25 | +!state(S). 26 | 27 | -------------------------------------------------------------------------------- /examples/blocks-world/agent_p.asl: -------------------------------------------------------------------------------- 1 | // An agent for the Blocks World 2 | // This version uses plan patterns for declarative goals 3 | 4 | /* Initial beliefs and rules */ 5 | clear(table). 6 | clear(X) :- not(on(Y,X)). 7 | tower([X]) :- on(X,table). 8 | tower([X,Y|T]) :- on(X,Y) & tower([Y|T]). 9 | 10 | /* Initial goals */ 11 | // The final state to be achieved 12 | !state([[a,e,b],[f,d,c],[g]]). 13 | 14 | /* Plans */ 15 | // Achieve one tower at a time 16 | +!state([]). 17 | +!state([H|T]) <- !tower(H); !state(T). 18 | 19 | {begin dg(tower(T))} // plans for a declarative goal (dg) 20 | +!tower([T]) <- !on(T,table). 21 | +!tower([X,Y|T]) <- !tower([Y|T]); !on(X,Y). 22 | {end} 23 | 24 | {begin dg(on(X,Y))} 25 | +!on(X,Y) <- !clear(X); !clear(Y); move(X,Y). 26 | {end} 27 | 28 | {begin bc(clear(X),dg(clear(X)))} // blindly committed (bc) to this goal 29 | +!clear(X) 30 | : tower([H|T]) & .member(X,T) 31 | <- move(H,table). 32 | {end} 33 | 34 | -------------------------------------------------------------------------------- /examples/cleaning-robots/doc/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/cleaning-robots/doc/overview.png -------------------------------------------------------------------------------- /examples/cleaning-robots/mars.mas2j: -------------------------------------------------------------------------------- 1 | // Implementation of the example described in chapter 2 2 | // of the Jason's manual 3 | 4 | MAS mars { 5 | 6 | environment: MarsEnv 7 | 8 | agents: r1; r2; 9 | } 10 | -------------------------------------------------------------------------------- /examples/cleaning-robots/r2.asl: -------------------------------------------------------------------------------- 1 | // mars robot 2 2 | 3 | +garbage(r2) : true <- burn(garb). 4 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-er/ContractNetProtocol.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason(ER) Project 2 | 3 | This project shows how the Contract Net Protocol (CNP) 4 | can be implemented with features of Jason(ER): 5 | - sub-plans 6 | - goal conditions 7 | (see c_alt.asl and p.las for more details) 8 | 9 | The agent c plays the initiator (who need a service) 10 | and the agents p* play participant (who provide a service). 11 | 12 | For more information about the CNP see 13 | http://www.fipa.org/specs/fipa00029/ 14 | 15 | */ 16 | 17 | MAS cnp { 18 | 19 | agents: 20 | c_alt; // the CNP initiator 21 | p #3; // the participants (3) that offer a service 22 | pr; // a participant that always refuses 23 | pn; // a participant that does not answer 24 | } 25 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-er/doc/cnp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/contract-net-protocol-er/doc/cnp.pdf -------------------------------------------------------------------------------- /examples/contract-net-protocol-er/pn.asl: -------------------------------------------------------------------------------- 1 | !register. 2 | +!register <- .df_register("participant"). 3 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-er/pr.asl: -------------------------------------------------------------------------------- 1 | !register. 2 | 3 | +!register <- .df_register("participant"); 4 | .df_subscribe("initiator"). 5 | 6 | // plan to answer a CFP 7 | +cfp(CNPId,_Service)[source(A)] 8 | : provider(A,"initiator") 9 | <- .send(A,tell,refuse(CNPId)). 10 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-module/alice.asl: -------------------------------------------------------------------------------- 1 | // starts 3 different CNPs 2 | !start([fix(tv),fix(pc),fix(oven)]). 3 | 4 | +!start([]). 5 | +!start([fix(T)|R]) 6 | <- .include("initiator.asl",T); // loads initiator.asl into namespace T (the product) 7 | 8 | // the +winner event is produced by the initiator module, add a plan to react to that 9 | + {+T::winner(W) <- .print("Winner to fix ",T," is ",W) }; 10 | 11 | // sub-goal with new focus, the plan for startCNP is defined in the initiator module 12 | !!T::startCNP(fix(T)); 13 | !start(R). 14 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-module/bob.asl: -------------------------------------------------------------------------------- 1 | 2 | // starts two CNPs into different namespaces 3 | 4 | {include("initiator.asl",hall)} 5 | {include("initiator.asl",comm)} 6 | 7 | !hall::startCNP(build(park)). 8 | !comm::startCNP(build(bridge)). 9 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-module/company_A.asl: -------------------------------------------------------------------------------- 1 | 2 | !registerDF. 3 | +!registerDF <- .df_register("participant"). 4 | 5 | 6 | +N::cnp_started[source(A)] // receives the announce of a new CNP in namespace N from A 7 | <- // adds some beliefs used by the participant module 8 | +N::price(_,(3*math.random)+10); 9 | +N::acceptable(fix(N)); 10 | .include("participant.asl",N). 11 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-module/company_B.asl: -------------------------------------------------------------------------------- 1 | {begin namespace(supp,local)} 2 | price(bridge,300). 3 | price(park, 150). 4 | gain(hall, 1.5). 5 | gain(comm, 0.8). 6 | {end} 7 | 8 | hall::acceptable(build(_)). 9 | comm::acceptable(build(_)). 10 | 11 | !registerDF. 12 | +!registerDF <- .df_register("participant"). 13 | 14 | +N::cnp_started[source(bob)] 15 | : .member(N,[hall,comm]) 16 | <- + {+?N::price(build(T),P) : supp::gain(N,G) <- ?supp::price(T,M); P = M*(1+G)}; 17 | .include("participant.asl",N). 18 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-module/contract_net_protocol.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Contract Net Protocol implemented using Modules feature of Jason 4 | 5 | Developed by Gustavo Ortiz Hernández based on the original version 6 | available in the Jason distribution. 7 | 8 | see jason/doc/tech/modules.pdf for more information about modules 9 | in Jason. 10 | 11 | */ 12 | 13 | MAS contract_net_protocol { 14 | 15 | agents: 16 | bob; 17 | alice; 18 | company_A #3; 19 | company_B #3; 20 | } 21 | -------------------------------------------------------------------------------- /examples/contract-net-protocol-module/participant.asl: -------------------------------------------------------------------------------- 1 | // participating in CNP 2 | 3 | // Answer a Call For Proposal 4 | +cfp(Task)[source(A)] : acceptable(Task) 5 | <- ?price(Task,Price); 6 | .println("Proposing ",Price," for task ",Task," from agent ",A); 7 | .send(A,tell, ::propose(Price)); 8 | +participating(Task). 9 | 10 | +cfp(Task)[source(A)] : not acceptable(Task) 11 | <- .send(A,tell, ::refuse); 12 | .println("Refusing proposal for task ",Task," from agent ",A). 13 | 14 | // Possibly results of my Proposal 15 | +accept_proposal : participating(Task) 16 | <- .print("My proposal in ",this_ns," for task ",Task," won!"). 17 | // do the task and report to initiator 18 | 19 | +reject_proposal : participating(Task) 20 | <- .print("I lost CNP in ",this_ns," for task ",Task,"."). 21 | -------------------------------------------------------------------------------- /examples/contract-net-protocol/doc/cnp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/contract-net-protocol/doc/cnp.pdf -------------------------------------------------------------------------------- /examples/contract-net-protocol/p.asl: -------------------------------------------------------------------------------- 1 | // gets the price for the product, 2 | // a random value between 100 and 110. 3 | price(_Service,X) :- .random(R) & X = (10*R)+100. 4 | 5 | !register. 6 | 7 | +!register <- .df_register("participant"); 8 | .df_subscribe("initiator"). 9 | 10 | // answer to Call For Proposal 11 | @c1 +cfp(CNPId,Task)[source(A)] 12 | : provider(A,"initiator") & 13 | price(Task,Offer) 14 | <- +proposal(CNPId,Task,Offer); // remember my proposal 15 | .send(A,tell,propose(CNPId,Offer)). 16 | 17 | @r1 +accept_proposal(CNPId) 18 | : proposal(CNPId,Task,Offer) 19 | <- .print("My proposal '",Offer,"' won CNP ",CNPId, " for ",Task,"!"). 20 | // do the task and report to initiator 21 | 22 | @r2 +reject_proposal(CNPId) 23 | <- .print("I lost CNP ",CNPId, "."); 24 | -proposal(CNPId,_,_). // clear memory 25 | -------------------------------------------------------------------------------- /examples/contract-net-protocol/pn.asl: -------------------------------------------------------------------------------- 1 | !register. 2 | 3 | +!register <- .df_register("participant"). 4 | -------------------------------------------------------------------------------- /examples/contract-net-protocol/pr.asl: -------------------------------------------------------------------------------- 1 | !register. 2 | 3 | +!register <- .df_register("participant"); 4 | .df_subscribe("initiator"). 5 | 6 | // plan to answer a CFP 7 | +cfp(CNPId,_Service)[source(A)] 8 | : provider(A,"initiator") 9 | <- .send(A,tell,refuse(CNPId)). 10 | -------------------------------------------------------------------------------- /examples/domestic-robot/DomesticRobot.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Project 2 | 3 | See Prometheus specification in doc folder 4 | 5 | */ 6 | 7 | MAS domestic_robot { 8 | environment: HouseEnv(gui) // use "nogui" as parameter to not show the GUI 9 | agents: robot; 10 | owner; 11 | supermarket; 12 | } 13 | -------------------------------------------------------------------------------- /examples/domestic-robot/doc/cdHouse.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/domestic-robot/doc/cdHouse.pdf -------------------------------------------------------------------------------- /examples/domestic-robot/doc/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/domestic-robot/doc/overview.png -------------------------------------------------------------------------------- /examples/domestic-robot/owner.asl: -------------------------------------------------------------------------------- 1 | /* Initial goals */ 2 | 3 | !get(beer). // initial goal: get a beer 4 | !check_bored. // initial goal: verify whether I am getting bored 5 | 6 | +!get(beer) : true 7 | <- .send(robot, achieve, has(owner,beer)). 8 | 9 | +has(owner,beer) : true 10 | <- !drink(beer). 11 | -has(owner,beer) : true 12 | <- !get(beer). 13 | 14 | // while I have beer, sip 15 | +!drink(beer) : has(owner,beer) 16 | <- sip(beer); 17 | !drink(beer). 18 | +!drink(beer) : not has(owner,beer) 19 | <- true. 20 | 21 | +!check_bored : true 22 | <- .random(X); .wait(X*5000+2000); // i get bored at random times 23 | .send(robot, askOne, time(_), R); // when bored, I ask the robot about the time 24 | .print(R); 25 | !check_bored. 26 | 27 | +msg(M)[source(Ag)] : true 28 | <- .print("Message from ",Ag,": ",M); 29 | -msg(M). 30 | 31 | -------------------------------------------------------------------------------- /examples/domestic-robot/supermarket.asl: -------------------------------------------------------------------------------- 1 | last_order_id(1). // initial belief 2 | 3 | // plan to achieve the goal "order" for agent Ag 4 | +!order(Product,Qtd)[source(Ag)] : true 5 | <- ?last_order_id(N); 6 | OrderId = N + 1; 7 | -+last_order_id(OrderId); 8 | deliver(Product,Qtd); 9 | .send(Ag, tell, delivered(Product,Qtd,OrderId)). 10 | 11 | -------------------------------------------------------------------------------- /examples/domestic-robot/time/check.java: -------------------------------------------------------------------------------- 1 | package time; 2 | 3 | import jason.asSemantics.DefaultInternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.StringTermImpl; 7 | import jason.asSyntax.Term; 8 | 9 | import java.text.SimpleDateFormat; 10 | import java.util.Date; 11 | 12 | public class check extends DefaultInternalAction { 13 | 14 | @Override 15 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 16 | String time = (new SimpleDateFormat("HH:mm:ss")).format(new Date()); 17 | ts.getLogger().info("Check Time="+time); 18 | return un.unifies(args[0], new StringTermImpl(time)); 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /examples/food-simulation/lib/jcommon-1.0.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/food-simulation/lib/jcommon-1.0.12.jar -------------------------------------------------------------------------------- /examples/food-simulation/lib/jfreechart-1.0.8a.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/food-simulation/lib/jfreechart-1.0.8a.jar -------------------------------------------------------------------------------- /examples/food-simulation/src/asl/blind.asl: -------------------------------------------------------------------------------- 1 | /* -- blind agent -- */ 2 | 3 | // rule 1: If there is food in my cell, eat. 4 | +step(_) : food(X,Y,my_pos,_) <- eat. 5 | 6 | // rule 2: If I see food in a free cell, move to there 7 | +step(_) : food(X,Y,see,_) & not agent(_,X,Y,_,_) <- move(X,Y). 8 | 9 | // rule 3: If I see food in an occupied cell, attack the agent at that cell 10 | +step(_) : food(X,Y,see,_) & agent(_,X,Y,_,eating) <- attack(X,Y). 11 | 12 | // rule 4: If I smell food, move to there 13 | +step(_) : food(X,Y,smell,_) <- move(X,Y). 14 | 15 | // rule 5: Otherwise, do a random movement 16 | +step(_) <- random_move. 17 | -------------------------------------------------------------------------------- /examples/food-simulation/src/asl/strategic.asl: -------------------------------------------------------------------------------- 1 | /* -- strategic agent -- */ 2 | 3 | // food in my position 4 | +step(_) : food(X,Y,my_pos,_) <- eat. 5 | 6 | // food I see 7 | +step(_) : food(X,Y,see,_) & not agent(_,X,Y,_,_) <- move(X,Y). 8 | +step(_) : food(X,Y,see,_) & agent(_,X,Y,S,eating) & strength(MS) & MS > S <- attack(X,Y). 9 | 10 | // food I smell 11 | +step(_) : food(X,Y,smell,_) <- move(X,Y). 12 | 13 | // nothing else 14 | +step(_) <- random_move. 15 | -------------------------------------------------------------------------------- /examples/food-simulation/src/java/bb/list.java: -------------------------------------------------------------------------------- 1 | // Internal action code for project FoodSimulation 2 | 3 | package bb; 4 | 5 | import jason.asSemantics.*; 6 | import jason.asSyntax.*; 7 | import java.util.logging.*; 8 | 9 | /** list all BB */ 10 | public class list extends DefaultInternalAction { 11 | 12 | private Logger logger = Logger.getLogger("FoodSimulation."+list.class.getName()); 13 | 14 | @Override 15 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 16 | try { 17 | String s = " ."; 18 | for (Literal l: ts.getAg().getBB()) { 19 | s += l + " "; 20 | } 21 | logger.info(s); 22 | return true; 23 | } catch (Exception e) { 24 | logger.warning("Error in internal action 'bb.list'! "+e); 25 | } 26 | return false; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /examples/game-of-life/cell.asl: -------------------------------------------------------------------------------- 1 | // Agent cell in project game-of-life.mas2j 2 | 3 | /* Plans */ 4 | 5 | // If there are 2 alive neighbors, the cell remains in the state it is in. 6 | +step(_) : alive_neighbors(2) <- skip. 7 | 8 | // If there are exactly three alive neighbors, the cell becomes alive. 9 | +step(_) : alive_neighbors(3) <- live. 10 | 11 | // If there are less than two alive neighbors, then the cell dies. 12 | // If there are more than three alive neighbors, the cell dies. 13 | +step(_) <- die. 14 | -------------------------------------------------------------------------------- /examples/game-of-life/game-of-life.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Project 2 | 3 | -- Game of Life -- 4 | 5 | based on the description available at 6 | http://ccl.northwestern.edu/netlogo/models/Life 7 | 8 | */ 9 | 10 | MAS game_of_life { 11 | 12 | // use a thread pool instead of one thread by agent 13 | // the pool has only four threads 14 | infrastructure: Local(pool,4) 15 | 16 | environment: LifeEnvironment(100,10) // grid size = 100, initial density = 10% 17 | 18 | agents: 19 | cell [verbose=0] 20 | #10000; // a 100x100 grid has 10,000 agents 21 | 22 | } 23 | -------------------------------------------------------------------------------- /examples/gold-miners-II/asl/goals.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/gold-miners-II/asl/goals.pdf -------------------------------------------------------------------------------- /examples/gold-miners-II/asl/search_unvisited.asl: -------------------------------------------------------------------------------- 1 | // find gold by going to the near least unvisited location 2 | 3 | +!search_gold(near_unvisited) 4 | : pos(X,Y,_) & free & 5 | jia.near_least_visited(X,Y,ToX,ToY) 6 | <- !pos(ToX,ToY); 7 | !!search_gold(near_unvisited). 8 | 9 | +!search_gold(near_unvisited) : free 10 | <- !!search_gold(near_unvisited). 11 | 12 | -!search_gold(near_unvisited) 13 | <- !!choose_goal. 14 | 15 | @lfg[atomic] 16 | -free 17 | : .desire(search_gold(_)) 18 | <- .print("Dropping search_gold desires and intentions to handle gold"); 19 | .drop_desire(search_gold(_)). 20 | 21 | -------------------------------------------------------------------------------- /examples/gold-miners-II/lib/search.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/gold-miners-II/lib/search.jar -------------------------------------------------------------------------------- /examples/gold-miners/doc/cc-jason-lncs.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/gold-miners/doc/cc-jason-lncs.pdf -------------------------------------------------------------------------------- /examples/gold-miners/doc/leader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/gold-miners/doc/leader.png -------------------------------------------------------------------------------- /examples/gold-miners/doc/miner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/gold-miners/doc/miner.png -------------------------------------------------------------------------------- /examples/gold-miners/doc/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/gold-miners/doc/overview.png -------------------------------------------------------------------------------- /examples/gold-miners/jasonTeam.mas2j: -------------------------------------------------------------------------------- 1 | /* Minig Robots based on Jason Team for Clima Contest VII 2006 2 | * (http://cig.in.tu-clausthal.de/CLIMAContest) 3 | * 4 | */ 5 | 6 | MAS miners { 7 | 8 | environment: mining.MiningPlanet(3,50,yes) 9 | // parameters: 1. environment configuration id (from 1 to 3) 10 | // 2. sleep time (in ms) after each action 11 | // 3. whether display the gui 12 | 13 | agents: 14 | leader; 15 | miner #4; 16 | } 17 | -------------------------------------------------------------------------------- /examples/gold-miners/lib/search.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/gold-miners/lib/search.jar -------------------------------------------------------------------------------- /examples/iterated-prisoners-dilemma/ipd.mas2j: -------------------------------------------------------------------------------- 1 | /* Jason Project */ 2 | 3 | MAS ipd { 4 | 5 | agents: arbitrer; playerTFT #3; playerAllD #3; playerAllC #3; 6 | } 7 | -------------------------------------------------------------------------------- /examples/iterated-prisoners-dilemma/lib/jcommon-1.0.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/iterated-prisoners-dilemma/lib/jcommon-1.0.12.jar -------------------------------------------------------------------------------- /examples/iterated-prisoners-dilemma/lib/jfreechart-1.0.8a.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/iterated-prisoners-dilemma/lib/jfreechart-1.0.8a.jar -------------------------------------------------------------------------------- /examples/iterated-prisoners-dilemma/pd_payoffs.asl: -------------------------------------------------------------------------------- 1 | // Used by both agents 2 | 3 | // Knowledge of the PD payoff matrix 4 | payoffs(c,d,0,5). // temptation to deffect = 5 and ... 5 | payoffs(d,c,5,0). // ... sucker's payoff = 0 6 | payoffs(c,c,3,3). // reward for mutual cooperation = 3 7 | payoffs(d,d,2,2). // punishment for mutual defect = 2 8 | 9 | /* format: payoff(move_ag1,move_ag2,score_ag1,score_ag2) */ 10 | 11 | -------------------------------------------------------------------------------- /examples/iterated-prisoners-dilemma/playerAllC.asl: -------------------------------------------------------------------------------- 1 | /*** I'm a player... ***/ 2 | 3 | { include("player.asl") } 4 | 5 | /*** ... and my strategy is ... ***/ 6 | 7 | // AllC: 8 | // I always play c 9 | +arrested(T,O)[source(arbitrer)] 10 | : true 11 | <- .send(arbitrer, tell, play(T,c)); 12 | .print("I played c, as always, against ",O," at time ",T). 13 | 14 | // I don't need records 15 | +!take_records(T,O,M). 16 | 17 | -------------------------------------------------------------------------------- /examples/iterated-prisoners-dilemma/playerAllD.asl: -------------------------------------------------------------------------------- 1 | /*** I'm a player... ***/ 2 | 3 | { include("player.asl") } 4 | 5 | /*** ... and my strategy is ... ***/ 6 | 7 | // AllD: 8 | // I always play d 9 | +arrested(T,O)[source(arbitrer)] 10 | : true 11 | <- .send(arbitrer, tell, play(T,d)); 12 | .print("I played d, as always, against ",O," at time ",T). 13 | 14 | // I don't need records 15 | +!take_records(T,O,M). 16 | 17 | -------------------------------------------------------------------------------- /examples/iterated-prisoners-dilemma/playerTFT.asl: -------------------------------------------------------------------------------- 1 | /*** I'm a player... ***/ 2 | 3 | {include("player.asl")} 4 | 5 | /*** ... who needs to remember the oponent's last move ... ***/ 6 | 7 | @records[atomic] 8 | +!take_records(T,O,M) 9 | : true 10 | <- -last_move(O,_); // NB: cannot use -+ here! 11 | +last_move(O,M). 12 | 13 | /*** ... as my strategy is ... ***/ 14 | 15 | // TFT: 16 | // (1) play oponent's last move 17 | +arrested(T,O)[source(arbitrer)] 18 | : last_move(O,LM) 19 | <- .send(arbitrer, tell, play(T,LM)); 20 | .print("I played ",LM," against ",O," at time ",T). 21 | 22 | // (2) be nice the first time you meet someone 23 | +arrested(T,O)[source(arbitrer)] 24 | : true 25 | <- .send(arbitrer, tell, play(T,c)); 26 | .print("I played c against ",O," at time ",T). 27 | 28 | -------------------------------------------------------------------------------- /examples/mining-robots/builder.asl: -------------------------------------------------------------------------------- 1 | // Beliefs 2 | resource_needed(1). 3 | 4 | // Plans 5 | 6 | // a resource has been dropped at site so build site further 7 | // using that resource 8 | //@pnr[breakpoint] 9 | +new_resource(R,ID) : resource_needed(R) 10 | <- build_using(R,ID). 11 | 12 | // a resource is not needed any more, inform collectors 13 | // to search for another resource 14 | +enough(R): true 15 | <- -resource_needed(R); 16 | +resource_needed(R+1); 17 | .broadcast(achieve, search_for(R+1)). 18 | 19 | // just tell collectors that I finished the building 20 | +building_finished: true 21 | <- .broadcast(tell,building_finished). 22 | 23 | -------------------------------------------------------------------------------- /examples/mining-robots/env/PlanetCell.java: -------------------------------------------------------------------------------- 1 | package env; 2 | 3 | public class PlanetCell { 4 | 5 | public PlanetCell() { 6 | 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /examples/mining-robots/env/Resource.java: -------------------------------------------------------------------------------- 1 | package env; 2 | 3 | public class Resource extends PlanetCell { 4 | 5 | private final int type; 6 | private int amount; 7 | 8 | public Resource(int t, int am) { 9 | 10 | type = t; 11 | amount = am; 12 | 13 | } 14 | 15 | public int getType() { 16 | 17 | return type; 18 | 19 | } 20 | 21 | public int getAmount() { 22 | 23 | return amount; 24 | 25 | } 26 | 27 | public void mine() { 28 | 29 | amount--; 30 | 31 | } 32 | 33 | public boolean depleted() { 34 | 35 | return amount < 1; 36 | 37 | } 38 | 39 | } 40 | 41 | -------------------------------------------------------------------------------- /examples/mining-robots/resourceCollection.mas2j: -------------------------------------------------------------------------------- 1 | MAS resourceCollection { 2 | environment: env.planetEnv 3 | 4 | agents: 5 | col #3; 6 | builder; 7 | } 8 | -------------------------------------------------------------------------------- /examples/room/Room.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | In this system, two agents are inside a room and 3 | one agent (the claustrophobe) wants to maintain 4 | the door always unlocked, while another (the paranoid) 5 | wants to maintain it locked! 6 | 7 | The porter is the agent that is capable to (un)lock 8 | the door (i.e., to act in the environment). So other 9 | agents should ask him such services. 10 | 11 | A Prometheus specification is available in the doc folder. 12 | 13 | */ 14 | 15 | MAS room { 16 | 17 | environment: RoomEnv 18 | 19 | // synchronise the execution: an agent only 20 | // starts its next reasoning cycle when all others 21 | // have finished theirs. 22 | executionControl: jason.control.ExecutionControl 23 | 24 | agents: porter; claustrophobe; paranoid; 25 | } 26 | -------------------------------------------------------------------------------- /examples/room/claustrophobe.asl: -------------------------------------------------------------------------------- 1 | +locked(door) : true 2 | <- .send(porter,achieve,~locked(door)). // ask porter to unlock the door 3 | 4 | //-locked(door) : true 5 | // <- .print("Thanks for unlocking the door!"). 6 | 7 | -------------------------------------------------------------------------------- /examples/room/doc/Room.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/examples/room/doc/Room.png -------------------------------------------------------------------------------- /examples/room/paranoid.asl: -------------------------------------------------------------------------------- 1 | +~locked(door) : true 2 | <- .send(porter,achieve,locked(door)). // ask porter to lock the door 3 | 4 | //+locked(door) : true 5 | // <- .print("Thanks for locking the door!"). 6 | 7 | -------------------------------------------------------------------------------- /examples/room/porter.asl: -------------------------------------------------------------------------------- 1 | +!locked(door)[source(paranoid)] 2 | : ~locked(door) 3 | <- lock. 4 | 5 | +!~locked(door)[source(claustrophobe)] 6 | : locked(door) 7 | <- unlock. 8 | -------------------------------------------------------------------------------- /examples/sniffer/.gitignore: -------------------------------------------------------------------------------- 1 | log.* 2 | -------------------------------------------------------------------------------- /examples/sniffer/bob.asl: -------------------------------------------------------------------------------- 1 | !start. 2 | 3 | +!start : true 4 | <- .println("Sending tell vl(10)"); 5 | .send(maria, tell, vl(10)); 6 | 7 | .println("Sending achieve goto(10,2)"); 8 | .send(maria, achieve, goto(10,2)). 9 | 10 | -------------------------------------------------------------------------------- /examples/sniffer/maria.asl: -------------------------------------------------------------------------------- 1 | // Agent maria 2 | 3 | vl(1). 4 | vl(2). 5 | 6 | 7 | /* Plan triggered when an achieve message is received. 8 | It is like a new goal, but with a different source. 9 | */ 10 | +!goto(X,Y)[source(Ag)] : true 11 | <- .println("Received achieve ",goto(X,Y)," from ", Ag). 12 | 13 | -------------------------------------------------------------------------------- /examples/sniffer/monitor.asl: -------------------------------------------------------------------------------- 1 | // Agent monitor that just print the exchanged messages 2 | 3 | // msgSent beliefs are stored in a database 4 | 5 | +msg_sent(Time,Id,_Irt,_Ilf,Sender,Receiver,Content) 6 | <- .print("Message ",Id," from ",Sender," to ",Receiver," = ", Content, " at ", Time). 7 | -------------------------------------------------------------------------------- /examples/st-claus/jason_stclaus.mas2j: -------------------------------------------------------------------------------- 1 | MAS jason_stclaus { 2 | 3 | agents: 4 | santa; 5 | edna secretary.asl [beliefs="group_size(3,elf)"]; 6 | robin secretary.asl [beliefs="group_size(9,reindeer)"]; 7 | elf worker.asl [beliefs="kind(elf), secretary(edna)"] #10; 8 | reindeer worker.asl [beliefs="kind(reindeer), secretary(robin)"] #9; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /examples/st-claus/secretary.asl: -------------------------------------------------------------------------------- 1 | group([]). 2 | 3 | // handle messages from workers and form groups 4 | @liam1[atomic] 5 | +!iamhere[source(A)] : group_size(S,Kind) & group(Group) & .length(Group,S-1) 6 | <- -+group([]); 7 | .send(santa,achieve,group(Kind,[A|Group])). 8 | 9 | @liam2[atomic] 10 | +!iamhere[source(A)] : group(Group) 11 | <- -+group([A|Group]). 12 | 13 | -------------------------------------------------------------------------------- /examples/st-claus/worker.asl: -------------------------------------------------------------------------------- 1 | msg("Ho, ho, ho! Let's meet in the study!") :- kind(elf). 2 | msg("Ho, ho, ho! Let's deliver toys!") :- kind(reindeer). 3 | 4 | !start. // initial goal, notify my secretary that I am ready 5 | +!start : secretary(S) <- .send(S,achieve,iamhere). 6 | 7 | // do the job asked by St Claus 8 | +!proceed[source(A)] : msg(M) 9 | <- .print(M); 10 | .send(A,tell,done); 11 | .wait( math.random(20)+10 ); 12 | !!start. 13 | -------------------------------------------------------------------------------- /examples/water-jugs/readme.txt: -------------------------------------------------------------------------------- 1 | An solution for the Water Jugs problem inspired in the solution discussed in the SOAR tutorial https://soar.eecs.umich.edu/articles/downloads/soar-suite/228-soar-tutorial-9-6-0 2 | 3 | A version where the agent uses A* to find an optimal sequence of actions is also available. Change comments in .mas2j to select this version. 4 | -------------------------------------------------------------------------------- /examples/water-jugs/water_jugs.mas2j: -------------------------------------------------------------------------------- 1 | MAS water_jugs { 2 | 3 | environment: Jugs 4 | //environment: Jugs(view) // version with a simple animation of the operations 5 | 6 | agents: agent_simple; 7 | //agents: agent_a_star; 8 | } 9 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | jasonVersion=3.3.0 2 | groupId=io.github.jason-lang 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /jason-cli/examples/hello.jcli: -------------------------------------------------------------------------------- 1 | mas start 2 | 3 | # starts bob with a plan 4 | agent start bob { +hello[source(A)] <- .print("hello from ",A). } 5 | 6 | agent start alice 7 | agent run-as alice { .send(bob,tell,hello) } # alice executes the .send... 8 | 9 | echo 10 | echo "beliefs of Bob:" 11 | agent mind bob # show beliefs of bob 12 | -------------------------------------------------------------------------------- /jason-cli/examples/mind.jcli: -------------------------------------------------------------------------------- 1 | mas start --console 2 | agent start bob { 3 | p(1). p(2). 4 | !g. 5 | !g. 6 | +!g <- .wait(1000); !g. 7 | 8 | +hello[source(A)] <- .print("hello from ",A). 9 | } 10 | 11 | agent mind bob 12 | agent mind --no-beliefs --plans bob 13 | agent mind --no-beliefs --intentions bob 14 | 15 | mas stop --exit 16 | -------------------------------------------------------------------------------- /jason-cli/examples/status.jcli: -------------------------------------------------------------------------------- 1 | mas start --console --no-net 2 | agent start bob { 3 | p(1). p(2). 4 | !g. 5 | +!g <- .wait(1000); !g. 6 | 7 | +hello[source(A)] <- .print("hello from ",A). 8 | } 9 | echo 10 | echo "status of Bob:" 11 | agent status bob 12 | mas stop --exit 13 | -------------------------------------------------------------------------------- /jason-cli/src/main/java/jason/cli/agent/Agent.java: -------------------------------------------------------------------------------- 1 | package jason.cli.agent; 2 | 3 | import jason.cli.JasonCommands; 4 | import picocli.CommandLine; 5 | import picocli.CommandLine.Command; 6 | 7 | @Command( 8 | name = "agent", 9 | description = "commands to handle (running) agents", 10 | subcommands = { StartAgent.class, StopAgent.class, ListAgents.class, RunAsAgent.class, MindAgent.class, StatusAgent.class, LoadIntoAgent.class }, 11 | synopsisSubcommandLabel = "(start | stop | list | run-as | load-into | mind | status)" 12 | ) 13 | public class Agent { 14 | 15 | @CommandLine.ParentCommand 16 | protected JasonCommands parent; 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /jason-cli/src/main/java/jason/cli/app/Application.java: -------------------------------------------------------------------------------- 1 | package jason.cli.app; 2 | 3 | import jason.cli.JasonCommands; 4 | import picocli.CommandLine; 5 | import picocli.CommandLine.Command; 6 | 7 | @Command( 8 | name = "app", 9 | description = "commands to handle (the sources of) applications", 10 | subcommands = { Create.class, Compile.class, AddAgent.class, Gradle.class, AddInternalAction.class }, 11 | synopsisSubcommandLabel = "(create | compile | add-agent | add-gradle | add-ia )" 12 | ) 13 | public class Application { 14 | 15 | @CommandLine.ParentCommand 16 | protected JasonCommands parent; 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /jason-cli/src/main/java/jason/cli/mas/MAS.java: -------------------------------------------------------------------------------- 1 | package jason.cli.mas; 2 | 3 | import jason.cli.JasonCommands; 4 | import picocli.CommandLine; 5 | import picocli.CommandLine.Command; 6 | 7 | @Command( 8 | name = "mas", 9 | description = "commands to handle running Multi-Agent Systems", 10 | subcommands = { StartMAS.class, StopMAS.class, ListMAS.class }, 11 | synopsisSubcommandLabel = "(start | stop | list)" 12 | ) 13 | public class MAS { 14 | 15 | @CommandLine.ParentCommand 16 | protected JasonCommands parent; 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /jason-cli/src/main/resources/scripts/create-bin.sh: -------------------------------------------------------------------------------- 1 | # Append a basic launcher script to the jar 2 | 3 | echo '#!/bin/sh' > x 4 | echo 'exec java -jar $0 $@' >> x 5 | echo 'echo "exit 0"' >> x 6 | 7 | cat x $1 > jason 8 | 9 | # Make the new jar executable 10 | chmod +x jason 11 | 12 | #echo "jason executable created" 13 | rm x 14 | -------------------------------------------------------------------------------- /jason-cli/src/main/resources/scripts/jason.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CURDIR="`pwd`" 4 | P=`which "$0"` 5 | JASON_CLI_HOME="`dirname $P`" 6 | cd $JASON_CLI_HOME 7 | JASON_CLI_HOME="`pwd`" 8 | #echo "JASON_CLI_HOME is $JASON_CLI_HOME" 9 | cd "$CURDIR" 10 | 11 | # add uberJar and others in classpath 12 | java -cp ".:build/classes/java/main:$JASON_CLI_HOME/*" jason.infra.local.RunLocalMAS $* 13 | -------------------------------------------------------------------------------- /jason-cli/src/test/jason/hello.asl: -------------------------------------------------------------------------------- 1 | !start. 2 | +!start : true <- .print("hello world."). 3 | -------------------------------------------------------------------------------- /jason-cli/src/test/jason/plan.asl: -------------------------------------------------------------------------------- 1 | +!a <- +b; .println("hello!"). 2 | -------------------------------------------------------------------------------- /jason-cli/src/test/test-hotswap.jcli: -------------------------------------------------------------------------------- 1 | mas start --console 2 | agent start bob --source-id=s1 { 3 | +!g <- .print(g); .wait(500); !g. 4 | } 5 | agent mind bob --plans 6 | 7 | agent run-as bob { !g; } 8 | 9 | wait 4000 10 | 11 | echo "==========================" 12 | echo "changing the plan library!" 13 | 14 | agent load-into bob --source-id=s1 { 15 | +!g <- .print(newg); .wait(200); !g. 16 | } 17 | agent mind bob --plans 18 | 19 | wait 4000 20 | mas stop --exit 21 | -------------------------------------------------------------------------------- /jason-cli/src/test/test-loadinto.jcli: -------------------------------------------------------------------------------- 1 | mas start --console --no-net 2 | 3 | agent start bob 4 | agent load-into bob --source=src/test/jason/plan.asl { +c <- +d; .print("new belief c!"). } 5 | agent run-as bob { +c; !a; } 6 | 7 | wait 2000 8 | echo "Bob beliefs and plans:" 9 | agent mind --intentions --plans bob 10 | 11 | mas stop --exit 12 | -------------------------------------------------------------------------------- /jason-cli/src/test/test-runas.jcli: -------------------------------------------------------------------------------- 1 | mas start --console --no-net 2 | 3 | #agent start --source=src/test/jason/plan.asl bob 4 | agent start bob { +!a <- +b; .println("***** hello *****"). } 5 | agent run-as bob { +c; !a; } 6 | 7 | wait 2000 8 | echo "Bob beliefs and plans:" 9 | agent mind --intentions --plans bob 10 | 11 | mas stop --exit 12 | -------------------------------------------------------------------------------- /jason-cli/src/test/water-jugs/run.jcli: -------------------------------------------------------------------------------- 1 | app compile 2 | mas start --env=Jugs --no-net --console 3 | agent start ag1 --source=agent_a_star.asl 4 | wait 1000 5 | mas stop --exit 6 | -------------------------------------------------------------------------------- /jason-cli/src/test/water-jugs/run2.jcli: -------------------------------------------------------------------------------- 1 | app compile 2 | mas start --mas2j=water_jugs.mas2j --console --no-net 3 | wait 1000 4 | mas stop --exit 5 | -------------------------------------------------------------------------------- /jason-cli/src/test/water-jugs/water_jugs.mas2j: -------------------------------------------------------------------------------- 1 | MAS water_jugs { 2 | 3 | environment: Jugs 4 | //environment: Jugs(view) // version with a simple animation of the operations 5 | 6 | agents: agent_a_star; 7 | } 8 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/NoValueException.java: -------------------------------------------------------------------------------- 1 | package jason; 2 | 3 | 4 | public class NoValueException extends JasonException { 5 | 6 | private static final long serialVersionUID = 1L; 7 | 8 | public NoValueException() { 9 | } 10 | 11 | public NoValueException(String msg) { 12 | super(msg); 13 | } 14 | 15 | public NoValueException(String msg, Exception cause) { 16 | super(msg); 17 | initCause(cause); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/ReceiverNotFoundException.java: -------------------------------------------------------------------------------- 1 | package jason; 2 | 3 | import jason.asSyntax.ASSyntax; 4 | import jason.asSyntax.Atom; 5 | import jason.asSyntax.Term; 6 | 7 | public class ReceiverNotFoundException extends JasonException { 8 | 9 | private static final long serialVersionUID = 1L; 10 | 11 | public static final Term RNF = new Atom("receiver_not_found"); 12 | 13 | public ReceiverNotFoundException() { 14 | } 15 | 16 | public ReceiverNotFoundException(String msg) { 17 | super(msg, RNF); 18 | } 19 | 20 | public ReceiverNotFoundException(String msg, String agNotFound) { 21 | super(msg, RNF); 22 | addErrorAnnot(ASSyntax.createStructure("agent_not_found", new Atom(agNotFound))); 23 | } 24 | 25 | public ReceiverNotFoundException(String msg, Exception cause) { 26 | super(msg, RNF); 27 | initCause(cause); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/RevisionFailedException.java: -------------------------------------------------------------------------------- 1 | package jason; 2 | 3 | public class RevisionFailedException extends JasonException { 4 | 5 | public RevisionFailedException() { 6 | } 7 | 8 | public RevisionFailedException(String msg) { 9 | super(msg); 10 | } 11 | 12 | public RevisionFailedException(String msg, Exception cause) { 13 | super(msg); 14 | initCause(cause); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSemantics/ArithFunction.java: -------------------------------------------------------------------------------- 1 | package jason.asSemantics; 2 | 3 | import jason.asSyntax.Term; 4 | 5 | /** 6 | * Common interface for all arithmetic functions 7 | * 8 | * @author Jomi 9 | * 10 | */ 11 | public interface ArithFunction { 12 | 13 | /** returns the name of the function */ 14 | public String getName(); 15 | 16 | /** evaluates/computes the function based on the args */ 17 | public double evaluate(TransitionSystem ts, Term[] args) throws Exception ; 18 | 19 | /** returns true if a is a good number of arguments for the function */ 20 | public boolean checkArity(int a); 21 | 22 | /** returns true if the arguments of the function can be unground (as in .count) */ 23 | public boolean allowUngroundTerms(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSemantics/CircumstanceListener.java: -------------------------------------------------------------------------------- 1 | package jason.asSemantics; 2 | 3 | import java.io.Serializable; 4 | 5 | import jason.asSyntax.Term; 6 | import jason.asSyntax.Trigger; 7 | 8 | public interface CircumstanceListener extends Serializable { 9 | public default void eventAdded(Event e) {}; 10 | public default void intentionAdded(Intention i) {}; 11 | public default void intentionDropped(Intention i) {}; 12 | public default void intentionSuspended(Trigger t, Intention i, Term reason) {}; 13 | public default void intentionWaiting(Intention i, Term reason) {}; 14 | public default void intentionResumed(Intention i, Term reason) {}; 15 | public default void intentionExecuting(Intention i, Term reason) {}; 16 | } 17 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSemantics/IMCondition.java: -------------------------------------------------------------------------------- 1 | package jason.asSemantics; 2 | 3 | import java.io.Serializable; 4 | 5 | import jason.asSyntax.Trigger; 6 | 7 | /** 8 | * Used to generalise dropIM (in Intention) 9 | * 10 | * @author jomi 11 | */ 12 | public abstract class IMCondition implements Serializable { 13 | public boolean test(IntendedMeans im, Unifier u) { 14 | return test(im.getTrigger(),u); 15 | } 16 | public abstract boolean test(Trigger t, Unifier u); 17 | public abstract Trigger getTrigger(); 18 | } 19 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSemantics/NoOptionException.java: -------------------------------------------------------------------------------- 1 | package jason.asSemantics; 2 | 3 | import jason.JasonException; 4 | import jason.asSyntax.*; 5 | 6 | /** no option from selectOption function */ 7 | public class NoOptionException extends JasonException { 8 | 9 | /** 10 | * Constructs an instance of JasonException with the specified detail message 11 | * and error description term. 12 | * 13 | * @param msg the detail message. 14 | * @param error the term that details (in AgentSpeak) the error 15 | */ 16 | public NoOptionException(String msg, Term error) { 17 | super(msg, error); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSyntax/LogicalFormula.java: -------------------------------------------------------------------------------- 1 | package jason.asSyntax; 2 | 3 | import jason.asSemantics.Agent; 4 | import jason.asSemantics.Unifier; 5 | 6 | import java.util.Iterator; 7 | 8 | /** 9 | * Represents a logical formula (p, p & q, not p, 3 > X, ...) which can be 10 | * evaluated into a truth value. 11 | * 12 | * @opt nodefillcolor lightgoldenrodyellow 13 | * 14 | * @author Jomi 15 | */ 16 | public interface LogicalFormula extends Term, Cloneable { 17 | /** 18 | * Checks whether the formula is a 19 | * logical consequence of the belief base. 20 | * 21 | * Returns an iterator for all unifiers that are consequence. 22 | */ 23 | public Iterator logicalConsequence(Agent ag, Unifier un); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSyntax/MapTerm.java: -------------------------------------------------------------------------------- 1 | package jason.asSyntax; 2 | 3 | import java.util.Collection; 4 | import java.util.Set; 5 | 6 | /** 7 | * The interface for maps in the AgentSpeak language 8 | * 9 | * @author Jomi 10 | */ 11 | public interface MapTerm extends Term { 12 | public int size(); 13 | public void clear(); 14 | public Term get(Term k); 15 | public void put(Term k, Term v); 16 | public Term remove(Term k); 17 | public Set keys(); 18 | public Collection values(); 19 | public MapTerm deepClone(); 20 | } 21 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSyntax/NumberTerm.java: -------------------------------------------------------------------------------- 1 | package jason.asSyntax; 2 | 3 | import jason.NoValueException; 4 | 5 | 6 | /** The interface for numeric terms of AgentSpeak language 7 | * 8 | * @opt nodefillcolor lightgoldenrodyellow 9 | */ 10 | public interface NumberTerm extends Term { 11 | 12 | /** returns the numeric value of the term */ 13 | public double solve() throws NoValueException; 14 | } 15 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSyntax/ObjectTerm.java: -------------------------------------------------------------------------------- 1 | package jason.asSyntax; 2 | 3 | /** Interface for terms that encapsulate java objects 4 | * 5 | * @opt nodefillcolor lightgoldenrodyellow 6 | */ 7 | public interface ObjectTerm extends Term { 8 | public Object getObject(); 9 | } 10 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSyntax/SetTerm.java: -------------------------------------------------------------------------------- 1 | package jason.asSyntax; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * The interface for sets in the AgentSpeak language 7 | * 8 | * @author Jomi 9 | */ 10 | public interface SetTerm extends Term, Collection, Iterable { 11 | public void union(Iterable lt); 12 | public void intersection(Collection lt); 13 | public void difference(Collection lt); 14 | 15 | public ListTerm getAsListTerm(); 16 | public SetTerm deepClone(); 17 | } 18 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSyntax/StringTerm.java: -------------------------------------------------------------------------------- 1 | package jason.asSyntax; 2 | 3 | /** The interface for string terms of the AgentSpeak language 4 | * 5 | * @opt nodefillcolor lightgoldenrodyellow 6 | */ 7 | public interface StringTerm extends Term { 8 | /** gets the Java string represented by this term, it 9 | normally does not return the same string as toString 10 | (which enclose the string by quotes) */ 11 | public String getString(); 12 | public int length(); 13 | } 14 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/asSyntax/directives/DefaultDirective.java: -------------------------------------------------------------------------------- 1 | package jason.asSyntax.directives; 2 | 3 | import jason.asSemantics.Agent; 4 | import jason.asSyntax.Pred; 5 | import jason.asSyntax.parser.as2j; 6 | 7 | public abstract class DefaultDirective implements Directive { 8 | 9 | @Override 10 | public boolean isSingleton() { 11 | return true; 12 | } 13 | 14 | public void begin(Pred directive, as2j parser) { 15 | } 16 | 17 | public Agent process(Pred directive, Agent outerContent, Agent innerContent) { 18 | return innerContent; 19 | } 20 | 21 | public void end(Pred directive, as2j parser) { 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/functions/e.java: -------------------------------------------------------------------------------- 1 | package jason.functions; 2 | 3 | import jason.asSemantics.DefaultArithFunction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSyntax.Term; 6 | 7 | /** 8 |

Function: math.e: encapsulates java Math.E. 9 | 10 |

Example:

    11 |
  • math.e: returns 2.718.
  • 12 |
13 | 14 | @author Jomi 15 | */ 16 | public class e extends DefaultArithFunction { 17 | 18 | public String getName() { 19 | return "math.e"; 20 | } 21 | 22 | @Override 23 | public double evaluate(TransitionSystem ts, Term[] args) throws Exception { 24 | return Math.E; 25 | } 26 | 27 | @Override 28 | public boolean checkArity(int a) { 29 | return a == 0; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/functions/pi.java: -------------------------------------------------------------------------------- 1 | package jason.functions; 2 | 3 | import jason.asSemantics.DefaultArithFunction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSyntax.Term; 6 | 7 | /** 8 |

Function: math.pi: encapsulates java Math.PI. 9 | 10 |

Example:

    11 |
  • math.pi: returns 3.14.
  • 12 |
13 | 14 | @author Jomi 15 | */ 16 | public class pi extends DefaultArithFunction { 17 | 18 | public String getName() { 19 | return "math.pi"; 20 | } 21 | 22 | @Override 23 | public double evaluate(TransitionSystem ts, Term[] args) throws Exception { 24 | return Math.PI; 25 | } 26 | 27 | @Override 28 | public boolean checkArity(int a) { 29 | return a == 0; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/functions/time.java: -------------------------------------------------------------------------------- 1 | package jason.functions; 2 | 3 | import jason.asSemantics.DefaultArithFunction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSyntax.Term; 6 | 7 | /** 8 |

Function: system.time: encapsulates java System.currentTimeMillis(), 9 | returns the current time in milliseconds. 10 | 11 | @see jason.stdlib.time internal action time 12 | 13 | @author Jomi 14 | */ 15 | public class time extends DefaultArithFunction { 16 | 17 | public String getName() { 18 | return "system.time"; 19 | } 20 | 21 | @Override 22 | public double evaluate(TransitionSystem ts, Term[] args) throws Exception { 23 | return System.currentTimeMillis(); 24 | } 25 | 26 | @Override 27 | public boolean checkArity(int a) { 28 | return a == 0; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/infra/components/AgentComponent.java: -------------------------------------------------------------------------------- 1 | package jason.infra.components; 2 | 3 | import jason.infra.local.LocalAgArchAsynchronous; 4 | 5 | public abstract class AgentComponent implements Runnable { 6 | protected LocalAgArchAsynchronous ag; 7 | protected boolean inQueue = true; 8 | protected boolean sleeping = false; 9 | 10 | public AgentComponent(LocalAgArchAsynchronous ag) { 11 | this.ag = ag; 12 | } 13 | 14 | public void sleep() { 15 | sleeping = true; 16 | } 17 | 18 | public boolean isSleeping() { 19 | return sleeping; 20 | } 21 | 22 | public abstract void wakeUp(); 23 | public abstract void enqueueExecutor(boolean ts); 24 | public abstract boolean canSleep(); 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/infra/jade/ContainerAllocation.java: -------------------------------------------------------------------------------- 1 | package jason.infra.jade; 2 | 3 | import jason.mas2j.MAS2JProject; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * This interface has to be implemented by classes that 9 | * customises the agent allocation to containers/hosts in 10 | * the JADE infrastructure 11 | * 12 | * @author Jomi 13 | */ 14 | public interface ContainerAllocation { 15 | public void init(String[] args, MAS2JProject project); 16 | public List getContainers(); 17 | public String allocateAgent(String agentName); 18 | } 19 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/infra/local/MsgListener.java: -------------------------------------------------------------------------------- 1 | package jason.infra.local; 2 | 3 | import jason.asSemantics.*; 4 | 5 | /** 6 | * Interface for objects that want to listen sent messages in 7 | * Local architecture. 8 | * 9 | * @author Jomi 10 | */ 11 | public interface MsgListener { 12 | public void msgSent(Message m); 13 | } 14 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/infra/local/RConf.java: -------------------------------------------------------------------------------- 1 | package jason.infra.local; 2 | 3 | /** configuration values for agent execution model (threads, pools, synch, asynch,...) */ 4 | public enum RConf { 5 | THREADED("threaded"), 6 | POOL_SYNCH("pool"), 7 | POOL_SYNCH_SCHEDULED("synch_scheduled"), 8 | ASYNCH("asynch"), 9 | ASYNCH_SHARED_POOLS("asynch_shared"); 10 | 11 | private String text; 12 | 13 | RConf(String text) { 14 | this.text = text; 15 | } 16 | 17 | public String toString() { 18 | return text; 19 | } 20 | 21 | public static RConf fromString(String text) { 22 | if (text != null) { 23 | for (RConf b : RConf.values()) { 24 | if (text.equalsIgnoreCase(b.text)) { 25 | return b; 26 | } 27 | } 28 | } 29 | return RConf.THREADED; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/infra/local/RunLocalMASMBean.java: -------------------------------------------------------------------------------- 1 | package jason.infra.local; 2 | 3 | public interface RunLocalMASMBean { 4 | public int getNbAgents(); 5 | public boolean killAg(String agName); 6 | public void finish(int deadline, boolean stopJVM, int exitValue); 7 | } 8 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/pl/PlanLibraryListener.java: -------------------------------------------------------------------------------- 1 | package jason.pl; 2 | 3 | import jason.asSyntax.Plan; 4 | 5 | import java.io.Serializable; 6 | 7 | /** call-back interface to be notified about events on plabs */ 8 | public interface PlanLibraryListener extends Serializable { 9 | 10 | public void planAdded(Plan p); 11 | public void planRemoved(Plan p); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/runtime/RuntimeServicesFactory.java: -------------------------------------------------------------------------------- 1 | package jason.runtime; 2 | 3 | public class RuntimeServicesFactory { 4 | static private RuntimeServices singleton = null; 5 | static public void set(RuntimeServices s) { 6 | singleton = s; 7 | } 8 | static public RuntimeServices get() { return singleton; } 9 | } 10 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/Manual.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Target; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Documented; 8 | 9 | /** Manual for internal actions */ 10 | @Target(ElementType.TYPE) //on class level 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Documented 13 | public @interface Manual { 14 | String hint() default "no hint"; 15 | String literal() default "noliteral(a,b,c)"; 16 | String[] argsHint() default ""; 17 | String[] argsType() default ""; 18 | String[] examples() default ""; 19 | String[] seeAlso() default ""; 20 | } 21 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/map/clear.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.map; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class clear extends put { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new clear(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | getMap(un,args).clear(); 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/map/copy.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.map; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class copy extends put { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new copy(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | return un.unifies(getMap(un,args).deepClone(), args[1]); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/map/create.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.map; 2 | 3 | import jason.asSemantics.DefaultInternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.MapTermImpl; 7 | import jason.asSyntax.Term; 8 | 9 | 10 | public class create extends DefaultInternalAction { 11 | 12 | @Override 13 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 14 | if (args[0].isVar()) { 15 | return un.unifies(args[0], new MapTermImpl()); 16 | } else { 17 | return false; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/map/get.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.map; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class get extends put { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new get(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | Term v = getMap(un,args).get(args[1]); 21 | if (v == null) { 22 | if (args.length == 4) 23 | return un.unifies(args[2], args[3]); 24 | else 25 | return false; 26 | } else { 27 | return un.unifies(args[2], v); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/map/remove.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.map; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class remove extends put { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new remove(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | Term v = getMap(un,args).remove(args[1]); 21 | if (v == null) 22 | return false; 23 | else 24 | return un.unifies(args[2], v); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/map/value.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.map; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class value extends key { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new value(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | return getIterator(args[1], getMap(un,args).values().iterator(), un); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/print_unifier.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib; 2 | 3 | import jason.asSemantics.DefaultInternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | import jason.asSyntax.VarTerm; 8 | 9 | public class print_unifier extends DefaultInternalAction { 10 | 11 | @Override public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 12 | for (VarTerm v : un) { 13 | //if (! v.getFunctor().equals("Cmd__TR")) 14 | ts.getLogger().info(v+"="+un.get(v)); 15 | } 16 | ts.getLogger().info("done"); 17 | return true; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/queue/add.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.queue; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class add extends create { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new add(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | return getQueue(un, args).offer(args[1]); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/queue/add_all.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.queue; 2 | 3 | import java.util.Queue; 4 | 5 | import jason.asSemantics.InternalAction; 6 | import jason.asSemantics.TransitionSystem; 7 | import jason.asSemantics.Unifier; 8 | import jason.asSyntax.ListTerm; 9 | import jason.asSyntax.Term; 10 | 11 | 12 | public class add_all extends create { 13 | 14 | private static InternalAction singleton = null; 15 | public static InternalAction create() { 16 | if (singleton == null) 17 | singleton = new add_all(); 18 | return singleton; 19 | } 20 | 21 | @Override 22 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 23 | Queue q = getQueue(un, args); 24 | for (Term t: (ListTerm)args[1]) { 25 | q.offer(t); 26 | } 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/queue/clear.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.queue; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class clear extends create { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new clear(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | getQueue(un, args).clear(); 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/queue/head.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.queue; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class head extends create { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new head(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | Term t = getQueue(un, args).peek(); 21 | if (t == null) { 22 | return false; 23 | } else { 24 | return un.unifies(args[1], t); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/queue/remove.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.queue; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class remove extends create { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new remove(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | Term t = getQueue(un, args).poll(); 21 | if (t == null) { 22 | return false; 23 | } else { 24 | return un.unifies(args[1], t); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/queue/to_list.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.queue; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.ListTerm; 7 | import jason.asSyntax.ListTermImpl; 8 | import jason.asSyntax.Term; 9 | 10 | 11 | public class to_list extends create { 12 | 13 | private static InternalAction singleton = null; 14 | public static InternalAction create() { 15 | if (singleton == null) 16 | singleton = new to_list(); 17 | return singleton; 18 | } 19 | 20 | @Override 21 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 22 | ListTerm result = new ListTermImpl(); 23 | ListTerm tail = result; 24 | for (Term t: getQueue(un, args)) 25 | tail = tail.append(t.clone()); 26 | return un.unifies(args[1], result); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/add_all.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import java.util.Collection; 4 | 5 | import jason.asSemantics.InternalAction; 6 | import jason.asSemantics.TransitionSystem; 7 | import jason.asSemantics.Unifier; 8 | import jason.asSyntax.SetTerm; 9 | import jason.asSyntax.Term; 10 | 11 | 12 | public class add_all extends add { 13 | 14 | private static InternalAction singleton = null; 15 | public static InternalAction create() { 16 | if (singleton == null) 17 | singleton = new add_all(); 18 | return singleton; 19 | } 20 | 21 | @Override 22 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 23 | SetTerm s = getSet(un, args); 24 | for (Term t: (Collection)args[1]) { 25 | s.add(t); 26 | } 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/clear.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class clear extends add { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new clear(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | getSet(un,args).clear(); 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/copy.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class copy extends add { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new copy(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | return un.unifies(getSet(un,args).deepClone(), args[1]); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/create.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import jason.asSemantics.DefaultInternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.SetTermImpl; 7 | import jason.asSyntax.Term; 8 | 9 | 10 | public class create extends DefaultInternalAction { 11 | 12 | @Override 13 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 14 | if (args[0].isVar()) { 15 | return un.unifies(args[0], new SetTermImpl()); 16 | } else { 17 | return false; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/difference.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import java.util.Collection; 4 | 5 | import jason.asSemantics.InternalAction; 6 | import jason.asSemantics.TransitionSystem; 7 | import jason.asSemantics.Unifier; 8 | import jason.asSyntax.Term; 9 | 10 | 11 | public class difference extends add { 12 | 13 | private static InternalAction singleton = null; 14 | public static InternalAction create() { 15 | if (singleton == null) 16 | singleton = new difference(); 17 | return singleton; 18 | } 19 | 20 | @Override 21 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 22 | getSet(un,args).difference((Collection)args[1]); 23 | return true; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/intersection.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import java.util.Collection; 4 | 5 | import jason.asSemantics.InternalAction; 6 | import jason.asSemantics.TransitionSystem; 7 | import jason.asSemantics.Unifier; 8 | import jason.asSyntax.Term; 9 | 10 | 11 | public class intersection extends add { 12 | 13 | private static InternalAction singleton = null; 14 | public static InternalAction create() { 15 | if (singleton == null) 16 | singleton = new intersection(); 17 | return singleton; 18 | } 19 | 20 | @Override 21 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 22 | getSet(un,args).intersection((Collection)args[1]); 23 | return true; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/remove.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class remove extends add { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new remove(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | getSet(un,args).remove(args[1]); 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/to_list.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | 8 | 9 | public class to_list extends add { 10 | 11 | private static InternalAction singleton = null; 12 | public static InternalAction create() { 13 | if (singleton == null) 14 | singleton = new to_list(); 15 | return singleton; 16 | } 17 | 18 | @Override 19 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 20 | return un.unifies( args[1], getSet(un,args).getAsListTerm() ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/stdlib/set/union.java: -------------------------------------------------------------------------------- 1 | package jason.stdlib.set; 2 | 3 | import java.util.Collection; 4 | 5 | import jason.asSemantics.InternalAction; 6 | import jason.asSemantics.TransitionSystem; 7 | import jason.asSemantics.Unifier; 8 | import jason.asSyntax.Term; 9 | 10 | 11 | public class union extends add { 12 | 13 | private static InternalAction singleton = null; 14 | public static InternalAction create() { 15 | if (singleton == null) 16 | singleton = new union(); 17 | return singleton; 18 | } 19 | 20 | @Override 21 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 22 | getSet(un,args).union((Collection)args[1]); 23 | return true; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/util/RunnableSerializable.java: -------------------------------------------------------------------------------- 1 | package jason.util; 2 | 3 | import java.io.Serializable; 4 | 5 | public interface RunnableSerializable extends Runnable, Serializable { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/util/ToDOM.java: -------------------------------------------------------------------------------- 1 | package jason.util; 2 | 3 | import org.w3c.dom.Document; 4 | import org.w3c.dom.Element; 5 | 6 | public interface ToDOM { 7 | public Element getAsDOM(Document document); 8 | } 9 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/java/jason/util/ToJson.java: -------------------------------------------------------------------------------- 1 | package jason.util; 2 | 3 | import java.io.StringWriter; 4 | import java.util.HashMap; 5 | 6 | import javax.json.Json; 7 | import javax.json.JsonObject; 8 | import javax.json.JsonValue; 9 | import javax.json.stream.JsonGenerator; 10 | 11 | public interface ToJson { 12 | 13 | public default String getAsJsonStr() { 14 | var config = new HashMap(); 15 | config.put(JsonGenerator.PRETTY_PRINTING, true); 16 | 17 | var jwf = Json.createWriterFactory(config); 18 | var sw = new StringWriter(); 19 | 20 | try (var jsonWriter = jwf.createWriter(sw)) { 21 | jsonWriter.write(getAsJson()); 22 | return sw.toString(); 23 | } 24 | } 25 | 26 | public JsonValue getAsJson(); 27 | } 28 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Active1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Active1.png -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Active2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Active2.png -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Active3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Active3.png -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Active4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Active4.png -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Blank.png -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Jason-GMoreau-Icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Jason-GMoreau-Icon.icns -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Jason-GMoreau-Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Jason-GMoreau-Icon.ico -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Jason-GMoreau-Icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Jason-GMoreau-Icon.jpg -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Jason-GMoreau-Small-Icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Jason-GMoreau-Small-Icon.jpg -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Jason-GMoreau-Small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Jason-GMoreau-Small.jpg -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/Jason-GMoreau.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/Jason-GMoreau.jpg -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/clear.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/clear.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/createEnv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/createEnv.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/createIA.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/createIA.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/debug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/debug.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/killAgent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/killAgent.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/list.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/list.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/new.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/new.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/newAgent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/newAgent.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/newProject.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/newProject.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/open.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/open.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/openProject.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/openProject.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/plan.png -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/resume_co.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/resume_co.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/run.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/run.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/save.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/save.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/saveAll.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/saveAll.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/startDebugger.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/startDebugger.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/images/suspend.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/main/resources/images/suspend.gif -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/pygments_init.rb: -------------------------------------------------------------------------------- 1 | require 'pygments' 2 | 3 | # use a custom Pygments installation (directory that contains pygmentize) 4 | Pygments.start ENV["PYGMENTS_PATH"] + '/..' 5 | 6 | # example of registering a missing or additional lexer 7 | Pygments::Lexer.create name: 'JasonAgent', aliases: ['jasonagent'], 8 | filenames: ['*.asl'], mimetypes: ['text/x-jason'] 9 | 10 | Pygments::Lexer.create name: 'JasonProject', aliases: ['jasonproject'], 11 | filenames: ['*.mas2j'], mimetypes: ['text/x-jasonproject'] 12 | 13 | Pygments::Lexer.create name: 'JaCaMoProject', aliases: ['jacamoproject'], 14 | filenames: ['*.jcm'], mimetypes: ['text/x-jacamoproject'] 15 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/templates/CArtAgOartifact: -------------------------------------------------------------------------------- 1 | // CArtAgO artifact code for project 2 | 3 | package ; 4 | 5 | import cartago.*; 6 | 7 | public class extends { 8 | void init(int initialValue) { 9 | defineObsProperty("count", initialValue); 10 | } 11 | 12 | @OPERATION 13 | void inc() { 14 | ObsProperty prop = getObsProperty("count"); 15 | prop.updateValue(prop.intValue()+1); 16 | signal("tick"); 17 | } 18 | 19 | @OPERATION 20 | void inc_get(int inc, OpFeedbackParam newValueArg) { 21 | ObsProperty prop = getObsProperty("count"); 22 | int newValue = prop.intValue()+inc; 23 | prop.updateValue(newValue); 24 | newValueArg.set(newValue); 25 | } 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/templates/agent: -------------------------------------------------------------------------------- 1 | // Agent in project 2 | 3 | /* Initial beliefs and rules */ 4 | 5 | /* Initial goals */ 6 | 7 | !start. 8 | 9 | /* Plans */ 10 | 11 | +!start : true <- .print("hello world."). 12 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/templates/ia: -------------------------------------------------------------------------------- 1 | // Internal action code for project 2 | 3 | package ; 4 | 5 | import jason.*; 6 | import jason.asSemantics.*; 7 | import jason.asSyntax.*; 8 | 9 | public class extends { 10 | 11 | @Override 12 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 13 | // execute the internal action 14 | ts.getAg().getLogger().info("executing internal action '.'"); 15 | if (true) { // just to show how to throw another kind of exception 16 | throw new JasonException("not implemented!"); 17 | } 18 | 19 | // everything ok, so returns true 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/templates/project: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | --------------------------- 4 | 5 | Jason Application File 6 | 7 | This file defines the initial state of the MAS 8 | 9 | Jason 10 | 11 | */ 12 | 13 | MAS { 14 | 15 | infrastructure: 16 | 17 | agents: 18 | } 19 | -------------------------------------------------------------------------------- /jason-interpreter/src/main/resources/templates/project2.mas2j: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | --------------------------- 4 | 5 | Jason Application File 6 | 7 | This file defines the initial state of the MAS 8 | 9 | Jason 10 | 11 | */ 12 | 13 | MAS { 14 | 15 | environment: example.Env(10) 16 | 17 | agents: bob; 18 | alice; 19 | 20 | aslSourcePath: "src/agt"; 21 | } 22 | -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/3.1/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | Gradle build file to create new Jason Applications 3 | based on Jason 3.0 4 | */ 5 | 6 | defaultTasks 'run' 7 | 8 | apply plugin: 'java' 9 | 10 | java { 11 | toolchain { 12 | languageVersion = JavaLanguageVersion.of(15) 13 | } 14 | } 15 | 16 | repositories { 17 | mavenCentral() 18 | maven { url "https://raw.githubusercontent.com/jacamo-lang/mvn-repo/master" } 19 | } 20 | 21 | dependencies { 22 | implementation('org.jason:jason:3.1') 23 | } 24 | 25 | task run (type: JavaExec, dependsOn: 'classes') { 26 | standardInput = System.in 27 | main = 'jason.util.CreateNewProject' 28 | args System.getProperty("exec.args", "").split() 29 | classpath sourceSets.main.runtimeClasspath 30 | } 31 | -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/3.1/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jason-lang/jason/ac3dc9190c0a69e4b0523b647f542cc62e9ba545/jason-interpreter/src/site/new-project-scripts/3.1/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/3.1/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/np24.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | Gradle build file to create new Jason Applications 3 | based on Jason 2.4 4 | */ 5 | 6 | defaultTasks 'run' 7 | 8 | apply plugin: 'java' 9 | 10 | repositories { 11 | mavenCentral() 12 | maven { url "http://jacamo.sourceforge.net/maven2" } 13 | maven { url "https://jade.tilab.com/maven/" } 14 | } 15 | 16 | dependencies { 17 | compile group: 'org.jason-lang', name: 'jason', version: '2.4' 18 | } 19 | 20 | task run (type: JavaExec, dependsOn: 'classes') { 21 | standardInput = System.in 22 | main = 'jason.util.CreateNewProject' 23 | args System.getProperty("exec.args", "").split() 24 | classpath sourceSets.main.runtimeClasspath 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/np26.gradle: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | Gradle build file to create new Jason Applications 4 | based on Jason 2.6 5 | */ 6 | 7 | defaultTasks 'run' 8 | 9 | apply plugin: 'java' 10 | 11 | repositories { 12 | mavenCentral() 13 | maven { url "https://raw.github.com/jacamo-lang/mvn-repo/master" } 14 | //maven { url "https://jade.tilab.com/maven/" } 15 | } 16 | 17 | dependencies { 18 | compile group: 'org.jason', name: 'jason', version: '2.6.3' 19 | } 20 | 21 | task run (type: JavaExec, dependsOn: 'classes') { 22 | standardInput = System.in 23 | main = 'jason.util.CreateNewProject' 24 | args System.getProperty("exec.args", "").split() 25 | classpath sourceSets.main.runtimeClasspath 26 | } 27 | -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/np30.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | Gradle build file to create new Jason Applications 3 | based on Jason 3.0 4 | */ 5 | 6 | defaultTasks 'run' 7 | 8 | apply plugin: 'java' 9 | 10 | repositories { 11 | mavenCentral() 12 | maven { url "https://raw.githubusercontent.com/jacamo-lang/mvn-repo/master" } 13 | } 14 | 15 | dependencies { 16 | compile group: 'org.jason', name: 'jason', version: '3.0-SNAPSHOT' 17 | } 18 | 19 | task run (type: JavaExec, dependsOn: 'classes') { 20 | standardInput = System.in 21 | main = 'jason.util.CreateNewProject' 22 | args System.getProperty("exec.args", "").split() 23 | classpath sourceSets.main.runtimeClasspath 24 | } 25 | -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/npss.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | Gradle build file to create new Jason Applications 3 | based on Jason SNAPSHOT version 4 | */ 5 | 6 | defaultTasks 'run' 7 | 8 | apply plugin: 'java' 9 | 10 | repositories { 11 | mavenCentral() 12 | maven { url "https://raw.githubusercontent.com/jacamo-lang/mvn-repo/master" } 13 | } 14 | 15 | dependencies { 16 | compile group: 'org.jason', name: 'jason', version: '3.0-SNAPSHOT' 17 | } 18 | 19 | task run (type: JavaExec, dependsOn: 'classes') { 20 | standardInput = System.in 21 | mainClass = 'jason.util.CreateNewProject' 22 | args System.getProperty("exec.args", "").split() 23 | classpath sourceSets.main.runtimeClasspath 24 | } 25 | -------------------------------------------------------------------------------- /jason-interpreter/src/site/new-project-scripts/publish.sh: -------------------------------------------------------------------------------- 1 | cd 3.1 2 | rm -rf .gradle 3 | zip -r ../np31.zip * 4 | cd .. 5 | 6 | scp np31.zip $USERSF,jason@web.sf.net:/home/project-web/jason/htdocs/np 7 | 8 | #scp *.zip $USERSF,jacamo@web.sf.net:/home/project-web/jacamo/htdocs/nps 9 | 10 | 11 | #scp np* $USERSF,jason@web.sf.net:/home/project-web/jason/htdocs/np 12 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/functions/random.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason functions 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_random 11 | <- 12 | !assert_equals(0.5, math.floor(math.random), 0.5); // The returned value is between 0 and 1, i.e., 0.5 +/- 0.5 13 | 14 | !assert_equals(5, math.floor(math.random(11)), 5); // The returned value is between 0 and 10, i.e., 5 +/- 5 15 | . 16 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/patterns/queueplan.asl: -------------------------------------------------------------------------------- 1 | { include("tester_agent.asl") } 2 | 3 | @[test] 4 | +!test_pattern_queue 5 | <- !e; 6 | .wait(500); 7 | !assert_equals( 6, .count(run(_))) 8 | . 9 | 10 | // the pattern 11 | 12 | +!e 13 | <- for ( .range(I,0,5)) { 14 | //.print(I); 15 | !!g(I); 16 | }. 17 | 18 | +!g(I) : not .intend(g(_)) 19 | <- +bel(I); 20 | .wait(50); 21 | !assert_equals( 1, .count(bel(_))); 22 | -bel(I); 23 | !assert_equals( 0, .count(bel(_))); 24 | +run(I); 25 | !!resume(g(_)). 26 | +!g(I) 27 | <- .suspend; 28 | !!g(I). 29 | +!resume(G) 30 | <- .resume(G). 31 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/patterns/singleton.asl: -------------------------------------------------------------------------------- 1 | { include("tester_agent.asl") } 2 | 3 | @[test] 4 | +!test_pattern_singleton 5 | <- !e; 6 | .wait(500); 7 | !assert_equals( 1, .count(bel(_))). 8 | 9 | // the pattern 10 | 11 | +!e 12 | <- for ( .range(I,0,5)) { 13 | !!g(I); 14 | }. 15 | 16 | +!g(I) : not .intend(g(_)) 17 | <- .wait(100); 18 | +bel(I). 19 | +!g(I). 20 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/atom.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_atom 11 | <- 12 | !assert_false( .atom(b(10)) ); 13 | !assert_true( .atom(b) ); 14 | !assert_false( .atom(~b) ); 15 | !assert_false( .atom(10) ); 16 | !assert_false( .atom("home page") ); 17 | !assert_false( .atom(X) ); 18 | 19 | Y = "a string"; 20 | !assert_false( .atom(Y) ); 21 | 22 | Z = atom; 23 | !assert_true( .atom(Z) ); 24 | 25 | !assert_false( .atom(a(X)) ); 26 | !assert_false( .atom(a[X]) ); 27 | !assert_false( .atom([a,b,c]) ); 28 | !assert_false( .atom([a,b,c(X)]) ); 29 | . 30 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/count.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_count 11 | <- 12 | 13 | .count(a(2,_),N1); 14 | !assert_equals(0,N1); 15 | 16 | +a(2,1); 17 | +a(2,6); 18 | +a(2,8); 19 | +a(2,10); 20 | +a(2,20); 21 | .count(a(2,_),N2); 22 | !assert_equals(5,N2); 23 | 24 | .count((a(2,X) & X>10),N3); 25 | !assert_equals(1,N3); 26 | 27 | !assert_true( .count(a(2,_),5) ); 28 | !assert_false( .count(a(2,_),6) ); 29 | . 30 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/current_intention.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @test_current_intention[test] 10 | +!test_current_intention 11 | <- 12 | .current_intention(intention(Id,[im(L,_,_,_)|_])); 13 | !assert_true(.substring(test_current_intention,L,0)); 14 | . 15 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/drop_all_desires.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[atomic,test] 10 | +!test_drop_all_desires 11 | <- 12 | /** 13 | * Add a mock plan for go(X,Y) 14 | */ 15 | .add_plan({ 16 | +!go(X,Y) <- 17 | .wait(50); // An arbitrary delay 18 | }, self, begin); 19 | 20 | // Trigger the mock plan to test desire 21 | !!go(1,3); 22 | !!go(2,3); 23 | !!go(2,4); 24 | !assert_true(.desire(go(1,3))); 25 | !assert_true(.desire(go(2,3))); 26 | !assert_true(.desire(go(2,4))); 27 | 28 | .drop_all_desires; 29 | 30 | !assert_false(.desire(go(1,3))); 31 | !assert_false(.desire(go(2,3))); 32 | !assert_false(.desire(go(2,4))); 33 | . 34 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/drop_all_events.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[atomic,test] 10 | +!test_drop_all_events 11 | <- 12 | /** 13 | * Add a mock plan for go(X,Y) 14 | */ 15 | .add_plan({ 16 | +!go(X,Y) <- 17 | .wait(10); // An arbitrary delay 18 | }, self, begin); 19 | 20 | // Trigger the mock plan to test desire 21 | !!go(1,3); 22 | !!go(2,3); 23 | !assert_true(.desire(go(1,3))); 24 | !assert_true(.desire(go(2,3))); 25 | 26 | .drop_all_events; 27 | 28 | !assert_false(.desire(go(1,3))); 29 | !assert_false(.desire(go(2,3))); 30 | . 31 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/drop_desire.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[atomic,test] 10 | +!test_drop_desire 11 | <- 12 | /** 13 | * Add a mock plan for go(X,Y) 14 | */ 15 | .add_plan({ 16 | +!go(X,Y) <- 17 | .wait(10); // An arbitrary delay 18 | }, self, begin); 19 | 20 | // Trigger the mock plan to test desire 21 | !!go(1,3); 22 | !!go(2,3); 23 | !!go(2,4); 24 | !assert_true(.desire(go(1,3))); 25 | !assert_true(.desire(go(2,3))); 26 | !assert_true(.desire(go(2,4))); 27 | 28 | .drop_desire(go(X,3)); 29 | 30 | !assert_false(.desire(go(1,3))); 31 | !assert_false(.desire(go(2,3))); 32 | !assert_true(.desire(go(2,4))); 33 | . 34 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/drop_event.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[atomic,test] 10 | +!test_drop_event 11 | <- 12 | /** 13 | * Add a mock plan for go(X,Y) 14 | */ 15 | .add_plan({ 16 | +!go(X,Y) <- 17 | .wait(10); // An arbitrary delay 18 | }, self, begin); 19 | 20 | // Trigger the mock plan to test desire 21 | !!go(1,3); 22 | !!go(2,3); 23 | !assert_true(.desire(go(1,3))); 24 | !assert_true(.desire(go(2,3))); 25 | 26 | .drop_event(go(1,3)); 27 | 28 | !assert_false(.desire(go(1,3))); 29 | !assert_true(.desire(go(2,3))); 30 | . 31 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/eval.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_eval 11 | <- 12 | .eval(X1, true | false); 13 | !assert_true(X1); 14 | 15 | .eval(X2, 3<5 & not 4+2<3); 16 | !assert_true(X2); 17 | . 18 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/ground.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_ground 11 | <- 12 | !assert_true( .ground(b(10)) ); 13 | !assert_true( .ground(b) ); 14 | !assert_true( .ground(~b) ); 15 | !assert_true( .ground(10) ); 16 | !assert_true( .ground("home page") ); 17 | !assert_false( .ground(X) ); 18 | 19 | Y = "a string"; 20 | !assert_true( .ground(Y) ); 21 | 22 | Z = atom; 23 | !assert_true( .ground(Z) ); 24 | 25 | !assert_false( .ground(a(X)) ); 26 | !assert_false( .ground(a[X]) ); 27 | !assert_true( .ground([a,b,c]) ); 28 | !assert_false( .ground([a,b,c(X)]) ); 29 | . 30 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/list.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_list 11 | <- 12 | !assert_true( .list([a,b,c]) ); 13 | !assert_true( .list([a,b,c(X)]) ); 14 | !assert_false( .list(10) ); 15 | !assert_false( .list("home page") ); 16 | !assert_false( .list(X) ); 17 | 18 | Y = "a string"; 19 | !assert_false( .list(Y) ); 20 | 21 | Z = []; 22 | !assert_true( .list(Z) ); 23 | 24 | !assert_false( .list(a(X)) ); 25 | . 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/list_plans.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_list_plans 11 | <- 12 | .add_plan({ @l1_1 +!g(X) : true <- +g1(X) }, bob); 13 | .add_plan({ @l1_2 +!p : true <- +p1 }); 14 | 15 | .log(warning,"TODO: Can't assert whether .list_plans is working properly"); 16 | //.list_plans; 17 | //.list_plans({ +g(_) }); 18 | . 19 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/list_rules.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | p(X,Y):-Y=X+1. 10 | 11 | @[test] 12 | +!test_list_rules 13 | <- 14 | +{n(X,Y):-Y=X-1}; 15 | 16 | .log(warning,"TODO: Can't assert whether .list_rules is working properly"); 17 | //.list_rules; 18 | . 19 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/literal.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_literal 11 | <- 12 | !assert_true( .literal(b(10)) ); 13 | !assert_true( .literal(b) ); 14 | !assert_false( .literal(10) ); 15 | !assert_false( .literal("Jason") ); 16 | !assert_false( .literal(X) ); 17 | 18 | Y = "a string"; 19 | !assert_false( .literal(Y) ); 20 | 21 | Z = atom; 22 | !assert_true( .literal(Z) ); 23 | 24 | !assert_true( .literal(a(X)) ); 25 | !assert_false( .literal([a,b,c]) ); 26 | !assert_false( .literal([a,b,c(X)]) ); 27 | . 28 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/number.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_number 11 | <- 12 | !assert_false( .number(b(10)) ); 13 | !assert_false( .number(b) ); 14 | !assert_false( .number(~b) ); 15 | !assert_true( .number(10) ); 16 | !assert_false( .number("home page") ); 17 | !assert_false( .number(X) ); 18 | 19 | Y = "a string"; 20 | !assert_false( .number(Y) ); 21 | 22 | Z = -400; 23 | !assert_true( .number(Z) ); 24 | 25 | !assert_false( .number(a(X)) ); 26 | !assert_false( .number([1,2]) ); 27 | . 28 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/range.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[atomic,test] 10 | +!test_range 11 | <- 12 | 13 | !assert_true( .range(3,1,5) ); 14 | !assert_false( .range(6,1,5) ); 15 | 16 | for ( .range(X,1,5) ) { 17 | !assert_contains([1,2,3,4,5], X); 18 | } 19 | 20 | for ( .range(X,-3,1) ) { 21 | !assert_contains([-3,-2,-1,0,1], X); 22 | } 23 | . 24 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/relevant_rules.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_relevant_rules 11 | <- 12 | .relevant_rules(p(_,_),LP0); 13 | .length(LP0, L0); 14 | !assert_equals(0, L0); 15 | 16 | +{p(X,Y):-Y=X+1}; 17 | 18 | .relevant_rules(p(_,_),LP1); 19 | .length(LP1, L1); 20 | !assert_equals(1, L1); 21 | 22 | ?p(10,Y1); 23 | !assert_equals(11, Y1); 24 | . 25 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/set_random_seed.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib: 3 | * Setting a random seed and then calling the random functions 4 | * (jason.functions.Random() / jason.stdlib.random()) 5 | * Most of examples come from Jason's documentation 6 | */ 7 | 8 | { include("tester_agent.asl") } 9 | 10 | @[test,atomic] 11 | +!test_set_random_seed 12 | <- 13 | .set_random_seed(20); 14 | RET = math.random(10); 15 | !assert_equals(7.320,RET,0.01); 16 | //.random(X,5); 17 | .random(X); 18 | !assert_equals(0.206,X,0.01); 19 | .log(warning,"TODO: Use of lists in .random seems to be producing undeterministic responses."); 20 | //.random([1,2,3],Y); 21 | //!assert_equals(3,Y); 22 | .random(Y); 23 | !assert_equals(0.793,Y,0.01); 24 | .random(Z); 25 | !assert_equals(0.163,Z,0.01); 26 | . 27 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/setof.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_setof 11 | <- 12 | +c(100); 13 | +c(200); 14 | +c(100); 15 | 16 | .setof(X,c(X),L2); 17 | !assert_equals([100,200],L2); 18 | . 19 | 20 | @[test] 21 | +!test_against_findall 22 | <- 23 | +a(30); 24 | +a(20); 25 | +b(1,2); 26 | +b(3,4); 27 | +b(5,6); 28 | 29 | .setof(X,a(X),L1); 30 | !assert_equals([30,20],L1); 31 | 32 | .setof(c(Y,X),b(X,Y),L2); 33 | !assert_equals([c(2,1),c(4,3),c(6,5)],L2); 34 | 35 | .setof(r(X,V1,V2), (a(X) & b(V1,V2) & V1*V2 < X), L3); 36 | !assert_equals([r(30,1,2),r(30,3,4),r(20,1,2),r(20,3,4)],L3); 37 | . 38 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/string.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_string 11 | <- 12 | !assert_true( .string("home page") ); 13 | !assert_false( .string(b(10)) ); 14 | !assert_false( .string(b) ); 15 | !assert_false( .string(X) ); 16 | 17 | Y = "a string"; 18 | !assert_true( .string(Y) ); 19 | 20 | Z = atom; 21 | !assert_false( .string(Z) ); 22 | . 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/structure.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_structure 11 | <- 12 | !assert_true( .structure(b(10)) ); 13 | .log(warning,"TODO: .structure(b) is supposed to be true!"); 14 | //!assert_true( .structure(b) ); 15 | !assert_false( .structure(10) ); 16 | !assert_false( .structure("home page") ); 17 | !assert_false( .structure(X) ); 18 | 19 | Y = "a string"; 20 | !assert_false( .structure(Y) ); 21 | 22 | Z = atom; 23 | !assert_true( .structure(Z) ); 24 | 25 | !assert_true( .structure(a(X)) ); 26 | !assert_true( .structure([a,b,c]) ); 27 | !assert_true( .structure([a,b,c(X)]) ); 28 | . 29 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/succeed_goal.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[test] 10 | +!test_succeed_goal 11 | <- 12 | /** 13 | * Add a mock plan for go(X,Y) 14 | */ 15 | .add_plan({ 16 | +!go(X,Y) <- 17 | .wait(200); // An arbitrary delay 18 | }, self, begin); 19 | 20 | // Trigger the mock plan to test desire 21 | !!go(1,3); 22 | 23 | .succeed_goal(go(1,3)); 24 | .wait(100); 25 | !assert_false(.desire(go(1,3))); 26 | 27 | .wait(100); 28 | !assert_true(state(finished)); // It is expected ^!go has added "finished" to bb 29 | . 30 | 31 | ^!go(X,Y)[state(S)] 32 | <- 33 | +state(S); 34 | . 35 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/stdlib/suspend.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test plans for jason internal actions in stdlib 3 | * 4 | * Most of examples come from Jason's documentation 5 | */ 6 | 7 | { include("tester_agent.asl") } 8 | 9 | @[atomic,test] 10 | +!test_launch_suspend 11 | <- 12 | /** 13 | * Add a mock plan for go(X,Y) 14 | */ 15 | .add_plan({ 16 | +!go(X,Y) <- 17 | .wait(300); // An arbitrary delay 18 | }, self, begin); 19 | 20 | // Trigger the mock plan to test desire 21 | !!go(1,3); 22 | !assert_true(.desire(go(1,3))); 23 | 24 | .suspend(go(1,3)); 25 | !assert_true(.desire(go(1,3))); 26 | !!test_suspend_goal; 27 | . 28 | 29 | +!test_suspend_goal 30 | <- 31 | .wait(50); 32 | !assert_true(suspended); // It is expected ^!go has added "suspended" to bb 33 | . 34 | 35 | ^!go(X,Y)[state(S)] 36 | <- 37 | +S; 38 | . 39 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/asl/test_rules.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Test rules 3 | */ 4 | 5 | { include("tester_agent.asl") } 6 | 7 | new_bb(B) :- b(BB) & B = BB * 2. 8 | new_bb2(B*2) :- b(B). 9 | 10 | /** 11 | * Test 12 | */ 13 | @[test] 14 | +!test_rules 15 | <- 16 | !assert_false(b(10)); 17 | !assert_false(new_bb(20)); 18 | !assert_false(new_bb2(20)); 19 | 20 | -+b(10); 21 | 22 | !assert_true(b(10)); 23 | !assert_true(new_bb(20)); 24 | //!assert_true(new_bb2(20)); 25 | 26 | for ( new_bb2(XB) ) { 27 | .log(warning,"TODO: Unexpected behaviour when unifying a bb from a rule ",new_bb2(XB)," - ",XB); 28 | } 29 | 30 | -b(10); 31 | 32 | !assert_false(b(10)); 33 | !assert_false(new_bb(20)); 34 | !assert_false(new_bb2(20)); 35 | . 36 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/inc/mock_agent.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * A mock agent with mock helpers to be used by tester_agents 3 | * The name of the agent that creates the mock is stored in 4 | * the belief mock_owner(TesterAgent) 5 | */ 6 | 7 | /** 8 | * using default jag_sleeping and jag_awaking to inform 9 | * to the mock owner that the agent is sleeping or awake 10 | */ 11 | +jag_sleeping : 12 | .my_name(ME) & 13 | mock_owner(TAg) 14 | <- 15 | .send(TAg, tell, sleeping(ME)); 16 | . 17 | +jag_awaking : 18 | .my_name(ME) & 19 | mock_owner(TAg) 20 | <- 21 | .send(TAg, untell, sleeping(ME)); 22 | . 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/inc/test_performance.asl: -------------------------------------------------------------------------------- 1 | /** 2 | * Performance meter helpers 3 | */ 4 | 5 | /** 6 | * Check the performance of executing a plan P 7 | * take the average on N iterations 8 | */ 9 | @check_performance[atomic] 10 | +!check_performance(P,N,MEAN) : 11 | .intention(ID,_,[ im(Label,{+!Goal[An]},{ Test; _ },_)|_],current) & 12 | _[code_line(Line),code_src(Src)] = Label 13 | <- 14 | -+mean(P,0); 15 | for (.range(J,1,N)) { 16 | .nano_time(T0); 17 | !P; 18 | .nano_time(T1); 19 | ?mean(P,M); 20 | -+mean(P,M+((T1-T0)/N)); 21 | } 22 | ?mean(P,MEAN); 23 | .log(info,"check_performance on event '",Goal,"' starting at line ",Line,": ",math.round(MEAN/1000)," microseconds"); 24 | . 25 | -!check_performance(X,Y) : 26 | true 27 | <- 28 | +test(Test,failed,Src,Line)[check_performance(P,N)]; 29 | . 30 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/unit_tests.mas2j: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a mas2j is used to test jason package itself. 3 | */ 4 | 5 | MAS unit_tests { 6 | 7 | agents: 8 | test_manager [ 9 | goals="create_tester_agents(\"./src/test/jason\",\".*.asl\",\"/inc\")", 10 | beliefs="shutdown_delay(600)" 11 | ]; 12 | self_tester; 13 | 14 | aslSourcePath: "src/test/jason/inc"; 15 | "src/test/jason/asl"; 16 | } 17 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/unit_tests_2.mas2j: -------------------------------------------------------------------------------- 1 | // to be run with (in the directory src/test/jason) 2 | // jason unit_tests_2.mas2j 3 | // without jason, with java: 4 | // ./gradlew config 5 | // export JASON_UJ=$JASON_HOME/jason-cli/build/bin 6 | // java -cp "$JASON_UJ/*" jason.infra.local.RunLocalMAS unit_tests_2.mas2j --log-conf logging.properties 7 | // 8 | MAS unit_tests { 9 | 10 | agents: 11 | test_manager [ 12 | goals="create_tester_agents(\"./asl\",\"namespace.asl\")", 13 | beliefs="shutdown_delay(4)" 14 | ]; 15 | 16 | aslSourcePath: "src/test/jason/inc";"src/test/jason/asl"; "inc"; "$jasonJar/test/jason/inc"; 17 | } 18 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/jason/unit_tests_project.mas2j: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a mas2j project to be launched from a jason project 3 | * It includes some extra aslSourcePath which is expected to find asl files 4 | * and it does not launch jason self tests which is only used 5 | * to test jason package itself. 6 | */ 7 | 8 | MAS unit_tests { 9 | 10 | agents: 11 | test_manager [ 12 | goals="create_tester_agents(\"./src/test/jason\",\".*.asl\")", 13 | beliefs="shutdown_delay(600)" 14 | ]; 15 | 16 | aslSourcePath: "src/test/jason/inc"; 17 | "src/test/jason/asl"; 18 | "src/asl"; 19 | "src/agt"; 20 | "inc"; 21 | "$jasonJar/test/jason/inc"; 22 | } 23 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/jason/asl/ag1.asl: -------------------------------------------------------------------------------- 1 | // this agent always bids 6 2 | 3 | @lbid 4 | +auction(N)[source(S)] : true 5 | <- .send(S, tell, place_bid(N,6)). 6 | 7 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/jason/asl/ag3.asl: -------------------------------------------------------------------------------- 1 | // this agent bids 3, 2 | // if it looses 3 auctions, it proposes an alliance to 3 | // ag2 and therefore it bids 7 (3 from itself + 4 from ag2) 4 | 5 | default_bid_value(3). 6 | ally(ag2). 7 | threshold(3). 8 | 9 | +auction(N)[source(S)] 10 | : (threshold(T) & N < T) 11 | | 12 | (.my_name(I) & winner(I) & ally(A) & not alliance(I,A)) 13 | <- !bid_normally(S,N). 14 | 15 | +auction(N)[source(S)] 16 | : .my_name(I) & not winner(I) & ally(A) & not alliance(I,A) 17 | <- !alliance(A); 18 | !bid_normally(S,N). 19 | 20 | @palliance 21 | +auction(N)[source(S)] 22 | : alliance(_,A) 23 | <- ?default_bid_value(B); 24 | ?bid(A,C); 25 | .send(S, tell, place_bid(N,B+C)). 26 | 27 | +!bid_normally(S,N) : true 28 | <- ?default_bid_value(B); 29 | .send(S, tell, place_bid(N,B)). 30 | 31 | @prop_alliance[breakpoint] 32 | +!alliance(A) : true 33 | <- .send(A,tell,alliance). 34 | 35 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/jason/asunit/Condition.java: -------------------------------------------------------------------------------- 1 | package jason.asunit; 2 | 3 | public interface Condition { 4 | public boolean test(TestArch arch); 5 | } 6 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/jason/asunit/print.java: -------------------------------------------------------------------------------- 1 | package jason.asunit; 2 | 3 | import jason.asSemantics.InternalAction; 4 | import jason.asSemantics.TransitionSystem; 5 | import jason.asSemantics.Unifier; 6 | import jason.asSyntax.Term; 7 | import jason.stdlib.println; 8 | 9 | public class print extends println { 10 | 11 | public static InternalAction create() { 12 | return new print(); 13 | } 14 | 15 | @Override 16 | public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { 17 | TestArch arch = (TestArch)ts.getAgArch(); 18 | arch.print(argsToString(args)); 19 | return true; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/BugDelVar.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | public class BugDelVar { 9 | 10 | TestAgent ag; 11 | 12 | @Before 13 | public void setupAg() { 14 | ag = new TestAgent(); 15 | 16 | // defines the agent's AgentSpeak code 17 | ag.parseAScode( 18 | "a(10). +!start <- -a(X); jason.asunit.print(X). " 19 | ); 20 | } 21 | 22 | @Test(timeout=3000) 23 | public void testGoal() { 24 | ag.addGoal("start"); 25 | ag.assertPrint("10", 10); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/BugEval.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | /** based on bug found by Grimaldo */ 9 | public class BugEval { 10 | 11 | TestAgent ag; 12 | 13 | // initialisation of the agent test 14 | @Before 15 | public void setupAg() { 16 | ag = new TestAgent(); 17 | 18 | // defines the agent's AgentSpeak code 19 | ag.parseAScode( 20 | "+!start <- A1 = false; B1 = true; .eval(X1, A1 | B1); jason.asunit.print(X1); "+ 21 | " !a2(A2); !b2(B2); .eval(X2, A2 | B2); jason.asunit.print(X2). "+ 22 | "+!a2(false). +!b2(true). " 23 | ); 24 | } 25 | 26 | @Test(timeout=2000) 27 | public void test() { 28 | ag.addGoal("start"); 29 | ag.assertPrint("true", 10); 30 | ag.assertPrint("true", 10); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/BugList1.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | public class BugList1 { 9 | 10 | TestAgent ag, oa, ob; 11 | 12 | // initialisation of the agent test 13 | @Before 14 | public void setupAg() { 15 | ag = new TestAgent("a"); 16 | 17 | // defines the agent's AgentSpeak code 18 | ag.parseAScode( 19 | "+!start <- L=\"[a]\"; !g(L). "+ 20 | "+!g([]) <- jason.asunit.print(no)."+ 21 | "+!g(_) <- jason.asunit.print(yes)." 22 | ); 23 | } 24 | 25 | @Test(timeout=2000) 26 | public void testProg() { 27 | ag.addGoal("start"); 28 | ag.assertPrint("yes", 10); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/BugRelPlans.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | /** bug reported by Cleber Amaral */ 9 | 10 | public class BugRelPlans { 11 | 12 | TestAgent ag; 13 | 14 | // initialisation of the agent test 15 | @Before 16 | public void setupAg() { 17 | ag = new TestAgent("a"); 18 | 19 | // defines the agent's AgentSpeak code 20 | ag.parseAScode( 21 | "@lxxx +!start <- .relevant_plans({+!_}, L1, L2); jason.asunit.print(L2)." 22 | ); 23 | } 24 | 25 | @Test(timeout=2000) 26 | public void testProg() { 27 | ag.addGoal("start"); 28 | ag.assertPrint("lxxx", 10); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/BugSucceedGoal.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | public class BugSucceedGoal { 9 | 10 | TestAgent ag; 11 | 12 | // initialisation of the agent test 13 | @Before 14 | public void setupAg() { 15 | ag = new TestAgent(); 16 | 17 | // defines the agent's AgentSpeak code 18 | ag.parseAScode( 19 | "!g. +!g <- !go; jason.asunit.print(end). "+ 20 | "+!go <- !go2; jason.asunit.print(a3). "+ 21 | "+!go2 <- .succeed_goal(go2); jason.asunit.print(a4). " 22 | ); 23 | } 24 | 25 | 26 | @Test(timeout=2000) 27 | public void test1() { 28 | ag.addGoal("g"); 29 | ag.assertPrint("a3", 30); 30 | ag.assertPrint("end", 30); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/BugVarStringAbs.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | /** based on bug found by Marcelo Menegol */ 9 | public class BugVarStringAbs { 10 | 11 | TestAgent ag; 12 | 13 | // initialisation of the agent test 14 | @Before 15 | public void setupAg() { 16 | ag = new TestAgent(); 17 | 18 | // defines the agent's AgentSpeak code 19 | ag.parseAScode( 20 | "+!start(X) : Y=math.abs(3*X) <- jason.asunit.print(Y). " 21 | ); 22 | } 23 | 24 | @Test(timeout=2000) 25 | public void testAbs() { 26 | ag.addGoal("start(3.5)"); 27 | ag.assertPrint("10.5", 10); 28 | 29 | ag.addGoal("start(\"a\")"); 30 | ag.assertPrint("NaN", 10); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/BugWait.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | /** bug reported by Igor 9 | * 10 | * https://github.com/jason-lang/jason/issues/12 11 | */ 12 | public class BugWait { 13 | 14 | TestAgent ag, oa, ob; 15 | 16 | // initialisation of the agent test 17 | @Before 18 | public void setupAg() { 19 | ag = new TestAgent("a"); 20 | 21 | // defines the agent's AgentSpeak code 22 | ag.parseAScode( 23 | "day(saturday). "+ 24 | "!start. "+ 25 | "+!start <- .wait(day(saturday)); jason.asunit.print(hello)." 26 | ); 27 | } 28 | 29 | @Test(timeout=2000) 30 | public void testProg() { 31 | ag.addGoal("start"); 32 | ag.assertPrint("hello", 10); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/TestCopyTerm.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestCopyTerm { 8 | 9 | @Test(timeout=2000) 10 | public void testUnnamedVar() { 11 | TestAgent ag = new TestAgent(); 12 | 13 | // defines the agent's AgentSpeak code 14 | ag.parseAScode( 15 | "copy_term(T,T). "+ 16 | "+!test1 : copy_term(a(B),Y) <- jason.asunit.print(Y). "+ 17 | "+!test2 : copy_term(a(B),Y) <- B=10; jason.asunit.print(Y). " 18 | ); 19 | ag.addGoal("test1"); 20 | ag.assertPrint("a(_", 10); // cannot print(a(3) 21 | ag.addGoal("test2"); 22 | ag.assertPrint("a(10)", 10); // cannot print(a(3) 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/TestGoalSource.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | public class TestGoalSource { 9 | 10 | TestAgent ag; 11 | 12 | // initialisation of the agent test 13 | @Before 14 | public void setupAg() { 15 | ag = new TestAgent(); 16 | 17 | // defines the agent's AgentSpeak code 18 | ag.parseAScode( 19 | "+!begin <- !g; !g[source(bob)]. "+ 20 | "+!g[source(A)] <- jason.asunit.print(A)." 21 | ); 22 | } 23 | 24 | @Test(timeout=2000) 25 | public void testGoalSrouce() { 26 | ag.addGoal("begin"); 27 | ag.assertPrint("self", 5); 28 | ag.assertPrint("bob", 5); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/TestNegatedVar.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | public class TestNegatedVar { 9 | 10 | TestAgent ag; 11 | 12 | // initialisation of the agent test 13 | @Before 14 | public void setupAg() { 15 | ag = new TestAgent(); 16 | ag.setDebugMode(true); 17 | 18 | // defines the agent's AgentSpeak code 19 | ag.parseAScode( 20 | "+!start <- +b. " + 21 | "+B <- !~B. " + 22 | "+!X <- jason.asunit.print(X)." 23 | ); 24 | } 25 | 26 | @Test(timeout=2000) 27 | public void testContext() { 28 | ag.addGoal("start"); 29 | ag.assertPrint("~b[source(self)]", 5); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/TestTRO.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | // test Tail Recursion Optimization 9 | public class TestTRO { 10 | 11 | TestAgent ag; 12 | 13 | // initialisation of the agent test 14 | @Before 15 | public void setupAg() { 16 | ag = new TestAgent(); 17 | 18 | // defines the agent's AgentSpeak code 19 | ag.parseAScode( 20 | "+!run <- !fat(5,1,F); jason.asunit.print(F). "+ 21 | "+!fat(1,V,V). "+ 22 | "+!fat(N,A,X) <- !fat(N-1,N*A,X)." 23 | ); 24 | } 25 | 26 | @Test(timeout=2000) 27 | public void testGoalSrouce() { 28 | ag.addGoal("run"); 29 | ag.assertPrint("120", 50); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /jason-interpreter/src/test/java/test/asunit/TestUnnamedVar.java: -------------------------------------------------------------------------------- 1 | package test.asunit; 2 | 3 | import jason.asunit.TestAgent; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestUnnamedVar { 8 | 9 | @Test(timeout=2000) 10 | public void testUnnamedVar() { 11 | TestAgent ag = new TestAgent(); 12 | 13 | // defines the agent's AgentSpeak code 14 | ag.parseAScode( 15 | "+!test <- A=a(B); !t(A); jason.asunit.print(A). "+ 16 | "+!t(A) <- B=3. " 17 | ); 18 | ag.addGoal("test"); 19 | ag.assertPrint("a(B)", 10); // cannot print(a(3) 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0") 3 | } 4 | rootProject.name = 'jason' 5 | include('jason-cli') 6 | include('jason-interpreter') 7 | 8 | --------------------------------------------------------------------------------