Skip to content
Snippets Groups Projects
Commit 23126687 authored by Gabrielle Van De Vijver's avatar Gabrielle Van De Vijver
Browse files

fix MajoritySWF

parent e92da658
No related branches found
No related tags found
No related merge requests found
......@@ -10,5 +10,7 @@ func main() {
//comsoc.Test_maxCount()
//comsoc.Test_checkProfile()
//comsoc.Test_checkProfileAlternative()
comsoc.Test_MajoritySWF()
//comsoc.Test_MajoritySWF()
//comsoc.Test_sWFFactory()
comsoc.Test_majority()
}
......@@ -5,7 +5,6 @@ import (
"fmt"
)
// cours TODO
func plusN(n int) func(i int) int {
f := func(i int) int {
return (i + n)
......
package comsoc
import ("fmt")
// majorité simple
// fonctions de bien-être social (social welfare function, SWF) :
// retournent un décompte à partir d'un profil
// En utilisation la méthode de la majorité simple
// Majorité simple
func MajoritySWF(p Profile) (count Count, err error) {
count = make(Count)
err = checkProfileFromProfile(p)
if err != nil {
return nil, err
}
//initialisation de la map : comptes à 0
count = make(Count,len(p))
for _,alt := range p[0]{
count[alt]=0
}
//actualisation du compte à l'aide du scrutin
for _, pref := range p {
count[pref[0]]++
}
......@@ -23,3 +26,12 @@ func MajoritySCF(p Profile) (bestAlts []Alternative, err error) {
}
return maxCount(count), err
}
func Test_majority() {
profil := GenerateProfile(3, 5)
fmt.Println("Profil :", profil)
count, _ := MajoritySWF(profil)
fmt.Println("Décompte :", count)
//winners, _ := MajoritySCF(profil)
//fmt.Println("Vainqueur(s) :", winners)
}
\ No newline at end of file
......@@ -62,6 +62,28 @@ func SWFFactory(swf func(Profile) (Count, error), tb func([]Alternative) (Altern
}
}
func Test_sWFFactory() {
//Définition de l'Ordre strict
orderedAlts := []Alternative{8, 9, 6, 1, 3, 2}
fmt.Println("Ordre strict :", orderedAlts)
//Construction d'un profil avec alternatives ex aequo
profil := make([][]Alternative, 2)
profil[0] = []Alternative{1, 2, 3, 4, 5, 6}
profil[1] = []Alternative{3, 2, 1, 4, 5, 6}
fmt.Println("Profil :", profil)
//Construction de la fonction Tie Break
lambda := TieBreakFactory(orderedAlts)
//Construction de la Social Welfare Factory à partir de la fonction swf + la fonction de TieBreak
mu := SWFFactory(MajoritySWF, lambda)
// mu := SWFFactory(BordaSWF, lambda)
//Construction d'une fonction
sorted_alts, _ := mu(profil)
fmt.Println("Alternatives strictement ordonnées selon la méthode de Borda :", sorted_alts)
}
func SWFFactoryWithOptions(
swf func(Profile, []int) (Count, error),
tb func([]Alternative) (Alternative, error),
......@@ -103,30 +125,14 @@ func SWFFactoryWithOptions(
}
}
func Test_sWFFactory() {
//Définition de l'Ordre strict
orderedAlts := []Alternative{8, 9, 6, 1, 3, 2}
fmt.Println("Ordre strict :", orderedAlts)
//Construction d'un profil avec alternatives ex aequo
profil := make([][]Alternative, 2)
profil[0] = []Alternative{1, 2, 3, 4, 5, 6}
profil[1] = []Alternative{3, 2, 1, 4, 5, 6}
fmt.Println("Profil :", profil)
//Construction de la fonction Tie Break
lambda := TieBreakFactory(orderedAlts)
//Construction de la Social Welfare Factory à partir de la fonction swf + la fonction de TieBreak
mu := SWFFactory(BordaSWF, lambda)
//Construction d'une fonction
sorted_alts, _ := mu(profil)
fmt.Println("Alternatives strictement ordonnées selon la méthode de Borda :", sorted_alts)
}
func SCFFactory(scf func(p Profile) ([]Alternative, error), tb func([]Alternative) (Alternative, error)) func(Profile) (Alternative, error) {
return func(p Profile) (Alternative, error) {
func SCFFactoryWithOptions(
scf func(Profile, []int) ([]Alternative, error),
tb func([]Alternative) (Alternative, error),
) func(Profile, []int) (Alternative, error) {
return func(p Profile, o []int) (Alternative, error) {
//récupération des meilleures alternatives
bestAlts, errSCF := scf(p)
bestAlts, errSCF := scf(p, o)
if errSCF != nil {
return Alternative(0), errSCF
}
......@@ -136,13 +142,10 @@ func SCFFactory(scf func(p Profile) ([]Alternative, error), tb func([]Alternativ
}
}
func SCFFactoryWithOptions(
scf func(Profile, []int) ([]Alternative, error),
tb func([]Alternative) (Alternative, error),
) func(Profile, []int) (Alternative, error) {
return func(p Profile, o []int) (Alternative, error) {
func SCFFactory(scf func(p Profile) ([]Alternative, error), tb func([]Alternative) (Alternative, error)) func(Profile) (Alternative, error) {
return func(p Profile) (Alternative, error) {
//récupération des meilleures alternatives
bestAlts, errSCF := scf(p, o)
bestAlts, errSCF := scf(p)
if errSCF != nil {
return Alternative(0), errSCF
}
......@@ -152,6 +155,7 @@ func SCFFactoryWithOptions(
}
}
func Test_sCFFactory() {
//Définition de l'Ordre strict
orderedAlts := []Alternative{8, 9, 6, 1, 3, 2}
......
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