A package for interleaving / multileaving ranking generation in go
A package for interleaving / multileaving ranking generation in go
It is mainly tailored to be used for generating interleaved or multileaved ranking based on the following algorithm
github.com/mathetake/itergo/bm
package)github.com/mathetake/intergo/gom
package)github.com/mathetake/itergo/tdm
package)NOTE: this package aims only at generating a single combined ranking and does not implement the evaluation functions of the given rankings.
Make sure that all of your rankings implement intergo.Ranking
interface defined in intergo.go
package intergo
type ID string
type Ranking interface {
GetIDByIndex(int) ID
Len() int
}
Then choose one of bm
or gom
or tdm
package which corresponds to the algorithm you want to use.
In each of these packages, there is a type which implements intergo.Interleaving
interface defined in intergo.go
,
package intergo
type Result struct {
RankingIndex int
ItemIndex int
}
type Interleaving interface {
GetInterleavedRanking(num int, rankings ...Ranking) ([]*Result, error)
}
and you can generate interleaved/multileaved ranking by calling GetInterleavedRanking
.
The following is an example using Team Draft MultiLeaving (implemented in tdm
package)
package main
import (
"fmt"
"strconv"
"github.com/mathetake/intergo"
"github.com/mathetake/intergo/tdm"
)
type tRanking []int
func (rk tRanking) GetIDByIndex(i int) intergo.ID {
return intergo.ID(strconv.Itoa(rk[i]))
}
func (rk tRanking) Len() int {
return len(rk)
}
// tRanking implements intergo.Ranking interface
var _ intergo.Ranking = tRanking{}
func main() {
ml := &tdm.TeamDraftMultileaving{}
rankingA := tRanking{1, 2, 3, 4, 5}
rankingB := tRanking{10, 20, 30, 40, 50}
idxToRk := map[int]tRanking{
0: rankingA,
1: rankingB,
}
res, _ := ml.GetInterleavedRanking(4, rankingA, rankingB)
iRanking := tRanking{}
for _, it := range res {
iRanking = append(iRanking, idxToRk[it.RankingIndex][it.ItemIndex])
}
fmt.Printf("Result: %v\n", iRanking)
}
MIT