Индивидуальные задания
-
Описание задания
Реализовать многоагентную систему для предоставления товаров или услуг клиентам. Многоагентная система должна содержать несколько видов агентов. Например, агенты, предоставляющие товар или услуги за определенную стоимость; агенты, покупающие указанные товары или услуги; агенты-посредники между агентом-продавцом и агентом — конечным покупателем. Каждый агент получает начальную информацию от пользователя. Общение пользователя и агента происходит при помощи графического пользовательского интерфейса. Один пользователь вводит описания товаров и услуг, а другой пользователь вводит информацию о том, какой товар или услугу необходимо приобрести.
-
Варианты индивидуальных заданий
Бронирование авиа-, автобусных или железнодорожных билетов. В решении участвуют два агента. Агент-кассир предоставляет информацию о свободных билетах и продает билеты. Агент-покупатель осуществляет поиск необходимых рейсов и бронирует билеты. Расписание вводится Диспетчером. Информация о необходимом билете вводится пользователем-покупателем. Первоначальное состояние билетов — все свободны.
Бронирование путевки у туристических операторов. Агент-продавец является представителем туроператора и предоставляет информацию о туристических путевках. Агент-покупатель является представителем покупателя туристической путевки. Информация о путевках вводится туроператором. Информация о необходимой путевке вводится пользователем-покупателем.
Сбор информации для покупки сотового телефона. Агент-продавец является представителем продавца сотовых телефонов и представляет информацию о моделях, ценах и других свойствах телефонов. Агент-покупатель — представителем покупателя и осуществляет поиск и покупку телефона требуемых свойств. Информация о товарах размещается в каталоге товаров и изменяется пользователем-продавцом. Информация о требуемой покупке вводится пользователем-покупателем.
Сбор информации для покупки мебели. Агент-продавец является представителем продавца мебельного магазина и предоставляет информацию о товаре, присутствующем в магазине. Пользователь-продавец вводит информацию о предлагаемом товаре. Агент-покупатель является представителем покупателя мебели. Пользователь-покупатель сообщает своему агенту информацию о требуемой мебели.
Сбор информации для покупки недвижимости. Агент-риэлтер-продавец является представителем риэлтерской фирмы и предоставляет информацию о продаваемых объектах недвижимости, ценах и свойствах. Пользователь-риэлтер вводит информацию о предлагаемых объектах недвижимости: квартиры, коттеджи, гаражи, офисы и т.д. Агент риэлтер-покупатель является представителем риэлтерской фирмы, осуществляющей поиск объектов недвижимости для своих клиентов. Пользователь-риэлтер в данном случае передает информацию своему агенту о требуемых объектах недвижимости для своих клиентов. Агент- покупатель является представителем покупателя недвижимости. Конечный покупатель передает информацию своему агенту о требуемом объекте недвижимости.
Сбор информации для покупки автомобиля. Агент-продавец является представителем салона по продаже автомобилей и предоставляет информацию об автомобилях. Пользователь-продавец вводит информацию о продаваемых в салоне автомобилях. Агент-покупатель является представителем покупателя автомобиля. Пользователь-покупатель передает информацию своему агенту о требуемом автомобиле.
Поиск места работы. Агент-наниматель является представителем кадрового агентства и предоставляет информацию о вакантных местах. Сотрудник агентства вводит информацию о существующих вакансиях на рынке труда. Агент-работник является представителем работника, нанимающегося на работу. Пользователь-работник передает информацию своему агенту о требуемой должности, уровне заработной платы, расположении, условиях труда и т.д.
Распределение студентов на предприятия. В решении задачи участвуют три вида агентов: агент-наниматель, агент — ответственный за распределение, агент—студент. Агент-наниматель предоставляет информацию о предприятии, должностях и условиях труда. Агент — ответственный за распределение осуществляет поиск мест распределения студентов. Агент-студент предоставляет информацию о прописке, среднем балле студента, его предпочтениях и другую информацию, необходимую для выбора места распределения.
-
Источники
Giovanni Caire (TILAB, formerly CSELT). Руководство JADE Copyright (C) 2003 TILab S.p.A.
Швецов А.Н. Агентно-ориентированные системы: от формальных моделей к промышленным приложениям / Всероссийский конкурсный отбор обзорно-аналитических статей по приоритетному направлению "Информационно-телекоммуникационные системы", 2008. - 101 с.
Разработка мультиагентных приложений с использованием платформы JADE / Е.В.Симонова, П.О.Скобелев, И.А.Сюсин. Самара: ИУНЛ ПГУТИ. 2012 – 82 с.
Модели представления и обработки данных и знаний. Лабораторный практикум: учебно-методическое пособие; под ред. В. В. Голенкова: В 3 ч. Ч. 2 / Т. Л. Лемешева, Н. А. Гулякина, А. И. Толкачев. — Минск: БГУИР, 2008. – 46 с.: ил.
Приложение 1
/*****************************************************************
JADE - Java Agent DEvelopment Framework is a framework to develop
multi-agent systems in compliance with the FIPA specifications.
Copyright (C) 2000 CSELT S.p.A.
GNU Lesser General Public License
Эта библиотека является свободным программным обеспечением; вы можете распространять
и/или изменять его в соответствии с условиями GNU Lesser General Public
License, опубликованной Фондом свободного программного обеспечения,
Версия 2.1 License.
Эта библиотека распространяется в надежде, что она будет полезной,
но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
Или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ. Смотрите GNU
Lesser General Public License для более подробной информации.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*****************************************************************/
package ru.agentlab;
import jade.core.AID;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
@author Giovanni Caire - TILAB
*/
class BookSellerGui extends JFrame {
private BookSellerAgent myAgent;
private JTextField titleField, priceField;
BookSellerGui(BookSellerAgent a) {
super(a.getLocalName());
myAgent = a;
JPanel p = new JPanel();
p.setLayout(new GridLayout(2, 2));
p.add(new JLabel("Book title:"));
titleField = new JTextField(15);
p.add(titleField);
p.add(new JLabel("Price:"));
priceField = new JTextField(15);
p.add(priceField);
getContentPane().add(p, BorderLayout.CENTER);
JButton addButton = new JButton("Add");
addButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ev) {
try {
String title = titleField.getText().trim();
String price = priceField.getText().trim();
myAgent.updateCatalogue(title,Integer.parseInt(price));
titleField.setText("");
priceField.setText("");
}
catch (Exception e) {
JOptionPane.showMessageDialog(BookSellerGui.this,
"Invalid values. "+e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
} );
p = new JPanel();
p.add(addButton);
getContentPane().add(p, BorderLayout.SOUTH);
// Make the agent terminate when the user closes
// the GUI using the button on the upper right corner
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
myAgent.doDelete();
}
} );
setResizable(false);
}
public void showGui() {
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int centerX = (int)screenSize.getWidth() / 2;
int centerY = (int)screenSize.getHeight() / 2;
setLocation(centerX - getWidth() / 2, centerY - getHeight() / 2);
super.setVisible(true);
}
}
Приложение 2
/**
Внутренний класс PurchaseOrdersServer.
Это поведение, используемое агентом Book-seller для обслуживания
входящих запросов (заказов на покупку) от агентов покупателя.
Агент продавец удаляет купленную книгу из своего каталога
и отвечает сообщением INFORM для уведомления покупателя о том, что
покупка была успешно завершена.
*/
private class PurchaseOrdersServer extends CyclicBehaviour {
public void action() {
MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.ACCEPT_PROPOSAL);
ACLMessage msg = myAgent.receive(mt);
if (msg != null) {
// ACCEPT_PROPOSAL Message received. Process it
String title = msg.getContent();
reply = msg.createReply();
Integer price = (Integer) catalogue.remove(title);
if (price != null) {
reply.setPerformative(ACLMessage.INFORM);
System.out.println(title+" sold to agent "+msg.getSender().getName());
}
else {
// The requested book has been sold to another buyer in the meanwhile .
reply.setPerformative(ACLMessage.FAILURE);
reply.setContent("not-available");
}
myAgent.send(reply);
}
else {
block();
}
}
} // End of inner class OfferRequestsServer
|