modelBookSellerAgent

Extends from BaseClasses.PartialAgent.

Information

Overview

  • This model is a an agent that offers and sells books to calling BookBuyerAgents.
  • It is based on communication via UDP and logic implemented with the help of the StateGraph Modelica library.
  • It is used together with at least one BookSellerAgent.

Concept

The BookSellerAgent responds to calls from a BookBuyerAgent. This can be a call for proposals or a request to buy a book. When a call for proposals comes in, the BookSellerAgent checks whether the required book is in stock or not. If yes, it reponds with the corresponding price, if no, it refuses the call. When a request to buy a book comes in, the agent looks for the book in stock, sells it and afterwards removes it from the stock list. The logic is implemented with the help of the StateGraph library. Communication is realized with the help of the DeviceDriver library and follows the language standards for multi-agent-systems set by the FIPA to the highest possible extend for Modelica models. The presented agent has the purpose of demonstrating the possibility of agent implementation in Modelica by implementing the behaviour of the BookSeller agent presented in Caire, 2009, JADE PROGRAMMING FOR BEGINNERS.

References

  • Felix Bünning. Development of a Modelica-library for agent-based control of HVAC systems. Bachelor thesis, 2016, RWTH Aachen University, Aachen, Germany.
  • FIPA ACL Message Structure Specification
  • FIPA Communicative Act Library Specification
  • Caire, 2009, JADE PROGRAMMING FOR BEGINNERS

Example Results

Parameters

TypeNameDefaultDescription
Integername (from PartialAgent)Name of the agent (five-digit number, eg. 10001)
BooleanusePoke (from PartialAgent)falseUse Modelica internal communication for inbox update
RealsampleRate (from PartialAgent)5Sample time for inbox update (used if usePoke=false)

Connectors

TypeNameDefaultDescription
Modelica.Blocks.Interfaces.BooleanOutputsendOut (from PartialAgent)Turns true when the sending unit of the agent is active

Components

TypeNameDefaultDescription
HVACAgentBasedControl.Agents.MessageNotificationmessageNotification (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.Packagerpackager (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.AddRealcontent (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.GetRealget_content (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Communication.UDPReceiveuDPReceive_adapted (from PartialAgent)
UDPSend_adapteduDPSend_adapted (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.AddIntegersender (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.AddIntegerreceiver (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.AddIntegerreply_to (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.AddRealontology (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.GetIntegergetperformative (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.GetIntegergetsender (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.GetIntegergetreceiver (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.GetIntegergetreply_to (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.GetRealgetontology (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.AddIntegerperformative (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.GetIntegergetMessageID (from PartialAgent)
Modelica_DeviceDrivers.Blocks.Packaging.SerialPackager.AddIntegermessageID (from PartialAgent)
Modelica.StateGraph.StateGraphRootstateGraphRoot (from PartialAgent)
SendSamplesendSample (from PartialAgent)
RealbookList
RealsearchedBook
Integercounter
BooleanbookInStock
BooleanbookToSell
Realindex
Integersender_current
Integerperformative_current
Realcontent_1_current
Realcontent_2_current
Modelica.Blocks.Math.IntegerChangeintegerChange
Modelica.StateGraph.InitialStepwaiting
Modelica.StateGraph.TransitionWithSignalnewMessage
Modelica.StateGraph.StepcheckPurpose
Modelica.StateGraph.TransitionWithSignalOfferRequestsServer
Modelica.StateGraph.TransitionWithSignalPurchaseOrdersServer
Modelica.StateGraph.StepcheckLibrary
Modelica.StateGraph.StepcomposeResponse
Modelica.StateGraph.StepWithSignalsendResponse
Modelica.StateGraph.StepcheckLibrary1
Modelica.StateGraph.StepcomposeResponse1
Modelica.StateGraph.StepWithSignalsendResponse1
Modelica.StateGraph.Transitiontransition
Modelica.StateGraph.Transitiontransition1
Modelica.StateGraph.Transitiontransition2
Modelica.StateGraph.Transitiontransition3
Modelica.StateGraph.Transitiontransition4
Modelica.StateGraph.Transitiontransition5
Modelica.Blocks.Logical.Oror1
Modelica.Blocks.Sources.BooleanExpressionbooleanExpression1
Modelica.Blocks.Sources.BooleanExpressionbooleanExpression2

Revisions

  • October 2015, by Felix Bünning: Developed and implemented