-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlkbn.go
101 lines (89 loc) · 3.12 KB
/
lkbn.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"flag"
"fmt"
"os"
"strings"
"github.com/britojr/lkbn/learner"
)
// Define subcommand names
const (
ctLearnConst = "ctlearn"
ctLearnDescr = "run latent k-tree model learning algorithm"
ctParamLearnConst = "ctparam"
ctParamLearnDescr = "run parameter learning on a given model structure"
)
// Define Flag variables
var (
// common
verbose bool // verbose mode
// learn command
dataFile string // dataset csv file
parmFile string // parameters file for search algorithms
learnerAlg string // learner strategy
timeAvailable int // time available to search solution
numSolutions int // number of iterations
scoreFile string // precomputed parentsets score file
// param learn command
modelFIn string // network input file
modelFOut string // network output file
// Define subcommands
ctLearnComm *flag.FlagSet
ctParamLearnComm *flag.FlagSet
)
func main() {
initSubcommands()
// Verify that a subcommand has been provided
// os.Arg[0] : main command, os.Arg[1] : subcommand
if len(os.Args) < 2 {
printDefaults()
os.Exit(1)
}
switch os.Args[1] {
case ctLearnConst:
ctLearnComm.Parse(os.Args[2:])
runCTLearnComm()
case ctParamLearnConst:
ctParamLearnComm.Parse(os.Args[2:])
runCTParamLearnComm()
default:
printDefaults()
os.Exit(1)
}
}
func initSubcommands() {
// Subcommands
ctLearnComm = flag.NewFlagSet(ctLearnConst, flag.ExitOnError)
ctParamLearnComm = flag.NewFlagSet(ctParamLearnConst, flag.ExitOnError)
// learn subcommand flags
ctLearnComm.BoolVar(&verbose, "v", true, "prints detailed steps")
ctLearnComm.StringVar(&dataFile, "d", "", "dataset file in csv format")
ctLearnComm.StringVar(&parmFile, "p", "", "parameters file")
ctLearnComm.StringVar(&modelFOut, "bo", "", "network output file")
ctLearnComm.StringVar(&learnerAlg, "a", learner.AlgCTSampleSearch,
"learner algorithm ("+strings.Join([]string{
learner.AlgCTSampleSearch, learner.AlgCTBridgeSearch, learner.AlgBIextSearch,
}, "|")+")")
ctLearnComm.IntVar(&timeAvailable, "t", 60, "available time to search solution (0->unbounded)")
ctLearnComm.IntVar(&numSolutions, "i", 1, "max number of iterations (0->unbounded)")
ctLearnComm.StringVar(&scoreFile, "s", "", "precomputed scores file")
ctLearnComm.StringVar(&modelFIn, "bi", "", "network input file")
// param learn subcommand flags
ctParamLearnComm.BoolVar(&verbose, "v", true, "prints detailed steps")
ctParamLearnComm.StringVar(&dataFile, "d", "", "dataset file in csv format")
ctParamLearnComm.StringVar(&parmFile, "p", "", "parameters file")
ctParamLearnComm.StringVar(&modelFIn, "bi", "", "network input file")
ctParamLearnComm.StringVar(&modelFOut, "bo", "", "network output file")
}
func printDefaults() {
fmt.Printf("lkbn is a tool for learning latent k-tree models\n")
fmt.Printf("Usage:\n\n")
fmt.Printf("\tlkbn <command> [options]\n\n")
fmt.Printf("Commands:\n\n")
fmt.Printf("\t%v\t\t%v\n", ctLearnConst, ctLearnDescr)
fmt.Printf("\t%v\t\t%v\n", ctParamLearnConst, ctParamLearnDescr)
fmt.Println()
fmt.Printf("For usage details of each command, run:\n\n")
fmt.Printf("\tlkbn <command> --help\n")
fmt.Println()
}