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() { ...@@ -10,5 +10,7 @@ func main() {
//comsoc.Test_maxCount() //comsoc.Test_maxCount()
//comsoc.Test_checkProfile() //comsoc.Test_checkProfile()
//comsoc.Test_checkProfileAlternative() //comsoc.Test_checkProfileAlternative()
comsoc.Test_MajoritySWF() //comsoc.Test_MajoritySWF()
//comsoc.Test_sWFFactory()
comsoc.Test_majority()
} }
...@@ -5,7 +5,6 @@ import ( ...@@ -5,7 +5,6 @@ import (
"fmt" "fmt"
) )
// cours TODO
func plusN(n int) func(i int) int { func plusN(n int) func(i int) int {
f := func(i int) int { f := func(i int) int {
return (i + n) return (i + n)
......
package comsoc package comsoc
import ("fmt")
// majorité simple // 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
func MajoritySWF(p Profile) (count Count, err error) { func MajoritySWF(p Profile) (count Count, err error) {
count = make(Count)
err = checkProfileFromProfile(p) err = checkProfileFromProfile(p)
if err != nil { if err != nil {
return nil, err 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 { for _, pref := range p {
count[pref[0]]++ count[pref[0]]++
} }
...@@ -23,3 +26,12 @@ func MajoritySCF(p Profile) (bestAlts []Alternative, err error) { ...@@ -23,3 +26,12 @@ func MajoritySCF(p Profile) (bestAlts []Alternative, err error) {
} }
return maxCount(count), err 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 ...@@ -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( func SWFFactoryWithOptions(
swf func(Profile, []int) (Count, error), swf func(Profile, []int) (Count, error),
tb func([]Alternative) (Alternative, error), tb func([]Alternative) (Alternative, error),
...@@ -103,30 +125,14 @@ func SWFFactoryWithOptions( ...@@ -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 func SCFFactoryWithOptions(
profil := make([][]Alternative, 2) scf func(Profile, []int) ([]Alternative, error),
profil[0] = []Alternative{1, 2, 3, 4, 5, 6} tb func([]Alternative) (Alternative, error),
profil[1] = []Alternative{3, 2, 1, 4, 5, 6} ) func(Profile, []int) (Alternative, error) {
fmt.Println("Profil :", profil) return func(p Profile, o []int) (Alternative, error) {
//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) {
//récupération des meilleures alternatives //récupération des meilleures alternatives
bestAlts, errSCF := scf(p) bestAlts, errSCF := scf(p, o)
if errSCF != nil { if errSCF != nil {
return Alternative(0), errSCF return Alternative(0), errSCF
} }
...@@ -136,13 +142,10 @@ func SCFFactory(scf func(p Profile) ([]Alternative, error), tb func([]Alternativ ...@@ -136,13 +142,10 @@ func SCFFactory(scf func(p Profile) ([]Alternative, error), tb func([]Alternativ
} }
} }
func SCFFactoryWithOptions( func SCFFactory(scf func(p Profile) ([]Alternative, error), tb func([]Alternative) (Alternative, error)) func(Profile) (Alternative, error) {
scf func(Profile, []int) ([]Alternative, error), return func(p Profile) (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 //récupération des meilleures alternatives
bestAlts, errSCF := scf(p, o) bestAlts, errSCF := scf(p)
if errSCF != nil { if errSCF != nil {
return Alternative(0), errSCF return Alternative(0), errSCF
} }
...@@ -152,6 +155,7 @@ func SCFFactoryWithOptions( ...@@ -152,6 +155,7 @@ func SCFFactoryWithOptions(
} }
} }
func Test_sCFFactory() { func Test_sCFFactory() {
//Définition de l'Ordre strict //Définition de l'Ordre strict
orderedAlts := []Alternative{8, 9, 6, 1, 3, 2} 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