salut,
je suis debutant dans la programmation multi-agents et plus particulierement la plate forme madkit.
je veux calculer le factorielle en utilisant plusieurs agents.
Exemple:factorielle(6)
je crée 3 agents:
agent1>role=calculateur1>2*1
agent2>role=calculateur2>3*4
agent3>role=calculateur3>5*6
agent3> role=resultat> fait le produit des resultats des autres agent

voici la classe agent:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import madkit.kernel.Agent;
import madkit.kernel.ObjectMessage;
 
public class FactorielleAgent extends Agent{
	int nombre;
	int fact;
	int calcul,result=1;
	String myCommunity="projet2";
	public FactorielleAgent(int f,int j){
		nombre=f;
		fact=j;
	}
	public FactorielleAgent() {       
    } 
	public void activate(){
		createGroup(false,"CalculFactoriel", null, null);
		if(nombre==3){
			requestRole("CalculFactoriel","resultat",null);	
			println("le role resultat est créé"); 
		}
		requestRole("CalculFactoriel","calculateur"+nombre,null);
		println("le role calculateur"+nombre+" est créé"); 
	}
	public synchronized void live(){
		 ObjectMessage msg;
		 Integer content;
		if(leaveRole("CalculFactoriel", "resultat")){
			msg=(ObjectMessage)waitNextMessage();
            content=(Integer)msg.getContent();   
            int sender=content.intValue(); 
 
            result=result*sender; 
            println("resultat= "+result);
            if(nombre>fact){
    			println("resultat= "+result);
    		}    
		}
		else{			
			calcul=nombre*(nombre+1);
			nombre=nombre+2;
			sendMessage(getAgentWithRole("CalculFactoriel","resultat"),new ObjectMessage(new Integer(calcul)));
		}
 
 
	}
	public void end(){
		 println("je me termine avec pour resultat "+calcul);    
	}
 
}
et voici la classe qui lance les agents:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import madkit.kernel.Kernel;
public class Facto {
    private Kernel theKernel;
    public Facto() {
        System.exit(1);
    }
    public Facto (int f) {  
        theKernel=new Kernel("Calcul de factorielle");
        for (int i=1;i<=(f/2);i++) {
        	FactorielleAgent fa=new FactorielleAgent(i,f);
            theKernel.launchAgent(fa,"Agent Factorielle "+ i,this,false);        
        }     
    } 
 
    public static void main(String [] args) {
 
        new Facto(6);
    }
 
}
la trace d'execution est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<Calcul de factorielle> : MadKit Agent microKernel localhost:K1270078328180 is up and running
<Calcul de factorielle> : [Agent Factorielle 1] le role calculateur1 est créé
<Calcul de factorielle> : [Agent Factorielle 2] le role calculateur2 est créé
<Calcul de factorielle> : [Agent Factorielle 3] le role resultat est créé
<Calcul de factorielle> : [Agent Factorielle 3] le role calculateur3 est créé
<Calcul de factorielle> : [Agent Factorielle 2] je me termine avec pour resultat 6
<Calcul de factorielle> : [Agent Factorielle 1] je me termine avec pour resultat 2
ou est le probleme dans mon code?svp

Merci d'avance