Skip to content
Snippets Groups Projects
Commit 7785df8e authored by Jana Eltayeb El Rafei's avatar Jana Eltayeb El Rafei
Browse files

petite_modifs

parent 0a31e117
No related branches found
No related tags found
1 merge request!14Merge v2
......@@ -10,7 +10,7 @@ import (
)
func main() {
s := simulation.NewSimulation(10, -1, 600*time.Second)
s := simulation.NewSimulation(1, -1, 600*time.Second)
//go simulation.StartAPI(s)
go func() {
for {
......
......@@ -129,6 +129,7 @@ func NewSimulation(agentCount int, maxStep int, maxDuration time.Duration) (simu
// Création de l'environement
// Création du métro
//NewMetro(freq time.Duration, stopT time.Duration, capacity, freeS int, way *Way) *Metro {
metro1 := *NewMetro(10*time.Second, 5*time.Second, 10, 5, NewWay(1, alg.Coord{9, 0}, alg.Coord{10, 39}, true, []alg.Coord{{8, 5}, {8, 6}, {8, 34}}, &simu.env))
metro2 := *NewMetro(10*time.Second, 5*time.Second, 10, 5, NewWay(2, alg.Coord{11, 0}, alg.Coord{12, 39}, false, []alg.Coord{{13, 5}, {13, 6}, {13, 34}}, &simu.env))
simu.env = *NewEnvironment([]Agent{}, carte, []Metro{metro1, metro2}, simu.newAgentChan, agentCount)
......
......@@ -21,6 +21,7 @@ func (ul *UsagerLambda) Percept(ag *Agent) {
case ag.request != nil: //verifier si l'agent est communiqué par un autre agent, par exemple un controleur lui a demandé de s'arreter
//print("Requete recue par l'agent lambda : ", ag.request.decision, "\n")
ul.requete = ag.request
fmt.Println("[UsagerLambda, Percept] Requete reçu par l'agent lambda : ", ul.requete.Decision())
ag.request = nil // la requete est traitée
default:
ag.stuck = ag.isStuck()
......@@ -37,17 +38,23 @@ func (ul *UsagerLambda) Deliberate(ag *Agent) {
switch ul.requete.Decision() {
case Stop :
ag.decision = Stop
return
case Expel: // cette condition est inutile car l'usager lambda ne peut pas etre expulsé , elle est nécessaire pour les agents fraudeurs
ag.decision = Expel
return
case Disappear :
ag.decision = Disappear
return
case EnterMetro :
fmt.Println("[UsagerLambda, Deliberate] EnterMetro")
ag.decision = EnterMetro
return
case Wait :
ag.decision = Wait
return
case Move :
ag.decision = Move
return
case YouHaveToMove :
//fmt.Println("J'essaye de bouger")
movement := ag.MoveAgent()
......@@ -57,9 +64,10 @@ func (ul *UsagerLambda) Deliberate(ag *Agent) {
} else {
ag.decision = Noop
}
return
default :
ag.decision = Move
return
}
}else if (ag.position != ag.departure && ag.position == ag.destination) && (ag.isOn[ag.position] == "W" || ag.isOn[ag.position] == "S") { // si l'agent est arrivé à sa destination et qu'il est sur une sortie
//fmt.Println(ag.id, "disappear")
......@@ -82,11 +90,12 @@ func (ul *UsagerLambda) Act(ag *Agent) {
n := rand.Intn(2)
time.Sleep(time.Duration(n) * time.Second)
case Disappear:
//fmt.Printf("[UsagerLambda, Act] agent %s est disparu \n",ag.id)
ag.env.RemoveAgent(ag)
case EnterMetro :
fmt.Printf("[UsagerLambda, Act] agent %s entre dans le Metro \n",ag.id)
//fmt.Printf("[UsagerLambda, Act] agent %s entre dans le Metro \n",ag.id)
ag.env.RemoveAgent(ag)
fmt.Printf("Demandeur d'entrer le metro : %s \n",ul.requete.Demandeur())
//fmt.Printf("Demandeur d'entrer le metro : %s \n",ul.requete.Demandeur())
ul.requete.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], ACK)
case Expel :
//fmt.Println("[AgentLambda, Act] Expel")
......@@ -98,18 +107,18 @@ func (ul *UsagerLambda) Act(ag *Agent) {
case Noop :
//Cas ou un usager impoli demande a un usager de bouger et il refuse
ag.request.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], Noop)
ul.requete.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], Noop)
// nothing to do
case Done :
//Cas ou un usager impoli demande a un usager de bouger et il le fait
ag.request.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], Done)
ul.requete.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], Done)
case TryToMove :
movement := ag.MoveAgent()
fmt.Printf("Je suis %s est-ce que j'ai bougé? %t \n", ag.id, movement)
if movement {
ag.request.Demandeur()<- *req.NewRequest(ag.env.agentsChan[ag.id], Done)
ul.requete.Demandeur()<- *req.NewRequest(ag.env.agentsChan[ag.id], Done)
} else {
ag.request.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], Noop)
ul.requete.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], Noop)
}
}
ul.requete = nil //demande traitée
......@@ -117,6 +126,7 @@ func (ul *UsagerLambda) Act(ag *Agent) {
func (ul *UsagerLambda)setUpAleaDestination(ag *Agent){
//fmt.Println("[UsagerLambda, setUpAleaDestination] setUpAleaDestination")
choix_voie := rand.Intn(2) // choix de la voie de métro aléatoire
dest_porte := rand.Intn(len(ag.env.metros[choix_voie].way.gates)) // choix de la porte de métro aléatoire
ag.destination = ag.env.metros[choix_voie].way.gates[dest_porte]
......
package simulation
package simulation
/*
Agent qui se dirige vers la porte la plus proche sans trop de monde (bon rapport monde/proximité )
*/
*/
import (
"fmt"
......@@ -21,12 +21,13 @@ type UsagerNormal struct {
once sync.Once
}
func (ul *UsagerNormal) Percept(ag *Agent) {
ul.once.Do(func(){ul.setUpDestination(ag)}) // la fonction setUp est executé à la premiere appel de la fonction Percept()
func (un *UsagerNormal) Percept(ag *Agent) {
un.once.Do(func(){un.setUpDestination(ag)}) // la fonction setUp est executé à la premiere appel de la fonction Percept()
switch {
case ag.request != nil: //verifier si l'agent est communiqué par un autre agent, par exemple un controleur lui a demandé de s'arreter
//print("Requete recue par l'agent lambda : ", ag.request.decision, "\n")
ul.req = ag.request
un.req = ag.request
ag.request = nil // la requete est traitée
default:
ag.stuck = ag.isStuck()
if ag.stuck {
......@@ -36,18 +37,16 @@ func (ul *UsagerNormal) Percept(ag *Agent) {
}
}
func (ul *UsagerNormal) Deliberate(ag *Agent) {
//fmt.Println("[AgentLambda Deliberate] decision :", ul.req.decision)
if (ul.req != nil ) {
switch ul.req.Decision() {
func (un *UsagerNormal) Deliberate(ag *Agent) {
//fmt.Println("[AgentLambda Deliberate] decision :", un.req.decision)
if (un.req != nil ) {
switch un.req.Decision() {
case Stop :
ag.decision = Wait
ul.req = nil //demande traitée
ag.decision = Stop
return
case Expel : // cette condition est inutile car l'usager lambda ne peut pas etre expulsé , elle est nécessaire pour les agents fraudeurs
case Expel : // cette condition est inutile car l'usager lambda ne peut pas etre expunsé , elle est nécessaire pour les agents fraudeurs
//fmt.Println("[AgentLambda, Deliberate] Expel")
ag.decision = Expel
ul.req = nil //demande traitée
return
case Disappear :
ag.decision = Disappear
......@@ -69,7 +68,7 @@ func (ul *UsagerNormal) Deliberate(ag *Agent) {
}
}
func (ul *UsagerNormal) Act(ag *Agent) {
func (un *UsagerNormal) Act(ag *Agent) {
//fmt.Println("[AgentLambda Act] decision :",ag.decision)
if ag.decision == Move {
ag.MoveAgent()
......@@ -81,7 +80,7 @@ func (ul *UsagerNormal) Act(ag *Agent) {
} else if ag.decision == EnterMetro {
fmt.Println("[UsagerNormal, Act] EnterMetro")
ag.env.RemoveAgent(ag)
ul.req.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], ACK)
un.req.Demandeur() <- *req.NewRequest(ag.env.agentsChan[ag.id], ACK)
} else if ag.decision == Expel {
//fmt.Println("[AgentLambda, Act] Expel")
ag.destination = ag.findNearestExit()
......@@ -95,15 +94,15 @@ func (ul *UsagerNormal) Act(ag *Agent) {
}
func (ul *UsagerNormal)setUpDestination(ag *Agent){
func (un *UsagerNormal)setUpDestination(ag *Agent){
choix_voie := rand.Intn(2) // choix de la voie de métro aléatoire
dest_porte := (ul.findBestGate(ag, ag.env.metros[choix_voie].way.gates))
dest_porte := (un.findBestGate(ag, ag.env.metros[choix_voie].way.gates))
ag.destination = dest_porte
}
func (ul *UsagerNormal) findBestGate(ag *Agent, gates []alg.Coord) alg.Coord {
func (un *UsagerNormal) findBestGate(ag *Agent, gates []alg.Coord) alg.Coord {
gatesDistances := make([]Gate, len(gates))
for i, gate := range gates {
dist := alg.Abs(ag.position[0]-gate[0]) + alg.Abs(ag.position[1]-gate[1])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment