الـ Communication بين عملاء الـ Jade

بعد أن رأينا كيف ننشئ عملاء JADE و كيف نحدد المهام التي يقومون بها، لا يمكننا الحديث عن نظام متعدد العملاء multi agent  system و ليس عن مجموعة عملاء يغرد كل في سربه إلا إذا كانت هناك تواصل و محادثة communication بين العملاء،

هذا المقال يقدم شرحا عن كيفية التواصل بين العملاء و كيفية بناء محادثات بينهم.

1.    مقدمة:

لكي يستطيع عملاء JADE  التعاون على أمر ما لا بد لهم من وسائل للتواصل بينهم، يملك كل عميل JADE  صندوق بريدي يستقبل الرسائل المرسلة إليه، تكون هذه الرسائل في قائمة مرتبة حسب زمن وصولها.

2.    تركيبة رسالة JADE

يستعمل عملاء JADE رسائل متوافقة مع معايير FIPA ACL (FIPA agent communication language) . هذه الرسائل عبارة عن instance  من الصنف ACLMessage   الموجود في الـ package  المسمى jade.lang.acl  .

تتكون رسائل JADE  من التالي:

-          مرسل الرسالة: يتم ملء هذه الخانة بطريقة آلية لدى إرسال الرسالة.

-          مجموعة المستقبلين: يمكن إرسال نفس الرسالة إلى أكثر من عميل في آن واحد.

-          communicative act : يمثل هدف العميل من إرسال الرسالة كإخبار العميل المستقبل بأمر ما، أو عمل call for proposal أو إرسال إجابة عن طلب ما …

-          محتوى الرسالة.

-          إضافة إلى مجموعة من الخانات الأخرى  مثل اللغة المستعملة في كتابة محتوى الرسالة، الـ timOut ،…

3.    إرسال رسالة:

ليقوم عميل JADE  بإرسال رسالة ما كل ما عليه هو ملء خانات رسالة JADE   و من ثم استدعاء الدالة send  الخاصة بالصنف Agent

المثال التالي يوضح كيفية إرسال رسالة إلى العميل المسمى said  و يكون محتوى الرسالة   …salam  :

ACLMessage message = new ACLMessage(ACLMessage.INFORM);

message.addReceiver(new AID(“said”, AID.ISLOCALNAME));

message.setContent(“salam…”);

send(message);

4.    استقبال رسالة:

استقبال رسالة سهل مثل سهولة إرسال رسالة، بل أكثر من ذلك، فقط يكفي استدعاء الدالة receive()  الخاصة بالصنف Agent

و ذلك كالتالي:

ACLMessage messageRecu = receive();

أحيانا نحتاج إلى الرد على صاحب الرسالة، يمكن معرفة هوية المرسل باستعمال الدالة  getSender() الخاصة بالصنف ACLMessage  كالتالي:

ACLMessage message = new ACLMessage(ACLMessage.INFORM);

message.addReceiver(messageRecu.getSender());

message.setContent(“the response”);

send(message);

5.    انتظار وصول رسالة:

في بعض الأحيان ، يمكن لعميل ما أن يقوم بتنفيذ مهمة  معينة، لكن زمن تنفيذ المهمة مرتبط بزمن استقبال رسالة من agent معين.

من الممكن جدا جعل العميل ينتظر الرسالة بالطريقة التالية

ACLMessage message =null ;

While (message == null){

Message = receive() ;

}

//المهمة الواجب القيام بها

لكن كما تلاحظون فإن هذا النوع من الانتظار يستهلك موارد كثيرة بحكم أن العميل ليس متوقفا كلية عن العمل و إنما “يقوم بالانتظار”

يوفر الصنف Behaviour  دالة تسمح بإيقاف الـ behaviour  إلى غاية استقبال رسالة

الدالة هي block()  حيث أنه بمجرد استدعائها فإن الـ behaviour  الحالي يتوقف و لا يكمل تنفيذه إلا بعد استقبال رسالة

Message = receive() ;

If (message == null) block();

//المهمة الواجب القيام بها

تجب الإشارة هنا إلى أنه في حالة استقبال رسالة فإن كل الـ behaviours الخاصة بالـعميل و التي كانت متوقفة تواصل نشاطها

6.    اختيار رسالة من صندوق البريد:

عندما يقوم العميل بالتواصل مع أكثر من عميل جملة واحدة، فإنه قد يحتاج في وقت معين ألا يستقبل إلا الرسائل القادمة من  عميل معين أو التي تحقق شرطا معينا،

من أجل ذلك يقوم العميل بتعريف pattern  للرسائل التي يود قراءتها و ذلك كالتالي:

MessageTemplate template = MessageTemplate.MatchPerformative(ACLMessage.INFORM);

ACLMessage msg = myAgent.receive(template);

7.    مثال:

المثال التالي يوضح كيفية التواصل بين عميلين AgentA  وAgentB

يقوم العميل AgentA بتوليد أرقام عشوائية و من ثم يرسلها إلى العميل AgentB

العميل AgentB  يقوم بجمع هذه الأعداد

إذا لم يتجاوز المجموع حدا معينا  (50) فإن العميل  AgentB  يخبر العميل AgentA بإنه لا يزال في إمكانه استقبال المزيد،

في حال ما إذا تجاوز المجموع  50  فإن العميل AgentB  يرسل رسالة  للـ AgentA  ليوقف إرسال الرسائل  و ينهي العميلان تنفيذهما.

كود العميل AgentA

import jade.core.AID;

import jade.core.Agent;

import jade.core.behaviours.FSMBehaviour;

import jade.core.behaviours.OneShotBehaviour;

import jade.lang.acl.ACLMessage;

public class AgentA extends Agent {

protected void setup(){

System.out.println(“—————————————“);

System.out.println(“—————-agent A—————-“);

System.out.println(“—————————————“);

FSMBehaviour agentA_beh= new FSMBehaviour();

agentA_beh.registerFirstState(new waitingAgentB(), “waitingAgentB”);

agentA_beh.registerState(new SendingNumber(), “SendingNumber”);

agentA_beh.registerLastState(new end(), “end”);

agentA_beh.registerDefaultTransition(“waitingAgentB”, “SendingNumber”);

agentA_beh.registerTransition(“SendingNumber”, “waitingAgentB”,0);

agentA_beh.registerTransition(“SendingNumber”, “end”, 1);

addBehaviour(agentA_beh);

}

private class waitingAgentB extends OneShotBehaviour{

@Override

public void action() {

System.out.println(“Waiting for AgentB”);

block();

}

}

/*****************************************************************/

private class SendingNumber extends OneShotBehaviour{

int valeurRetour = 0;

@Override

public void action() {

ACLMessage messageRecu = receive();

if (messageRecu.getContent().equalsIgnoreCase(“ready”) ) valeurRetour=0;

else  valeurRetour=1;

int chiffre = (int)(Math.random()*10);

System.out.println(“sending … “+ chiffre);

ACLMessage message = new ACLMessage(ACLMessage.INFORM);

message.addReceiver(messageRecu.getSender());

message.setContent(chiffre+””);

send(message);

}

public int onEnd(){

return valeurRetour;

}

}

/*****************************************************************/

private class end extends OneShotBehaviour{

@Override

public void action() {

System.out.println(“shutdonw agent”);

myAgent.doDelete();

}

}

}

كود العميل AgentB

import java.security.acl.Acl;

import jade.core.AID;

import jade.core.Agent;

import jade.core.behaviours.FSMBehaviour;

import jade.core.behaviours.OneShotBehaviour;

import jade.lang.acl.ACLMessage;

public class AgentB extends Agent {

int total = 0;

boolean stop = false;

protected void setup(){

System.out.println(“—————-agent B—————-“);

FSMBehaviour agentB_beh= new FSMBehaviour();

agentB_beh.registerFirstState(new Waiting for number(), “Waiting for number”);

agentB_beh.registerState(new Display(), “Display”);

agentB_beh.registerState(new end(), “end”);

agentB_beh.registerTransition(“Waiting for number”, “Display”,0);

agentB_beh.registerTransition(“Waiting for number”, “end”,1);

agentB_beh.registerDefaultTransition(“Display”, “Waiting for number”);

addBehaviour(agentB_beh);

}

private class Waiting for number extends OneShotBehaviour{

int valeurRetour = 0;

public void action() {

ACLMessage message = new ACLMessage(ACLMessage.INFORM);

message.addReceiver(new AID(“AgentA”, AID.ISLOCALNAME));

if(!stop){

message.setContent(“ready”);

send(message);

valeurRetour=0;

block();

}else{

message.setContent(“done”);

send(message);

valeurRetour=1;

}

}

public int onEnd(){

return valeurRetour;

}

}

/**********************************************************************/

private class Display extends OneShotBehaviour{

@Override

public void action() {

ACLMessage messageRecu = receive();

total+= Integer.parseInt(messageRecu.getContent());

System.out.println(“number received= “+ messageRecu.getContent());

System.out.println(” total = “+total);

if (total > 50) stop = true;

}

}

/**********************************************************************/

private class end extends OneShotBehaviour{

@Override

public void action() {

System.out.println(“shutdonw agent”);

myAgent.doDelete();

}

}

}

About these ads

