Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / docx59 / отчет(5)

.docx
Скачиваний:
15
Добавлен:
01.08.2013
Размер:
19.89 Кб
Скачать

Постановка задачи

Разработать модель транспортного предприятия, находящегося в пункте А, осуществляющего поставки в пункты B и C. Предприятие содержит поставщика, осуществляющего поставку товара, менеджера, принимающего решение о том как доставить товар и грузчика, осуществляющего погрузку.

Из пункта A ездит автомобиль и поезд. Вместимость машины – 1 единица товара, вместимость поезда – 3 единицы. Автомобиль ездит по маршруту A-B-C-B-A, поезд A-C-B-C-A. При этом если нет необходимости ехать в конечный пункт - транспорт разворачивается в промежуточном. Время в пути для каждого маршрута определяется отдельно (см. схему).

Целью моделирования является наблюдение за процессом принятия решений о пути поставок и движением транспорта.

Действия агентов

Листинг

MAS transport{

infrastructure: Centralised

environment: TransportEnv

executionControl: jason.control.ExecutionControl

agents: supplier; manager; loader;

}

import jason.asSyntax.Literal;

import jason.asSyntax.Structure;

import jason.environment.Environment;

public class TransportEnv extends Environment {

TransportManager transportManager = new TransportManager();

private boolean b = true;

// Готов или нет поставщик (есть/нет товара)

Literal ready = Literal.parseLiteral("ready");

Literal nready = Literal.parseLiteral("~ready");

// предполагаемое время в пути (при текущей загрузке)

Literal timecar = Literal.parseLiteral("timecar(4)");

Literal timetrain = Literal.parseLiteral("timetrain(3)");

// есть что грузить, куда грузить

// Literal isProduct = Literal.parseLiteral("isproduct");

// Literal productTo = Literal.parseLiteral("productto(car)");

@Override

public void init(String[] args) {

transportManager.addTransport(new Car("car"));

transportManager.addTransport(new Train("train"));

log();

addPercept(ready);

addPercept("manager", timecar);

addPercept("manager", timetrain);

}

private void step()

{

clearPercepts();

if (b)

{

timecar = Literal.parseLiteral("timecar(" + transportManager.transportByName("car").timeB + ")");

timetrain = Literal.parseLiteral("timetrain(" + transportManager.transportByName("train").timeB + ")");

}

else

{

timecar = Literal.parseLiteral("timecar(" + transportManager.transportByName("car").timeC + ")");

timetrain = Literal.parseLiteral("timetrain(" + transportManager.transportByName("train").timeC + ")");

}

if (transportManager.freeTransport().size() > 0)

{

addPercept(ready);

addPercept("manager", timecar);

addPercept("manager", timetrain);

}

else

{

addPercept(nready);

}

b = !b;

transportManager.step();

}

@Override

public boolean executeAction(String ag, Structure act) {

if (ag.equals("manager"))

{

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (ag.equals("loader"))

{

System.out.println("\nB: " + b);

System.out.println("Agent "+ag+" is doing "+act);

clearPercepts();

String s = "c";

if (b) s = "b";

boolean isPut = false;

for (Transport transport : transportManager.freeTransport()) {

if (transport.getName().equals(act))

{

transport.put(s);

isPut = true;

}

if (!isPut)

{

transportManager.freeTransport().getFirst().put(s);

}

}

step();

log();

}

return true;

}

public void log() {

System.out.println("Free: " + transportManager.freeTransport().size());

for (Transport transport : transportManager.freeTransport()) {

System.out.println(transport.getName() + "; loaded: " + transport.loaded + "; onWay: " + transport.onWay + "; waitTime: " + transport.getWaitTime());

}

System.out.println("All: " + transportManager.allTransport().size());

for (Transport transport : transportManager.allTransport()) {

System.out.println(transport.getName() + "; loaded: " + transport.loaded + "; onWay: " + transport.onWay + "; waitTime: " + transport.getWaitTime());

}

}

}

//package logic;

import java.util.LinkedList;

public class TransportManager {

private LinkedList<Transport> listTransports = new LinkedList<Transport>();

public TransportManager() {

}

public void addTransport(Transport t) {

listTransports.add(t);

}

/**

* Весь транспорт

* @return

*/

public LinkedList<Transport> allTransport() {

return listTransports;

}

/**

* Транспорт доступный для погрузки

* @return

*/

public LinkedList<Transport> freeTransport() {

LinkedList<Transport> list = new LinkedList<>();

for (Transport transport : listTransports) {

if (!transport.isFull() && !transport.onWay)

{

list.add(transport);

}

}

return list;

}

/**

* Шаг времени

*/

public void step() {

for (Transport transport : listTransports) {

transport.step();

}

}

/**

* Транспорт по имени

* @param name

* @return

*/

public Transport transportByName(String name) {

for (Transport transport : listTransports) {

if (transport.getName().equals(name))

{

return transport;

}

}

return null;

}

}

//package logic;

public abstract class Transport {

private String name;

// в пути

protected boolean onWay;

// время в пути

protected int timeB;

protected int timeC;

// вместимость

protected int capacity;

// загружено

protected int loaded;

// время отсутствия (когда вернется)

private int waitTime;

public Transport(String name) {

this.setName(name);

this.loaded = 0;

this.onWay = false;

this.waitTime = 0;

this.setParameters();

}

protected abstract void setParameters();

/**

* Загрузить единицу груза

* @return

*/

public boolean put(String target) {

if (!isFull() && !onWay)

{

loaded++;

if (target.equals("b"))

{

if (timeB > waitTime)

{

waitTime = timeB;

}

}

else

{

if (timeC > waitTime)

{

waitTime = timeC;

}

}

return true;

}

else

{

return false;

}

}

/**

* Шаг времени (декремент времени отсутствия, отправка)

*/

public void step() {

if (this.onWay)

{

if (waitTime == 0)

{

onWay = false;

return;

}

else

{

waitTime--;

if (waitTime == 0)

{

onWay = false;

}

return;

}

}

else

{

if (isFull())

{

onWay = true;

loaded = 0;

return;

}

}

}

/**

* Проверка заполнен ли транспорт

* @return

*/

public boolean isFull() {

if (loaded == capacity)

{

return true;

}

else

{

return false;

}

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getWaitTime() {

return waitTime;

}

public void setWaitTime(int waitTime) {

this.waitTime = waitTime;

}

}

//package logic;

public class Train extends Transport {

public Train(String name) {

super(name);

}

@Override

protected void setParameters() {

this.capacity = 3;

this.timeB = 4;

this.timeC = 2;

}

}

//package logic;

public class Car extends Transport {

public Car(String name) {

super(name);

}

@Override

protected void setParameters() {

this.capacity = 1;

this.timeB = 3;

this.timeC = 6;

}

}

+!car[source(manager)] <-

car.

+!train[source(manager)] <-

train.

+!wait[source(manager)] <-

wait.

+!ready[source(supplier)] <-

?timecar(X);

?timetrain(Y);

if (X > Y)

{ car; .send(loader,achieve,car); }

else

{ train; .send(loader,achieve,train); }.

+~ready : true

<- wait; .send(loader,achieve,wait);.

+ready : true

<- .send(manager,achieve,ready).

Вывод

Многоагентные системы позволяют моделировать процессы происходящие в повседневной жизни.

11

Соседние файлы в папке docx59