Skip to content
Snippets Groups Projects
user avatar
noere authored
e9eec405
History
Name Last commit Last update
.idea
td1
td2
td3
.DS_Store
README.md
a_faire.txt
go.mod
go.sum

Ia04 bureau de vote E.Blanc et N.Redouin

lancement

commande à lancer : go get gitlab.utc.fr/blancedo/ia04 go install gitlab.utc.fr/blancedo/ia04/td3/agt/launch/launch_ballot

Si cela ne fonctionne pas, il faut lancer la fonction main du fichier go: td3/agt/launch/launch_ballot/launch_ballot.go Le programme vous demandera quelle méthode de vote vous voulez ainsi que le nombre d'alternatives et de votant.

les méthodes de votes

les méthodes de votes que nous avons implémenté sont :

  • Borda
  • Condorcet
  • Copeland,
  • STV
  • Majority

Elles sont stockées dans le dossier td3/comsoc ainsi que les fonctions de TieBreak factory.

Côté serveur

Les fonctions sont stockées dans td3/agt/ballotagent/ballot.go, c'est dans ses focntions que les checks de sécurité et intégrité: timeout, len(liste de préférence) == nombre d' alternative, votant n'a pas déjà voté etc. sont faites.

initiier un ballot

http://127.0.0.1:8080/new_ballot permet de créer un ballot avec un JSON de ce type par méthode POST

{ "id": "ballot_1", "rule": "Borda", // Condorcet, Copeland, Approbation, STV ou Majority "deadline": "2023-12-31T00:00:00Z", "voters": ["voter1", "voter2"], "alts": 3, "tie_break": [1, 2, 3], "seuil": [10] }

http://127.0.0.1:8080/get_ballot permet de récupérer le ballot avec la méthode GET

initier un vote pour un agent

http://127.0.0.1:8080/vote permet de créer un vote pour un des votants d'un ballot avec la méthode POST

{ "voteur_id": "voter1", "ballot_id" : "ballot_1", "prefs" : [1,2,3], "options" : [0] } { "voteur_id": "voter2", "ballot_id" : "ballot_1", "prefs" : [3,2,1], "options" : [0] }

lancer un vote

http://127.0.0.1:8080/result va lancer la procédure de vote selon la méthode de vote choisie lors de l'initialisation du ballot. Pour cela nous avons juste besoint du ballot_id car le serveur garde les ballots.

type Result_request struct { Ballot_id string json : "ballot_id" }

Côté client

Les agents "clients" sont stocké dans le dossier td3/agt/agent. Nous avons créé trois types d'agents, pour les trois tâches différentes nécessaires. Les agents communiquent avec le serveur par protocole http à travers les fonctions doRequest() et treatResponse() et se lance avec la fonction start. On utilise les fonctions json: Marshal() et Unmarschal() pour encoder et décoder les requêtes des côtés clients et serveurs.

1 - Un agent permettant de créer un ballot (AgentCreantBallot.go)

Grâce à cette agent on peut envoyer une requête au serveur contenant toute les informations nécessaires afin de créer un nouveau ballot.

2 - Un agent permettant de voter

Plusieurs agents de ce type devront être initialisé , chacun d'eux permettra d'initialisé le vote d'un votant pour un ballot.

3 - Un agent permettant de lancer la procédure de vote

Cet agent permet de lancer le vote d'un ballot une fois que tout les votants ont voté. Le serveur retourne à l'agent le numéro du ballot, le vainqueur ainsi que les partcipants classés dans l'ordre décroissant.

Launch / programme main

launch_serv.go

Pour seulement lancer le serveur on peut lancer le main de ia04\td3\agt\launch\launch_serv\launch_serv.go, ensuite on peut lancer les requêtes à la main grâce à un gestionnaire de requêtes.

launch_ballot.go

Dans ce fichier on simule un vote du début à la fin. Tout d'abord on demande des informations au client:

  • quel méthode de vote ?
  • le nombre de votant ?
  • le nombre d'alternative ?
  • la deadline est automatiquement J+1
  • l'ordre du tiebreak est généré aléatoirement par rapport au nombre d'alternatives

Le ballot est alors créé

Ensuite les votants sont créent dans une boucle par rapport au nombre de votant:

  • Leur préférence est créé aléatoirement par rapport au nombre d'alternative
  • le vote est ensuite enregistré au ballot et le booléen Has_voted du ballot est actualisé pour ce votant

Enfin l'agent "result" lance la procédure de vote et affiche le résultat grâce aux fonctions de vote stockés dans le dossier cosmoc.