Using agent_simulation by refining the Agent class to make

a multi-agent simulation where every agent know each other The steps consist of each agent greeting each other, and waiting for every other agent to respond before notifying to the ClockAgent that they finished their step.

Redefined classes

redef class Agent

actors :: simple_simulation $ Agent

redef class Sys

actors :: simple_simulation $ Sys

The main class of the program.

All class definitions

redef class Agent

actors :: simple_simulation $ Agent

redef class Sys

actors :: simple_simulation $ Sys

The main class of the program.
package_diagram actors::simple_simulation simple_simulation actors\>examples\>agent_simulation\> agent_simulation actors::simple_simulation->actors\>examples\>agent_simulation\> actors actors actors\>examples\>agent_simulation\>->actors ...actors ... ...actors->actors a_star-m a_star-m a_star-m->actors::simple_simulation

Ancestors

module abstract_collection

core :: abstract_collection

Abstract collection classes and services.
module abstract_text

core :: abstract_text

Abstract class for manipulation of sequences of characters
module actors

actors :: actors

Abstraction of the actors concepts
module array

core :: array

This module introduces the standard array structure.
module bitset

core :: bitset

Services to handle BitSet
module bytes

core :: bytes

Services for byte streams and arrays
module circular_array

core :: circular_array

Efficient data structure to access both end of the sequence.
module codec_base

core :: codec_base

Base for codecs to use with streams
module codecs

core :: codecs

Group module for all codec-related manipulations
module collection

core :: collection

This module define several collection classes.
module concurrent_collections

pthreads :: concurrent_collections

Introduces thread-safe concurrent collections
module core

core :: core

Standard classes and methods used by default by Nit programs and libraries.
module environ

core :: environ

Access to the environment variables of the process
module error

core :: error

Standard error-management infrastructure.
module exec

core :: exec

Invocation and management of operating system sub-processes.
module extra

pthreads :: extra

Offers some POSIX threads services that are not available on all platforms
module file

core :: file

File manipulations (create, read, write, etc.)
module fixed_ints

core :: fixed_ints

Basic integers of fixed-precision
module fixed_ints_text

core :: fixed_ints_text

Text services to complement fixed_ints
module flat

core :: flat

All the array-based text representations
module gc

core :: gc

Access to the Nit internal garbage collection mechanism
module hash_collection

core :: hash_collection

Introduce HashMap and HashSet.
module iso8859_1

core :: iso8859_1

Codec for ISO8859-1 I/O
module kernel

core :: kernel

Most basic classes and methods.
module list

core :: list

This module handle double linked lists
module math

core :: math

Mathematical operations
module native

core :: native

Native structures for text and bytes
module numeric

core :: numeric

Advanced services for Numeric types
module protocol

core :: protocol

module pthreads

pthreads :: pthreads

Main POSIX threads support and intro the classes Thread, Mutex and Barrier
module queue

core :: queue

Queuing data structures and wrappers
module range

core :: range

Module for range of discrete objects.
module re

core :: re

Regular expression support for all services based on Pattern
module ropes

core :: ropes

Tree-based representation of a String.
module sorter

core :: sorter

This module contains classes used to compare things and sorts arrays.
module stream

core :: stream

Input and output streams of characters
module text

core :: text

All the classes and methods related to the manipulation of text entities
module time

core :: time

Management of time and dates
module union_find

core :: union_find

union–find algorithm using an efficient disjoint-set data structure
module utf8

core :: utf8

Codec for UTF-8 I/O

Parents

module agent_simulation

actors :: agent_simulation

a "Framework" to make Multi-Agent Simulations in Nit

Children

module a_star-m

a_star-m

# Using `agent_simulation` by refining the Agent class to make
# a multi-agent simulation where every agent know each other
# The steps consist of each agent greeting each other, and
# waiting for every other agent to respond before notifying
# to the `ClockAgent` that they finished their step.
module simple_simulation is example

import agent_simulation

redef class Agent
	var others = new Array[Agent]
	var count = 0

	fun greet(message: String, other: Agent) do other.async.greet_back("Hello back !")

	fun greet_back(message: String) do
		count -= 1
		if count == 0 then end_step
	end

	redef fun do_step do
		for o in others do
			o.async.greet("Hello !", self)
			count += 1
		end
	end
end

var nb_steps = 0
var nb_agents = 0
if args.is_empty or args.length != 2 then
	nb_steps = 10
	nb_agents = 10
else
	nb_steps = args[0].to_i
	nb_agents = args[1].to_i
end

var agents = new Array[Agent]
for i in [0..nb_agents[ do agents.add(new Agent)
for a in agents do for b in agents do if a != b then a.others.add(b)
clock_agent = new ClockAgent(nb_steps, agents)
clock_agent.async.do_step
lib/actors/examples/agent_simulation/simple_simulation.nit:15,1--57,25