138 thoughts on “الـ Communication بين عملاء الـ Jade

  1. السلام عليكم،

    لقد قرأت هذا الدرس في موقع developpez.com و بعثت لك على إيميلك الخاص رسالة فيها سؤال عن الدرس.. لم أنتبه أن المدونة تحتوي أيضا على نفس الدروس ، لذا اسمح لي بطرح أسئلتي المستقبلية هنا
    عموما سأنتظر إجابتك على سؤالي السابق، و سأعود إن كانت عندي استفسارات أخرى (طبعا إن سمحت لي بذلك)
    شكرا لك على الدروس الجميلة و المبسطة جدا و السلام

  2. مرحبا من جديد،
    أولا،شكرا لك على الإجابة هنا و هناك

    أما بخصوص مقالك الأول، نعم لقد قرأته سابقا، و بعد تطبيق ماجاء في المقال ظهرت لي النتائج التالية:
    ************************************
    13 sept. 2009 11:52:55 jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE 3.5 – revision 5988 of 2007/06/21 11:02:30
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    13 sept. 2009 11:54:59 jade.core.BaseService init
    INFO: Service jade.core.management.AgentManagement initialized
    13 sept. 2009 11:55:00 jade.core.BaseService init
    INFO: Service jade.core.messaging.Messaging initialized
    13 sept. 2009 11:55:01 jade.core.BaseService init
    INFO: Service jade.core.mobility.AgentMobility initialized
    13 sept. 2009 11:55:01 jade.core.BaseService init
    INFO: Service jade.core.event.Notification initialized
    13 sept. 2009 11:55:02 jade.core.messaging.MessagingService clearCachedSlice
    INFO: Clearing cache
    13 sept. 2009 11:55:12 jade.mtp.http.HTTPServer
    INFO: HTTP-MTP Using XML parser org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
    13 sept. 2009 11:55:12 jade.core.messaging.MessagingService boot
    INFO: MTP addresses:

    http://MMM-463611E3B40:7778/acc

    13 sept. 2009 11:55:14 jade.core.AgentContainerImpl startBootstrapAgents
    GRAVE: Cannot create agent DemandeurSce: Class AgentMédiateur.AgentDemandeur for agent ( agent-identifier :name DemandeurSce@mmm-463611e3b40:1099/JADE ) not found [nested java.lang.ClassNotFoundException: AgentMédiateur.AgentDemandeur]
    13 sept. 2009 11:55:14 jade.core.AgentContainerImpl joinPlatform
    INFO: ————————————–
    Agent container Main-Container@mmm-463611e3b40 is ready.
    ——————————————–
    ************************************
    المشكلة منذ البداية أنه لم يجد الـ AgentB لكن لم أفهم لما؟؟

    عندي مشكلة أخرى، عندما أعدت تنفيذ الكود مرة أخرى ظهرت لي هذا:

    **********************************************
    13 sept. 2009 12:08:13 jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE 3.5 – revision 5988 of 2007/06/21 11:02:30
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    13 sept. 2009 12:10:33 jade.core.AgentContainerImpl joinPlatform
    GRAVE: Some problem occurred while joining agent platform.
    jade.core.ProfileException: Can’t get a proxy to the Platform Manager [nested jade.core.IMTPException: Communication failure while starting JADE Runtime System. Check if the RMIRegistry CLASSPATH includes the RMI Stub classes of JADE. [nested java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
    java.net.BindException: Address already in use: JVM_Bind]]
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:476)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:490)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:323)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:459)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    jade.core.IMTPException: Communication failure while starting JADE Runtime System. Check if the RMIRegistry CLASSPATH includes the RMI Stub classes of JADE. [nested java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
    java.net.BindException: Address already in use: JVM_Bind]
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:272)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:552)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:476)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:490)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:323)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:459)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
    java.net.BindException: Address already in use: JVM_Bind
    at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:310)
    at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:218)
    at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:393)
    at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:129)
    at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:190)
    at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:92)
    at sun.rmi.registry.RegistryImpl.(RegistryImpl.java:78)
    at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:186)
    at jade.imtp.rmi.RMIIMTPManager.getRmiRegistry(RMIIMTPManager.java:209)
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:223)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:552)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:476)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:490)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:323)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:459)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Caused by: java.net.BindException: Address already in use: JVM_Bind
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
    at java.net.ServerSocket.bind(ServerSocket.java:319)
    at java.net.ServerSocket.(ServerSocket.java:185)
    at java.net.ServerSocket.(ServerSocket.java:97)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:27)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:333)
    at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:649)
    at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:299)
    … 17 more
    13 sept. 2009 12:10:41 jade.core.Runtime$1 run
    INFO: JADE is closing down now.
    **********************************************
    و الآن فقط تذكرت أنه نفس السبب الذي جعلني أعزف عن تطبيق ماجاء في المقال (في السابق)، لأنه يصلح لمرة واحدة فقط، فأول ما أطبق المراحل يفتح “الجاد” مرة واحدة و بعدها يمتنع عن الإنفتاح و تظهر لي هذه الرسالة،
    لذا ما هو السبب؟؟
    أعتذر عن الإطالة، سلام.

  3. 1. كيف تقومين بتشغيل العميل AgentDemandeur هل باستعمال eclipse أو بسطر الأوامر أم بـالواجهة الرسومية الخاصة بالـ Jade

    2.هل تستعملين أي Package في المشروع الذي يحوي العميل AgentDemandeur

    3. لم يجد العميل AgentB لأنه ربما لم تقومي بتشغيل العميل بعد ، إن كنت قد قمت بتشغيله ، ما هي الطريقة التي استعملتها في ذلك و كيف شغلت العميل الثاني (هل باستعمال eclipse أو بسطر الأوامر أم بـالواجهة الرسومية الخاصة بالـ Jade)

    ما أنصح به في مثل هذه الحالات هو التالي:
    1. إنشاء مجلد جديد (مثلا c:\agentLand)
    2.إضافة مسار هذا المجلد إلى المتغير classpath
    3. نقل ملفات .class (كل محتوى المجلد bin) الخاصة بالعملاء الذين نريد تشغيلهم إلى هذا المجلد

    4. تشغيل العملاء واحد تلو الآخر (في المثال الموضح في الدري نشغل العميل A ثم العميل B)باستعمال الأمر التالي (يكتب في سطر الأوامر):

    java jade.Boot -container AgentName:AgnetPackage.AgentClass

    طبعا إذا لم تكوني تستعملين أي Package فإن الأمر يصبح على الشكل التالي:
    java jade.Boot -container AgentName:AgentClass

    جربي و أخبرينا بالنتيجة

  4. أنا مضطرة للمغادرة الآن، لذا سأجرب ما قلته لي و سأعطيك النتيجة في أقرب وقت ممكن إن شاء الله، نحياتي و السلام

  5. السلام عليكم،
    لقد عدت و العود أحمد…
    لقد اتبعت المراحل المذكورة و كل شيء تمام، لكن كالعادة هناك مشكلة، قبل طرح المشكل سأخبرك بما فعلت:
    لقد خلقت عميلين:
    واحد إسمه:AgentDemandeur

    voici son code:
    **********************************************
    protected void setup() {
    System.out.println(“Hello! Agent Demandeur”+getAID().getName()+”envoyer une demande”);
    ACLMessage demande = new ACLMessage(ACLMessage.INFORM);
    demande.addReceiver(new AID(“AgentMediateur”, AID.ISLOCALNAME));
    demande.setContent(“Bonjour”);
    send(demande);
    }
    **********************************************
    و الثاني:AgentMediateur
    son code est:
    **********************************************
    protected void setup (){
    ACLMessage msg= receive();
    if (msg!=null){
    ACLMessage message = new ACLMessage(ACLMessage.INFORM);
    message.addReceiver(msg.getSender());
    message.setContent(“la reponse”);
    send(message);
    }
    else {
    block();
    }
    }
    **********************************************
    و في مرحلة التنفيذ: قمت باستعمال
    invite de commandes pour executer les deux agents

    العميل الأول لم تظهر معه مشكلة و انفتح “الجاد” بطريقة عادية، لكن عند تنفيذ الثاني ظهر لي هذا:

    INFO: JADE is closing down now

    لماذا لم يعمل العميل الثاني؟؟

  6. لاحظي جيدا أن الكود الثاني خاطئ و لا يمكن له أن يشتغل (هل فعلا قمت بعمل compil لهذا الكود أو أن هذا جزء من الكود الكامل)

    الدالة block تخص الـصنف Behaviour

    يجب عليك أن تقومي بكتابة برنامج كامل يحتوي behaviour لتستطيعي استعمال الدالة block()

    سؤال: ماذا يفترض أن يقوم به برنامجك و تستعملين أي IDE للبرمجة بـالجافا ؟

  7. أنا آسفة جدا لأني أخطأت و بعثت لك بالكود القديم، لأنني صححته واستعملت:
    blockingReceive() مكان block()
    و هو صحيح و ليس فيه اية خطأ “على الأقل كتابيا” أما الـ sémantique فلست متأكدة مئة بالمئة، لكن يبدوا لي صحيحا

  8. أنا آسفة جدا فأنا لم أنتبه و بعثت لك بالكود القديم، لأنني صححته واستعملت:
    blockingReceive() مكان block()
    و هو صحيح و ليس فيه اية خطأ “على الأقل كتابيا” أما الـ sémantique فلست متأكدة مئة بالمئة، لكن يبدوا لي صحيحا

  9. قومي برفع الملفات المصدرية (.java file) على rapidhsare أو أي موقع آخر
    و أرسلي الرابط ليتسنى لي متابعة البرنامج جيدا

  10. تفضل:

    http://www.4shared.com/file/132351990/f255b8e4/exemple.html

    على العموم لقد جربت تقريبا المثال الموضوع في مقالك، و الهدف هو أنني أريد أن أتعلم كيفية جعل عميلين يتصلان و يتبادلان المعلومات فيما بينهما، لكن واجهتني بعض المشاكل، سأترك لك المثالين لكي ترى ما هو المشكل و سأعود بعد الإفطار إن شاء الله، أعتذر عن إزعاجك و صح فطورك :)

  11. السلام عليكم،
    عندي خبر سار أخي الكريم: و أخيييرااااااااااااا نجحت في تنفيذ كود العميلين الموجودان في مقالتك (مثال الأرقام العشوائية) و مبدئيا أصبحت أعرف الآن كيف أشغل الإتصال بين عميلين… هذا رائع، رائع جدا :)

    على العموم شكرا جزيلا لك ، فلولا مقالتك لما عرفت كل هذا و بهذه السرعة…… سأعود إن واجهت أية مشاكل أخرى “هذا إن لم تمانع بالطبع” تحياتي لك و السلام

  12. الحمد لله، مبروك
    طبعا يمكنك الرجوع في أي وقت ممكن و طرح ما بدا لك من الأسئلة و سأحاول جاهدا أن لا أبخل بما أعرف

    هدفي من كتابة هذه المقالات على الـ Jade هو بالدرجة الأولى أن أجنب غيري التعب و الدوران الذين واجهتهما في بداياتي مع الـ Jade منذ أقل من سنة من الآن

    وفقك الله

  13. Salem

    J’ai essayé votre exemple et j’ai obtenu cette erreur :
    java.lang.NoSuchMethodError: main
    Exception in thread “main”

    Pourquoi j’ai eu cette erreur ?et merci

  14. صراحة رسالة الخطأ غريبة جدا كون أن العميلين الاثنين لا يحتويان على الدالة Main فلماذا يحدث خطأ مع الدالة Main ؟

    هل قمت بإنشاء مشروع جديد في Eclipse و من ثم أنشأت ملفين .java جديدين فيها و قمت بنسخ الكود إليها

    إن كان الأمر كذلك فلربما لدى إنشاء الملفين قمت باختيار الخيار الذي يسمح بإضافة
    public static void main(String[] args) {

    إلى الملف

    أعيدي التحقق من الملفين جيدا

    حل آخر:
    الرابط التالي يحوي الملفين AgentA.java و AgentB.java جربيهما و أخبرينا إن كان يحدث نفس الخطأ معك

    http://www.4shared.com/file/132546460/bfbc56c/src.html

    ملاحظة: بما أن لغة المدونة هي العربية فرجائي أن تكتب جميع التعليقات بالعربية ليتسنى للجميع المتابعة :)

  15. Je veux bien écrire en arabe mais j’ai un problème avec mon ordinateur il me permet d’écrire en arabe, excusez moi je vais bientôt régler ce problème,
    Concernant le pgm j’ai refait toutes les étapes mais c’est la même erreur qui s’affiche.

  16. السلام عليكم،
    أختي سمية2 هل رايت هذا الرابط، يوجد فيه توضيحات للأخ djug عن كيفية تنفيذ العميلين الواحد تلو الآخر،

    http://www.developpez.net/forums/d792666/java/communaute-java/communications-agents-jade/

    أيضا عند التنفيذ لا تستعملي الـ eclips بل invite de commande من أجل compilation et l’execution ، هذه commande الـ compilation :
    compilejade nameclasse
    أعتذر أخي عن التطفل ،سلام

  17. هل هناك سميتان أم سمية واحدة في الردود ؟

    كنت أظن أني أحادث نفس الشخص :s

    هل تم حل المشاكل أم لا تزال عالقة ؟

  18. نعم أخي هناك سميتان :)
    بالنسبة لي فلقد أخبرتك البارحة أنني نجحت في تنفيذ المثالين، أما بالنسة لسمية2 فلا أعلم؟؟ يبدوا أنها مازالت تحاول….

  19. J’ai refais tout le travail et j’ai eu cette erreur :

    1 janv. 2004 00:32:31 jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE snapshot – revision $WCREV$ of $WCDATE$
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    1 janv. 2004 00:32:32 jade.core.AgentContainerImpl joinPlatform
    GRAVE: Some problem occurred while joining agent platform.
    jade.core.ProfileException: Can’t get a proxy to the Platform Manager [nested jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]]
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:574)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:336)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:472)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:276)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:336)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:472)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    java.rmi.AlreadyBoundException: ServiceManager
    at sun.rmi.registry.RegistryImpl.bind(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
    at sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
    at java.rmi.Naming.bind(Unknown Source)
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:224)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:336)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:472)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    1 janv. 2004 00:32:32 jade.core.Runtime$1 run
    INFO: JADE is closing down now.

    quel est le problème?

  20. أعيدي تنصيب الـ Jade من جديد (الدرس الأول للـ Jade) و أخبرينا بالنتيجة

    http://djug.wordpress.com/2009/03/25/%D8%A8%D8%B1%D9%85%D8%AC-%D8%A3%D9%88%D9%84-%D8%B9%D9%85%D9%8A%D9%84-%D9%84%D9%83-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-jade-%D9%88-eclipse-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89/

    و أخبرينا إن كان يمكنك تشغيل العميل المذكور في الدرس

  21. Quand j’exécute l’AgentA sous éclipse, il m’ouvre la platforme jade et affiche les résultats suivants :

    1 janv. 2004 02:42:42 jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE snapshot – revision $WCREV$ of $WCDATE$
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    1 janv. 2004 02:42:45 jade.core.BaseService init
    INFO: Service jade.core.management.AgentManagement initialized
    1 janv. 2004 02:42:45 jade.core.BaseService init
    INFO: Service jade.core.messaging.Messaging initialized
    1 janv. 2004 02:42:45 jade.core.BaseService init
    INFO: Service jade.core.mobility.AgentMobility initialized
    1 janv. 2004 02:42:45 jade.core.BaseService init
    INFO: Service jade.core.event.Notification initialized
    1 janv. 2004 02:42:45 jade.core.messaging.MessagingService clearCachedSlice
    INFO: Clearing cache
    1 janv. 2004 02:42:46 jade.mtp.http.HTTPServer
    INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
    1 janv. 2004 02:42:46 jade.core.messaging.MessagingService boot
    INFO: MTP addresses:

    http://INF-4BF7A36B3D3:7778/acc

    1 janv. 2004 02:42:46 jade.core.AgentContainerImpl joinPlatform
    INFO: ————————————–
    Agent container Main-Container@inf-4bf7a36b3d3 is ready.
    ——————————————–

  22. يا أختي الفاضلة

    هل قمت بإعادة تنصيب الـ Jade -كما طلبت منك-

    اتبعي الدرس الأول و أعيدي تنصيب الـ Jade و من ثم جربي تشغيل العميل (العميل الموجود في الدرسي الأول) و أخبرينا ماذا يظهر لك

    رسالة الخطأ السابقة غير كاملة لذا لا أستطيع فهم ما الذي حدث

  23. Oui j’ai refait tout et la même chose qui se déroule :la platforme jade s’ouvre et le résultat est :

    1 janv. 2004 05:11:52 jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE snapshot – revision $WCREV$ of $WCDATE$
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    1 janv. 2004 05:11:55 jade.core.BaseService init
    INFO: Service jade.core.management.AgentManagement initialized
    1 janv. 2004 05:11:55 jade.core.BaseService init
    INFO: Service jade.core.messaging.Messaging initialized
    1 janv. 2004 05:11:56 jade.core.BaseService init
    INFO: Service jade.core.mobility.AgentMobility initialized
    1 janv. 2004 05:11:56 jade.core.BaseService init
    INFO: Service jade.core.event.Notification initialized
    1 janv. 2004 05:11:56 jade.core.messaging.MessagingService clearCachedSlice
    INFO: Clearing cache
    1 janv. 2004 05:11:56 jade.mtp.http.HTTPServer
    INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
    1 janv. 2004 05:11:56 jade.core.messaging.MessagingService boot
    INFO: MTP addresses:

    http://INF-4BF7A36B3D3:7778/acc

    1 janv. 2004 05:11:56 jade.core.AgentContainerImpl joinPlatform
    INFO: ————————————–
    Agent container Main-Container@inf-4bf7a36b3d3 is ready.
    ——————————————–

  24. Salem
    C’est bon, l’exemple s’exécute très bien, comme j’ai déjà dit avant la platforme jade s’ouvre après j’ai créé les deux agents dans la platforme et là ils s’exécutent normalement.
    Merci

  25. J’ai dit que ,quand j’exécute dans éclipse soit l’AgentA soit l’AgentB , la platforme jade s’ouvre ,alors j’ai créé dans la platformle un agent son nom AgentA et un autre avec le nom AgentB et là je vois dans le console d’eclipse l’exécution des 2 agents .

  26. السلام عليكم،
    لقد قمت بخلق عميلين، الأول يبعث برسالة إلى الثاني، هذا هو كود العميلين:

    Agent1:

    /*****************************************************/

    public class Agent1 extends Agent {
    protected void setup(){
    System.out.println(“l’agent “+getAID().getName()+” est pret pour envoyer une demande”);
    ACLMessage demande = new ACLMessage(ACLMessage.REQUEST);
    demande.addReceiver(new AID(“Agent2″, AID.ISLOCALNAME));
    demande.setProtocol(FIPANames.InteractionProtocol.FIPA_RECRUITING);
    demande.setContent(“Bonjour”);
    send(demande);
    }
    }

    /*****************************************************/

    Agent2:

    /*****************************************************/

    public class Agent2 extends Agent {
    protected void setup (){
    System.out.println(“l’agent ” + getAID().getName() + ” est pret pour la reception des demandes”);
    ACLMessage demande= receive();
    if (demande!= null){
    //le teste de protocole recruiter
    if (demande.getProtocol()==FIPANames.InteractionProtocol.FIPA_RECRUITING){
    System.out.println(“c’est le protocole recruiter”);
    ACLMessage reponse= demande.createReply();
    reponse.setPerformative(ACLMessage.INFORM);
    send(reponse);
    }
    else {
    //le teste de broker
    if (demande.getProtocol()==FIPANames.InteractionProtocol.FIPA_BROKERING){
    System.out.println(“c’est le protocole broker”);
    }
    }
    }
    else {
    System.out.println(“le message est vide”);
    blockingReceive();
    }
    //System.out.println(“l’interaction est terminer”);
    }
    }

    /*****************************************************/

    و عند تنفيذ العميلين تظهر لي النتيجة التالية:

    le message est vide

    لماذا وجد العميل الثاني الرسالة فارغة؟؟
    هل وصلت أم لم تصله من البداية؟؟؟

    عندي سؤال: كيف أتأكد 100 بالمئة من وصول أي رسالة لأي عميل؟؟

  27. من الطبيعي جدا أن تظهر هذه النتيجة و ذلك للسبب التالي:
    1. لدى تشغيل العميل الأول agent1 قبل العميل الثاني Agent2 فإنه لدى وصوله إلى السطر
    if (demande!= null)

    يجد أن demande فارغة فيمر مباشرة إلى الـ else الذي يظهر فيه الرسالة
    و هذا كله قبل أن يرسل العميل الثاني رسالته
    2. لدى تشغيل العميل الثاني قبل الأول فإنه يتم إرسال الرسالة قبل أن يتم تشغيل العميل الأول و بالتالي لا يستقبلها

    حل المشكل يكمن في إنشاء behaviour للعميل الأول لقراءة الرسالة و يكون أول أمر في هذا الـ behaviour هو block
    بحيث أن العميل أول ما يبدأ تنفيذه يتوقف في انتظار الرسالة
    لاحظي في المثال الموجود في الدرس
    العميل AgentA يستعمل FSMBehavioour
    أول subBehaviour له عبارة عن الـ behaviour المسمى waitingAgentB
    أي أن العميل بمجرد بداية تنفيذه ينتظر العميل الآخر

    أما للتأكد من وصول الرسالة إلى العميل إليه ، فإن كل رسالة ترسل إلى عميل يكون حيا وقت إرسال الرسالة فإنه يستقبلها
    كما يمكن تتبع و معرفة محتوى كل رسالة و معرفة كل الـ communication بين العملاء باستعمال العميل sniffer

    قمت منذ بعض الأيام بعمل video صغيرة لكيفية استعمال sniffer كإجابة لأحد الأسئلة التي طرحت عليه عبر البريد الالكتيروني
    يمكنك التحميل من هنا:

    http://www.4shared.com/file/132935842/98e8c23/Sniffer.html

  28. السلام عليكم،
    شكرا على الإجابة،
    سأفعل ما قلته لي و أخبرك بالنتيجة في اقرب وقت ممكن
    بخصوص الـ video لقد حملته اليوم بالصدفة “قبل أن رؤيتي لإجابتك” فعلا رائع، لقد أعجبني جدا و الأهم أنه أفادني، فجزاك الله خيرا لكل هذه الدروس المفيدة و السلام.

  29. المشكل الحالي ليس مشكلا في الـ Jade و إنما في الـ java

    لاحظي أنك قمت بالمقارنة بين 2 من الـ string باستعمال ==

    في كل من:

    if (demanderecu.getProtocol()==FIPANames.InteractionProtocol.FIPA_RECRUITING)
    و

    if (demanderecu.getProtocol()==FIPANames.InteractionProtocol.FIPA_BROKERING)

    و الأصح هو استعمال الدالة equal للمقارنة بين الـ strings

    ليصبح الكود كالتالي:

    http://www.4shared.com/file/133885533/23eb5021/Agentsmodif.html

    جربي و أخبريني بالنتيجة

    بالتوفيق إن شاء الله

  30. السلام عليكم، لقد عدلت في الكود كما قلت لي، لكن لم يتغير شيء، و كما قلت لك سابقا المشكلة أنه لم يجد العميل 2 و كانت ولازالت تظهر لي هذه الرسالة(قبل و بعد التعديل) عند استعمال العميل sniffer

    (MTS-error
    (agent-identifier
    :name Agent2@mmm-463611e3b40:1099/JADE)
    (internal-error “Agent not found: getContainerID() failed to find agent Agent2@mmm-463611e3b40:1099/JADE”)))

    !!!!!!!!!؟؟؟؟؟ ما رايك؟؟؟؟؟؟؟

    على كل سأدقق في كود العميلين أكثر لربما هناك خطأ لم أنتبه له

    أخي djug شكرااااا جزيلاااااا لك، لقد أتعبتك معي و أعتذر عن إزعاجك، كما أتمنى لك عيد فطر مبارك و سعيد و كل عام و أنت بألف صحة و خير :)

  31. أعدت تشغيل البرنامج الآن فقط (البرنامج المعدل) فوجدت أن العميل الثاني يستقبل الرسالة التالية من العميل الأول:

    c’est le protocole recruiter

    هل هذا هي الرسالة التي يجب أن يتلقاها ؟

    أمر آخر : يجب تشغيل العميل الثاني قبل العميل الأول لنجاح العملية

    بالتوفيق

  32. Bonjour,j’ai un ensemble d’agents qui envoient leurs messages à un agent ,ce dernier choisit l’agent le plus offrant il l’envoit un message d’acceptation et les autres un message de rejet .Comment j’obtiens l’AID de l’agent le plus offrant et les AID des autres agents.J’ai écrit ce code mais il ne marche pas bien.voici le code:

  33. يمكن تصور عدة حلول لهذا المشكل

    قمت بكتابة خوارزمية تبين إحدى الطرق التي تمكننا من حل المشكل

    entier OffreMaximal = 0
    AID AgentPlusOffrant = -1

    AID ListDesAutresAgents= NULL;

    POUR chaque reponse

    si reponse.Offre > offreMaximal alors
    {
    offreMaximal = reponse.offre
    ListDesAutresAgents.ajouter(AgentPlusOffrant)
    AgentPlusOffrant = reponse.AID;

    }
    SINON
    {
    ListDesAutresAgents.ajouter(reponse.AID)
    }

    envoiMessageAcceptation(AgentPlusOffrant)
    pour chaque agent de ListDesAutresAgents {envoieMessageRefus()}

    يبقى الآن أن تحولي الخوازمية إلى شيفرة بالـ java و الـ JADE

  34. هناك العديد من المشاكل في الكود و كلها راجع إلى أنك كتبت
    AID ListDesAutresAgents= null;
    مما يعني أن ListeDesAuteursAgents سيحتوي معرف عميل واحد فقط

    لكنه يجب أن يكون جدولا أو ArrayList ليحتوي كل العملاء المرفوضين

    و عليه التعديلات (الأولية) التي يجب عملها هي كالتالي:

    السطر 23:
    ArrayList ListDesAutresAgents = new ArrayList() ;

    السطر125: ListDesAutresAgents.add(reponse.getSender());

  35. السلام عليكم، أخي الكريم عندي مشكلة مع الجاد “و لم أنتبه لها من قبل”، عندما أشغله من ال eclips أو عن طريق les commandes تظهر لي هذه الرسالة:

    *************************************
    25 oct. 2009 15:42:39 jade.core.AgentContainerImpl joinPlatform
    GRAVE: Some problem occurred while joining agent platform.
    jade.core.ProfileException: Error setting up multicast socket [nested java.net.SocketException: error setting options]
    at jade.core.MulticastMainDetectionListener.(MulticastMainDetectionListener.java:51)
    at jade.core.MainDetectionManager.export(MainDetectionManager.java:413)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:312)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:459)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    java.net.SocketException: error setting options
    at java.net.PlainDatagramSocketImpl.join(Native Method)
    at java.net.PlainDatagramSocketImpl.join(PlainDatagramSocketImpl.java:172)
    at java.net.MulticastSocket.joinGroup(MulticastSocket.java:276)
    at jade.core.MulticastMainDetectionListener.(MulticastMainDetectionListener.java:48)
    at jade.core.MainDetectionManager.export(MainDetectionManager.java:413)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:312)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:459)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    25 oct. 2009 15:42:39 jade.core.Runtime$1 run
    INFO: JADE is closing down now.
    ***************************************
    مع العلم أن هذه الرسالة تظهر عنما أطفئ “المودام” و أكون غير متصلة بالأنترنيت،و عندما أشغل المودام يعمل الجاد بطريقة عادية جدا، سواء من eclips أو les commandes ، فما هو السبب في رأيك؟؟ شكرا و السلام

  36. صادفني نفس المشكل من قبل و لم أجد له تفسيرا

    هل تستعملين الـ migration لعملاء الـ jade؟
    و هل هناك استعمال للـ socket من قبل عملاء الـ jade؟

  37. “”هل تستعملين الـ migration لعملاء الـ jade؟
    و هل هناك استعمال للـ socket من قبل عملاء الـ jade؟””

    لا

  38. لم أتخلص من المشكلة لأني -على كل حال-كنت أعمل على تطبيق يحوي عملاء يقومون بالتنقل من جهاز إلى آخر و يرسلون بعض البيانات عن طريق الـ socket
    أي أن البيئة التي عملت عليها كانت عبارة عن شبكة محلية و بالتالي لم أبحث عن حل للمشكلة في حال كان الجهاز غير متصلا بالشبكة

  39. مشكور اخى على هذا المواد القيمه ,,
    المثال شغال تمام على ال netbeans

    انا عاوز اقدر اضيف اكتر من عميل ,
    فاضيفت AgentC بنفس كود AgentB

    بس مش عارف ليه AgentA مش عاوز يكمل باكتر من عميل ؟؟

    here is the output:- “انا ضيفت شويه System.out من اجل التوضيح”

    [AgentC] The ->ReadyReadyReady<- Message have been sent !!!
    [AgentA] Waiting for AgentB

  40. اسف كنت منشغل جدا الايام الماضيه ,,

    كيف يمكن ان اضيف اكتر من عملين ,, مثال 10 عملاء

    ويكون واحد منهم هو الاساس يعمل broadcast لكل العملاء الاخريين

  41. مثلما شرحت في الدرس تماما

    العميل الأساسي يضيف أسماء العملاء الآخرين إلى الرسائل التي يود إرسالهاو ذلك باستعمال addReceiver(AgentAID)

    و من ثم يرسل الرسائل

  42. سلام ,,
    اخى انا اخدت المثال السابق للعملين وحاولت ان استغل الرسائل بدلا من ارقام عشوائيه الى اسئله

    بحيث AgentA يكتب مثلا كلمه “Allah” , ولو كانت نتعرفه لدى AgentB يرسل له اجابه مححده .

    فى اول دوره يشتغل دون مشاكل, ولكن بعد ذلك AgentB يرسل الرساله Ready قبل المعاد المحدد و بذلك AgentA يكون منتظر دون جدوى

    اخيرا انا حملت الكود على اللينك التالى

    http://www.4shared.com/file/185316878/9355cbce/Agents.html

    ارجو المساعده اخى

  43. Bonjour,
    Je suis en train de développer un SMA , et je suis dans les premiers pas , étant un noob avec Jade ,j’ai rencontré quelques problèmes .
    Je travaille avec eclipse , lorsque je crée et je lance le premier agent , j’exécute le deuxième agent mais j’ai toujours cette erreur :

    GRAVE: Some problem occurred while joining agent platform.
    jade.core.ProfileException: Can't get a proxy to the Platform Manager [nested jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]]
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:574)
    .
    .[...]
    .
    ade.core.Runtime$1 run
    INFO: JADE is closing down now
    .

    Merci pour m’aider et félicitation pour ton blog et la qualité de tes articles .

  44. السلام عليكم ورحمه الله
    أريد أن أسأل عن مجموعة العملاء
    هل اضعهم في نفس البكج وكلاسات منفصله
    أو كل عميل في مشروع منفصل
    أنا مبتدئ أرجوا المساعده في أقرب وقت فأنا في أمس الحاجه لذلك
    بالتوفيق

  45. يمكنك وضع جميع العملاء في Package واحد
    كما يمكن عمل Package لكل عميل و حتى عمل مشروع خاص بكل عميل

  46. اشكرك
    لكن يوجد خطأ في الكود عند
    @Override
    كيف احل هذا الخطأ
    وأيضا ارجوك ان تضع طريقه توصيل عميلين بالتفصيل فأنا لم استطع القيام بذلك
    اسعدك المولى

  47. رسالة الخطأ ليس لها علاقة بالـ JADE

    قم بحذف الأسطر التي تبدأ بـ @ و أعد ترجمة البرنامج قد يختفي المشكل

    بالنسبة لكيفية الربط بين العملاء أفكر في عمل فيديو توضيحية عن الأمر لكنني مشغول لبعض الوقت

    سأحاول بإذن الله عملها قبل يوم الأحد القادم (إن كان بالإمكان إرسال رسالة على البريد لتذكيري بذلك)

  48. السلام عليكم ورحمة الله وبركاته
    معلومات جدا راءعة ومفيده الله يعطيك العافية
    انا حابة اشتغل على الjade
    بس مشكلتي ما بعرف جافاولاeclips
    بماذا تنصحني

  49. السلام عليكم
    مطلوب مني مشروع” أي مشروع ” بسيط يكون على ال
    jade and netbeans
    الفكرة انه يكون فيه
    agents ,percepts and actuators
    المشكلة الكبيرة مثل ما حكيت انه ما بعرف اي لغة منهم
    java oe eclips or netbeans
    ومعي فقط اسبوع لعمل هذا المشروع
    انا في امس الحاجة للمساعدة
    دمتم مشعلا تستضاء به الظلمات

  50. ما أنصحك به هو تعلم الجافا و من ثم تطبيق أمثلة الجاد المذكورة هنا على المدونة

    بالقليل من الجد و الاجتهاد يكون الأسبوع أكثر من كافي

  51. شكرا جزيلا إلك ما توقعت الرد السريع
    **************************************
    عندك
    tutorial
    او كتاب معين للجافا بتنصحني فيه

  52. هناك جملة من الدروس العربية الجيدة تجدينها هنا:

    http://www.arabteam2000-forum.com/index.php?showtopic=142086

    أما عن الكتب، فأظن أنه من أفضل الكتب الشاملة لتعلم الجافا نجد الكتاب التالي:

    لكنه كبير الحجم

    أما فيما يخص الفرق بين الـ Eclipse و Netbeans فالاختلافات بينهما لا يلحظها المبتدئ بحكم أنها ليست جوهرية (و إنما في أمور تخص كيفية التعامل مع كل IDE منهما و بعض الأمور المتقدمة)

  53. ممكن تعطيني موقع احمًل منه ال eclips
    هل تحتاج ال eclips الى برمجيات تسبقهاحتى تعمل بشكل صحيح

  54. الله يعطيك العافية
    بدي
    tutorial
    لل
    eclipse
    يحتوي على معلومات تفيد المبتدئين بالجافا
    ترى انت وفرت عليه وقت طويل البحث والعناء الله يجزاك الجنة

  55. السلام علكيم
    حاولت انفذ درس” برمج اول عميل لك”
    طبقت تماما مثل ما حكيت لكن لما
    نفذت البرنامج ما اعطاني نتائج علما انه الكود هو هذا:
    ***************************************************

    package firstAgent;

    import jade.core.Agent;

    public class HelloWorldAgent extends Agent{
    protected void setup() {
    System.out.println(“Hello World! My name is “+getLocalName());

    // Make this agent terminate
    doDelete();
    }
    }
    *********************************
    والنتائج
    19/04/2010 10:01:46 م jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE 3.7 – revision 6154 of 2009/07/01 17:34:15
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    19/04/2010 10:01:47 م jade.core.AgentContainerImpl joinPlatform
    SEVERE: Some problem occurred while joining agent platform.
    jade.core.ProfileException: Can’t get a proxy to the Platform Manager [nested jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]]
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:574)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:276)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    java.rmi.AlreadyBoundException: ServiceManager
    at sun.rmi.registry.RegistryImpl.bind(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
    at sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
    at java.rmi.Naming.bind(Unknown Source)
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:224)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    19/04/2010 10:01:47 م jade.core.Runtime$1 run
    INFO: JADE is closing down now.
    ***************************************
    وليش ما بعرف يا ريت تساعدني

  56. package firstAgent;

    import jade.core.Agent;

    public class HelloWorldAgent extends Agent{
    protected void setup() {
    System.out.println(“Hello World! My name is “+getLocalName());

    // Make this agent terminate
    doDelete();
    }
    }
    ****************************************
    ****************************************
    *********************************************
    19/04/2010 10:01:46 م jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE 3.7 – revision 6154 of 2009/07/01 17:34:15
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    19/04/2010 10:01:47 م jade.core.AgentContainerImpl joinPlatform
    SEVERE: Some problem occurred while joining agent platform.
    jade.core.ProfileException: Can’t get a proxy to the Platform Manager [nested jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]]
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:574)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    jade.core.IMTPException: The Service Manager was already bound in the RMI Registry [nested java.rmi.AlreadyBoundException: ServiceManager]
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:276)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    Nested Exception:
    java.rmi.AlreadyBoundException: ServiceManager
    at sun.rmi.registry.RegistryImpl.bind(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
    at sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
    at java.rmi.Naming.bind(Unknown Source)
    at jade.imtp.rmi.RMIIMTPManager.exportPlatformManager(RMIIMTPManager.java:224)
    at jade.core.ProfileImpl.createPlatformManager(ProfileImpl.java:563)
    at jade.core.ProfileImpl.getPlatformManager(ProfileImpl.java:487)
    at jade.core.ProfileImpl.getServiceManager(ProfileImpl.java:501)
    at jade.core.AgentContainerImpl.init(AgentContainerImpl.java:342)
    at jade.core.AgentContainerImpl.joinPlatform(AgentContainerImpl.java:478)
    at jade.core.Runtime.createMainContainer(Runtime.java:148)
    at jade.Boot.(Boot.java:130)
    at jade.Boot.main(Boot.java:70)
    19/04/2010 10:01:47 م jade.core.Runtime$1 run
    INFO: JADE is closing down now.

  57. رسالة الخطأ هذه تعني أنك تحاولين تشغيل JADE مرة ثانية دون إغلاقه في المرة الأولى (إغلاق الواجهة لا يعني إغلاقه)و لكن يجب عمل
    File > Shutdown agent plateform

    إن نسيت عمل ذلك و أغلقت النافذة عن طريق الخطأ يجب عليك أن تقومي بإغلاق Eclipse كاملا و إعادة تشغيله من جديد لضمان إغلاق الـ Process الخاص بالـ JADE

  58. اعدت تشغيله مرة ثانية وما نفع
    هل ممكن يكون الخطء من كلمة
    smith
    اللي حطيتها في الجملة التالية
    -gui jade.boot smith:firstAgent.HelloWorldAgent
    الي حطيناها في ال
    argument??????????????
    *******************
    كلمة smith
    من اجل ماذا

  59. smith هو اسم العميل

    ملاحظة: أرجو منك أن تبذلي بعض الجهد في القراءة الجيدة للدرس، لكيلا أضطر إلى الإجابة عن أسألت تجدين إجابتها في الدرس، و هذا ما يسمح لي بإيجاد الوقت للتفكير في الأسئلة التي لا يحتوي الدرس إجابة عليها

  60. لا أظن أن هناك حاجة لرقم الهاتف أختي nnnnn
    إن هناك ما تودين قوله (و لا تودين قوله هنا) راسليني على البريد الالكتروني المبين في صفحة “للاتصال بي”

  61. السلام عليكم
    الشكر الجزيل لكم الحمد لله مشى الحال أغلقته بالطريقة اللي حكيت عنها وطلع نتائج

  62. السلام عليكم
    نفذت البرنامج بالاول كل واحد لوحده
    اعطاني هذه الاخطاء
    **************************
    20/04/2010 11:04:05 م jade.core.Runtime beginContainer
    INFO: ———————————-
    This is JADE 3.7 – revision 6154 of 2009/07/01 17:34:15
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
    —————————————-
    20/04/2010 11:04:06 م jade.core.BaseService init
    INFO: Service jade.core.management.AgentManagement initialized
    20/04/2010 11:04:06 م jade.core.BaseService init
    INFO: Service jade.core.messaging.Messaging initialized
    20/04/2010 11:04:06 م jade.core.BaseService init
    INFO: Service jade.core.mobility.AgentMobility initialized
    20/04/2010 11:04:06 م jade.core.BaseService init
    INFO: Service jade.core.event.Notification initialized
    20/04/2010 11:04:06 م jade.core.messaging.MessagingService clearCachedSlice
    INFO: Clearing cache
    20/04/2010 11:04:06 م jade.mtp.http.HTTPServer
    INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
    20/04/2010 11:04:06 م jade.core.messaging.MessagingService boot
    INFO: MTP addresses:

    http://ACER-PC:7778/acc

    20/04/2010 11:04:06 م jade.core.AgentContainerImpl startBootstrapAgents
    SEVERE: Cannot create agent AgentB: An undeclared exception was thrown [nested java.lang.Error: Unresolved compilation problems:
    Syntax error on tokens, delete these tokens
    Syntax error on token “for”, ( expected
    Syntax error on tokens, delete these tokens
    Syntax error on tokens, delete these tokens
    Syntax error on tokens, delete these tokens
    Syntax error on tokens, ArgumentList expected instead
    Syntax error, insert “)” to complete MethodInvocation
    Syntax error, insert “)” to complete MethodInvocation
    Syntax error, insert “)” to complete ClassInstanceCreationExpression
    Syntax error, insert “)” to complete Expression
    Syntax error on tokens, ArgumentList expected instead
    Syntax error on tokens, delete these tokens
    Syntax error on token “for”, ” to complete ReferenceType1
    Syntax error on tokens, ArgumentList expected instead
    Syntax error on tokens, delete these tokens
    Syntax error on tokens, delete these tokens
    Syntax error, insert “)” to complete MethodInvocation
    Syntax error, insert “;” to complete Statement
    Syntax error on token “Invalid Character”, invalid (
    Syntax error on token “Invalid Character”, delete this token
    Syntax error on token “Invalid Character”, delete this token
    Syntax error on tokens, delete these tokens
    ]
    20/04/2010 11:04:06 م jade.core.AgentContainerImpl joinPlatform
    INFO: ————————————–
    Agent container Main-Container@ACER-PC is ready.
    ——————————————–

  63. علما انه الكود هذا
    **************************
    import java.security.acl.Acl;

    import jade.core.AID;

    import jade.core.Agent;

    import jade.core.behaviours.FSMBehaviour;

    import jade.core.behaviours.OneShotBehaviour;

    import jade.lang.acl.ACLMessage;

    public class AgentB extends Agent {

    int total = 0;

    boolean stop = false;

    protected void setup(){

    System.out.println(“—————-agent B—————-”);

    FSMBehaviour agentB_beh= new FSMBehaviour();

    agentB_beh.registerFirstState(new Waiting for number(), “Waiting for number”);

    agentB_beh.registerState(new Display(), “Display”);

    agentB_beh.registerState(new end(), “end”);

    agentB_beh.registerTransition(“Waiting for number”, “Display”,0);

    agentB_beh.registerTransition(“Waiting for number”, “end”,1);

    agentB_beh.registerDefaultTransition(“Display”, “Waiting for number”);

    addBehaviour(agentB_beh);

    }

    private class Waiting for number extends OneShotBehaviour{

    int valeurRetour = 0;

    public void action() {

    ACLMessage message = new ACLMessage(ACLMessage.INFORM);

    message.addReceiver(new AID(“AgentA”, AID.ISLOCALNAME));

    if(!stop){

    message.setContent(“ready”);

    send(message);

    valeurRetour=0;

    block();

    }else{

    message.setContent(“done”);

    send(message);

    valeurRetour=1;

    }

    }

    public int onEnd(){

    return valeurRetour;

    }

    }

    /**********************************************************************/

    private class Display extends OneShotBehaviour{

    @Override

    public void action() {

    ACLMessage messageRecu = receive();

    total+= Integer.parseInt(messageRecu.getContent());

    System.out.println(“number received= “+ messageRecu.getContent());

    System.out.println(” total = “+total);

    if (total > 50) stop = true;

    }

    }

    /**********************************************************************/

    private class end extends OneShotBehaviour{

    @Override

    public void action() {

    System.out.println(“shutdonw agent”);

    myAgent.doDelete();

    }

    }

    }

  64. مساء الخير
    انا نفذت تماما كما تفضلت
    واستخدمت الفيديو لكن الcontainer 1 ,2 لم يضهر داخلهم شي فارغين
    لماذا ارجو المساعده

  65. الفيديو تتحدث عن الـ Snifer و ليس لها دخل مباشر في الأمر

    لتشغيل المثال يجب تشغيل كلا العميلين في آن واحد

    قومي أولا بإطلاق العميل الأول بالطريقة الكلاسيكية عن طريق Eclipse

    ثم أطلقي العميل الثاني بكتابة الأمر التالي في سطر الأوامر:

    java jade.Boot -container AgentB:AgentB

    شريطة أن تكون الملفات الناتجة عن عملية Compil العميل الثاني موجودة داخل مجلد يكون مساره في المتغير Classpath

    لمعرفة كيفية إضافة رابط مجلد إلى الـ Classpath قومي بمراجعة الدرس الأول الذي يتحدث عن برمجة أول عميل بالـ JADE

  66. السلام عليكم
    اخي اريد المساعدة
    نحن في ورطة كبيرة و قد اقترب موعد التخرج مشكلتنا هي كيف تتم التواصل بين 3 عمال
    لقد اخذت الكود (agent A ,agentB)واضفت اليه عميل cوواجهت مشكلة العميل ا يرسل الى العميل ب لكن العميل س لا يصله شيئ ولا يظهر اي افيشارج عليه
    وشكرا مسبقا

  67. السلام عليكم
    اولا شكرا عن الرد السريع لم اتوقع هذا الاهتمام

    لقد اخذت الكود للعميل الثالث مماثل للعميلB
    واضفت بعض التغييرات في الكود A

  68. ما هي التغييرات التي أضفتها؟

    هل يمكن أن ترفعي ملفات سورس العملاء الثلاثة لأفهم أين الخلل

  69. مساء الخير
    سؤال بععيد نوعا ما عن الموضوع هل في الeclips فورم يعني فجيوال
    شكرا سلفا

  70. نعم هناك إمكانية العمل على الواجهات الرسومية على Eclipse
    لكن يجب عليك تنصيب إضافة Visual Editor

  71. السلام عليكم ورحمة الله تعالى وبركاته

    شكرااخي
    هذا هو الكود
    ***************************AgentA************
    package tre;

    import jade.core.AID;
    import jade.core.Agent;
    import jade.core.behaviours.FSMBehaviour;
    import jade.core.behaviours.OneShotBehaviour;
    import jade.lang.acl.ACLMessage;

    public class AgentA extends Agent {

    protected void setup(){

    System.out.println(“—————————————“);
    System.out.println(“—————-agent A—————-“);
    System.out.println(“—————————————“);

    FSMBehaviour agentA_beh= new FSMBehaviour();

    agentA_beh.registerFirstState(new attendreAgentB(), “attendreAgentB”);
    agentA_beh.registerState(new envoiChiffre(), “envoiChiffre”);
    agentA_beh.registerLastState(new fin(), “fin”);

    agentA_beh.registerDefaultTransition(“attendreAgentB”, “envoiChiffre”);
    agentA_beh.registerTransition(“envoiChiffre”, “attendreAgentB”,0);
    agentA_beh.registerTransition(“envoiChiffre”, “fin”, 1);

    addBehaviour(agentA_beh);
    }

    private class attendreAgentB extends OneShotBehaviour{

    //@Override
    public void action() {

    System.out.println(“en attente de l agent B”);
    block();
    }
    }
    /*****************************************************************/
    private class envoiChiffre extends OneShotBehaviour{

    int valeurRetour = 0;
    //@Override
    public void action() {

    ACLMessage messageRecu = receive();
    if (messageRecu.getContent().equalsIgnoreCase(“pret”) ) valeurRetour=0;
    else valeurRetour=1;
    for ( int chiffre = 0; chiffre 100) stop = true;
    }
    }
    /**********************************************************************/
    private class fin extends OneShotBehaviour{
    //@Override
    public void action() {
    System.out.println(“fin de l’agent”);
    myAgent.doDelete();
    }
    }
    }
    *********************Agent C************
    package tre;

    import java.security.acl.Acl;
    import jade.core.AID;
    import jade.core.Agent;
    import jade.core.behaviours.FSMBehaviour;
    import jade.core.behaviours.OneShotBehaviour;
    import jade.lang.acl.ACLMessage;

    public class AgentC extends Agent {

    int somme = 0;
    boolean stop = false;
    protected void setup(){
    System.out.println(“—————-agent C—————-“);
    FSMBehaviour agentC_beh= new FSMBehaviour();

    agentC_beh.registerFirstState(new attendrechiffre(), “attendrechiffre”);
    agentC_beh.registerState(new afficher(), “afficher”);
    agentC_beh.registerState(new fin(), “fin”);

    agentC_beh.registerTransition(“attendrechiffre”, “afficher”,0);
    agentC_beh.registerTransition(“attendrechiffre”, “fin”,1);
    agentC_beh.registerDefaultTransition(“afficher”, “attendrechiffre”);

    addBehaviour(agentC_beh);
    }
    private class attendrechiffre extends OneShotBehaviour{

    int valeurRetour = 0;

    public void action() {
    ACLMessage message = new ACLMessage(ACLMessage.INFORM);
    message.addReceiver(new AID(“AgentA”, AID.ISLOCALNAME));
    for ( int chiffre= 0; chiffre < 10; chiffre++){
    if(!stop){
    message.setContent("pret");
    send(message);
    valeurRetour=0;
    block();
    }else{
    message.setContent("arret");
    send(message);
    valeurRetour=1;
    }
    }
    }
    public int onEnd(){
    return valeurRetour;
    }
    }
    /**********************************************************************/
    private class afficher extends OneShotBehaviour{
    //@Override
    public void action() {
    for ( int chiffre= 0; chiffre 60) stop = true;
    }
    }
    }
    /**********************************************************************/
    private class fin extends OneShotBehaviour{
    //@Override
    public void action() {
    System.out.println(“fin de l’agent”);
    myAgent.doDelete();
    }
    }
    }

    وشكرا جزيل الشكر مسبقا

  72. عذرا على التأخير
    الكود الذي أرسلتيه فوق يقوم بالإرسال إلى عميل واحد فقط

    message.addReceiver(new AID(“AgentA”, AID.ISLOCALNAME));

    يجب إضافة نفس السطر السابق مع تغيير اسم العميل لكي ترسل إليه الرسالة

    أخبريني ما هي النتيجة بعد عمل التعديلات اللازمة

  73. لم أفهم جيدا المقصود

    على العموم لإرسال رسالة إلى أكثر من عميل يجب إضافة اسم العميل إلى قائمة المستقبلين بالأمر المبين في ردي السابق

  74. لقد حاولت ان اعمل run لبرنامج AgentA and Agent B باستخدام الواجهة الخاصة بال jade بحيث باني شغلت A ثم B باستخدام قائمة الجاد(start anew agent )فظهرت لي هذه النتائج عنما شغلت AgentA

    NFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
    02/02/2011 08:40:39 م jade.core.messaging.MessagingService boot
    INFO: MTP addresses:

    http://sham-a2576ddbec:7778/acc

    02/02/2011 08:40:39 م jade.core.AgentContainerImpl joinPlatform
    INFO: ————————————–
    Agent container Main-Container@192.168.1.2 is ready.
    ——————————————–
    —————————————
    —————-agent A—————-
    —————————————
    en attente de l agent B

    ولاكن عندما قمت بتشغيل AgentB عبر الواجهة الخاصة بالjade ظهر لي الاتي

    —————-agent B—————-
    execution du behaviour afficher
    *** Uncaught Exception for agent B ***
    java.lang.NumberFormatException: For input string: “( (action ( agent-identifier :name B@192.168.1.2:1099/JADE :addresses (sequence http://sham-a2576ddbec:7778/acc )) (ACLMessage) ) (MTS-error ( agent-identifier :name AgentA@192.168.1.2:1099/JADE ) (internal-error “Agent not found: getContainerID() failed to find agent AgentA@192.168.1.2:1099/JADE”)) )”
    ERROR: Agent B died without being properly terminated !!!
    State was 2
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:449)
    at java.lang.Integer.parseInt(Integer.java:499)
    at mine.AgentB$afficher.action(AgentB.java:93)
    at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344)
    at jade.core.behaviours.CompositeBehaviour.action(CompositeBehaviour.java:109)
    at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344)
    at jade.core.Agent$ActiveLifeCycle.execute(Agent.java:1500)
    at jade.core.Agent.run(Agent.java:1439)
    at java.lang.Thread.run(Thread.java:662)
    02/02/2011 08:44:23 م jade.core.messaging.MessagingService removeLocalAliases
    INFO: Removing all local alias entries for agent B
    02/02/2011 08:44:23 م jade.core.messaging.MessagingService removeGlobalAliases
    INFO: Removing all global alias entries for agent B

    ارجو المساعدة ماهو الخطأ هل هو في الكود ام في طريقتي لتشغيل الايجنت
    انا استخدم netbeans

    جزاك الله خيرا

  75. السلام عليكم أخي الكريم بارك الله فيك وجزيت عنا كل خير انا مبتدئة في الجاد ولكن الحمد لله طبقت الكود المذكــور والحمد لله لم تحدث معي اي مشكلة إلا أني اردت سؤالك عن دور التعليمات التالية :

    (message.addReceiver(new AID(“AgentA”, AID.ISLOCALNAME)
    AID.ISLOCATIONNAME ماذا تمثل هذه العبارة ؟؟؟
    _____________________________________________________

    () protected void setup
    _____________________________________________________

    import jade.core.AID وماالفائدة من اضافة هذا package
    _____________________________________________________
    وشكرا

  76. AID.ISLOCATIONNAME نعني بها أننا AgentA هو الاسم المحلي للعميل

    () protected void setup
    ضرورية في كل عميل

    import jade.core.AID
    ضرورية لاسنخدام بعض دوال Jade

  77. هل ممكن توضيح ماهي les méthodes التي تحتاج لـ import jade.core.AID
    وما هو الفرق بين كود agent و agent mobile ؟؟
    وهل دور protected void setup الحماية ؟
    وما الفرق بين OneShotBehaviour & FSMBehaviour
    وبماذا تنصحني من الكتب في الجافا والجاد وبرمجة العملاء ؟؟؟
    وعذرا ان أثقلت عليك يأسئلتي

  78. أختي الفاضلة الأسئلة 1، 3،4 مجابة عبر الدروس المقدمة هنا (يرجى الإطلاع عليها و تمضية بعض الوقت في البحث و طرح السؤال فقط إن لم تتوصلي إلى إجابة بعد ذلك)

    الفرق بين Agent و Agent Mobile هو أن الثاني قادر على الانتقال من جهاز إلى آخر و إكمال تنفيذ برنامجه هناك (لا تسأليني كيف لأن الأمر يحتاج إلى شرح طويــــل لكن ابحثي عن إضافة IPMS الخاصة بـ Jade و التي تتيح ذلك)

    هناك كتاب واحد و وحيد عن الـ Jade و قام بتأليفه المبرمجون الذين كتبوا الـ Jade

    http://www.amazon.fr/Developing-Multi-Agent-Systems-Fabio-Bellifemine/dp/0470057475/ref=sr_1_1?ie=UTF8&qid=1298582803&sr=8-1

    بخصوص كتب Java و بما أنك تفضلين الفرنسية أنصحك بزيارة
    Java.developpez.com
    فيه العديد من دروس Java الموفرة بشكل مجاني للزوار (تجدين في هذا الموقع كتابا كاملا حول الـ Java متوفر مجانا)

    أرجو أن تفيدك هذه الأجوبة

  79. ان شاء الله سأطلع عليها
    ولكن بخصوص agent & agent mobile
    قرأت عنها ولكن لا أقصد الفرق من ناحية عمل كل واحد فيهم وانما الكود البرمجي وهل المذكور في درس كيفية *كيفية انشاء اول عميل…* هو عميل متحرك أو عادي ..
    وعلى ما أظن وسوف أبحث في جهازي الكتاب موجود لدي .

  80. أختي الفاضلة لم أرد سابقا لأنه كما سبق و أن قلت إجابات أسئلتك موجودة أصلا في الدرس (يكفي أن تقرأي الدرس كاملا لتجدي الإجابات)

    طبعا الدرس يتحدث عن عميل عادي و ليس متحرك

  81. أولا شكرا للرد
    وثانيا أنا أود كود ولو بسيط عن agent mobile
    وبالنسبة للدرس وأسئلة المشاركين صراحة أغنتني عن الكثير من الأسئلة
    وبارك الله فيك ومعذرة على كثرة الأسئلة ولكن صراحة -قلبت- النت وما لقيت والو عن JADE و AGENT MOBILE

  82. السلام عليكم ورحمة الله تعالى وبركاته
    هناك مصطلحين متداولين وهما:
    Communication inter-plateforme & intra plateforme
    فما الفرق بينهما..؟؟

  83. inter-platform يقصد بها ما بين منصات Jade يعني ما بين Jade منصب على جهاز و Jade منصب على جهاز آخر

    intra-platform يعني أن الأمر يخص نفس المنصة و التي يمكن أن تكون على أكثر من جهاز
    يمكن مثلا إنشاء Container على جهاز ما لكنه يبقى متصلا بـ Platform موجودة على جهاز آخر

    بالمناسبة أظن أن المصطلحين يستعملان أكثر فيما يخص تنقل العملاء Migration و ليس الـ communication

  84. يعني inter plate هو العادي في كل جهاز يتم installation للجاد
    ولكن في الحالة الثانية كيف يتم ذلك ….ممكن توضيح ؟؟

  85. في الحالات العامة نستخدم platform واحدة للـ Jade (عادة على جهاز واحد) و بالتالي يمكن القول أن الـ intra platform هي الحالةالقياسية (Standard).

    إن كنت تودين القيام بالأمر على أكثر من جهاز يكفي تنصيب الـ Jade على الجهاز الثاني الذي تودين أن يستضيف الـ Container الذي يجب للعميل أن يذهب إليه ثم تنشئين هذا الـ Container مثلما تنشئينه عادة لكن هذه المرة مع تحديد عنوان الـ IP الجهاز الرئيسي (لا أذكر الصيغة على وجه التحديد لكن ستجدينها في التوثيق Documentation الرسمي للـ Jade)

    بخصوص الـ interPlatform فإنها أعقد قليلا من الأول حيث يجب أولا تنصيب إضافة خاصة تدعى IPMS (InterPlatform mobility service)

    http://sourceforge.net/projects/jipms/

    و بعدها لتهجير Migration عميل من جهاز إلى آخر فإننا نستعمل نفس الدالة doMove لكن هذه المرة سنحدد لها أيضا عنوان الـ IP الخاص بالجهاز المستقبل.

    أعتذر إن كان المعلومات غير واضجة جدا (لم أبرمج بالـ Jade من جديد منذ أن كتبت هذه المقالات)

  86. السلام عليكم لدي كود لــ agent mobile صحيح 100%
    ولكن الهجرة intra plte-forme لم تتحقق ؟؟
    انت أشرت سابقا الى اضافة IPMS ؟؟ هل هو ملف .jar ؟؟
    أنا أضفت Migration.jar هل هو كافي أم لابد من اضافة intra plate-forme service ؟؟

  87. إن لم تخني الذاكرة هو ملف Jar
    يجب فتح الـ Jade مع استخدام الخدمة (service) الخاصة بالـ intra platform mobility service
    و ذلك بإضافة التالي إلى سطر الأوامر الخاص بالـ Jade

    -services jade.core.mobility.AgentMobilityService;jade.core.migration.InterPlatformMobilityService

    إن كان العميل كبير الحجم أو يحمل معه ملفات فمن الأرجح ستحتاجين إلى زيادة حجم الذاكرة التي يستعملها الـ Java

    يصبح أمر تشغيل الـ Jade على النحو التالي:
    java -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=1000M jade.Boot -services jade.core.mobility.AgentMobilityService;jade.core.migration.InterPlatformMobilityService -gui AgenName:AgentClass

  88. ان هجرة الموبايل ايجنت تحتاج الى اضافة IMPS الى jade وهو عبارة عن اضافة الملف
    migration .jar الى classpath كما يجب ان يتم عمل compilation للموبايل ايجنت المراد تنفيذه ثم عمل ملف jar يضم ملف .class الناتج من عملية compilation وضعه في فولدر اسمه jarManager وتنفيذ الايعاز التالي :
    java jade.Boot -gui -services jade.core.mobility.AgentMobilityService;jade.core.migration.InterPlatformMobilityService mobile:mobileAgent

    mobileAgent يمثل اسم class mobileAgent .
    كل هذه الخطوات يتم تنفيذها في الحاسبة الاولى
    اما في الحاسبة التانية يجب ان ننفذ مايلي :
    java jade.Boot -gui -services jade.core.mobility.AgentMobilityService;jade.core.migration.InterPlatformMobilityService
    ارجو ان تجدو الفائدة في معلوماتي البسيطة .
    دمتم بخير

  89. السلام عليكم
    اخي العزيز هل قمت بتنفيذ مثال mobileAgent الموجود في ipms 3.5 الذي يضم مثالين وانا اقصد الاول الذي لايعرض واجهة والموجود في الفولدر المسمى samples .
    اذا لم تقم بذلك مسبقا فانا ادعوك للمحاولة اذا كنت تريد ذلك واذا كنت تملك الوقت الكافي وان تعرض لنا في مدونتك طريقة التنفيذ . ارجو منك المحاولة لفائدة الجميع لانني اراسل العديد من الاشخاص الذين يواجهون نفس المشكلة .
    شاكرة لك تعاونك ورحابة صدرك وجزالك الله عنا خير الجزاء .

  90. السلام عليكم ورحمة الله وبركاته
    اخي الفاضل كيف اجعل الايجنت يقوم بارسال ثلاث متغيرات الاول و الثاني من نوع
    RandomeAcessFile و الثالث من نوع string الى ايجنت اخر موجود في كلاس اخرى لكي يبدا الايجنت التاني بتنفيذ مهمته

    وشكرا لك

  91. للتوضيح انا لا اريد ان ارسل الملف _ اريد ان ارسل فقط عنوان الملف يعني مؤشر يؤشر على الملف فقط

  92. السلام عليكم ورحمة الله وبركاته

    اشكرك على المدونه

    لو تكرمت نريد بعضا من التفصيل في جزئيه
    FSMBehaviour

    هل عندك كتاب يشرحها بشكل موسع

    جزاك الله خيرا

  93. FSMBehaviour هل بكل بساطة تطبيق للـ FSM (Finite-state machine)على الـ Behaviour

    كيف ذلك؟
    لنفرض مثلا أنه لديك عميل توده أن يقوم بتنفيذ سلسلة من الأوامر لكن وفق تسلسل معين (إن كان في الحالة أ وتوفر شرط ما فإنه يذهب لتفيذ الأمر ب وإن توفر شرط آخر، يجب عليه تنفيذ أمر ج) وهكذا

    للمزيد حول الـ FSM

    http://en.wikipedia.org/wiki/Finite-state_machine

    كما أنه يمكنك قراءة المزيد حول الأمر في “الكتاب الرسمي” لإطار عمل Jade

    http://www.amazon.fr/Developing-Multi-Agent-Systems-Fabio-Bellifemine/dp/0470057475/ref=sr_1_1?ie=UTF8&qid=1324029598&sr=8-1

  94. فى صداد رسالة ماجستير ارجوو منك مساعدتي فى اختيار موضوع مناسب فى الوكيل

    ولك مني جزسل الشكر والتقدير

  95. توفيق /
    فى صداد رسالة ماجستير ارجوو منك مساعدتي فى اختيار موضوع مناسب فى الوكيل
    من افضل المواد الدارسة كانت هى agent ولكن من ناحية التصميم والتحليل ولم نتطرق الى البرمجة الفعلية …. فارجو منك مساعدتي ما هو الموضوع المناسب الذي يمكن ان اعد فيه مقترح للماجستير مع مرعاة اني لم ابرمج agent من قبل …….

    ولك مني جزسل الشكر والتقدير

  96. السلام عليكم
    لو اريد Agent يذهب ل container ثاني ايش اضع في ال doMove

    في معني اخر اريد ان اعمل Dispatch ل ال Agent ليذهب الى Host ثاني …

  97. salam,
    j’ai un problème lors de migration d’un agent jade entre deux machines tel que le lancement des agents se fait a partir d’une page jsp toujours j’ai ce message d’erreur “GRAVE: Destination rostom-1a0013b9:1099/JADE does not exist or does not support mobility” malgré que la migration sans utilisatation d’une page jsp marche bien mais moi j’ai besoin de lancer la migration a partir d’une page jsp.
    merci d’avance a votre attention a mon message

  98. السلام عليكم
    اخي الكريم
    انا طالب لدي مشكلة اني لا اعرف كيف ارسل رسالة بين 3 عملاء على 3 حاسبات مختلفة علما اني قد قمت بارسال رسالة بين عميلين على نفس الحاسب لكن المطلوب مني ان ارسل رسائل بين 3 عملاء على الاقل و على 3 حاسبات على الاقل علما بان كل عميل يجب ان يستقبل رسالة و يرسل رد لها
    مع الشكر

  99. الله يعطيم العافيه يارب .. بليز اقدر اتواصل معاك ضروري انا عندي مشروع و حايسة فيه و يتعلق في jade & Jess
    بليز اكون شاكرة لو اقدر اتواصل معاك للمساعدة

    شكرا جزيلا

التعليقات مغلقة.