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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
use crate::problem::KurobakoProblemRecipe;
use kurobako_problems::hpobench;
use kurobako_problems::sigopt;
use std::path::PathBuf;
use structopt::StructOpt;

#[derive(Debug, StructOpt)]
#[structopt(rename_all = "kebab-case")]
pub enum ProblemSuite {
    Sigopt(SigoptProblemSuite),
    Hpobench(HpobenchProblemSuite),
}
impl ProblemSuite {
    pub fn recipes(&self) -> Box<dyn Iterator<Item = KurobakoProblemRecipe>> {
        match self {
            Self::Sigopt(s) => s.recipes(),
            Self::Hpobench(s) => s.recipes(),
        }
    }
}

#[derive(Debug, StructOpt)]
#[structopt(rename_all = "kebab-case")]
pub enum HpobenchProblemSuite {
    Fcnet { dataset_dir: PathBuf },
}
impl HpobenchProblemSuite {
    fn recipes(&self) -> Box<dyn Iterator<Item = KurobakoProblemRecipe>> {
        match self {
            Self::Fcnet { dataset_dir } => {
                let recipe = |name| hpobench::HpobenchProblemRecipe {
                    dataset: dataset_dir.join(name),
                };
                let recipes = vec![
                    recipe("fcnet_naval_propulsion_data.hdf5"),
                    recipe("fcnet_parkinsons_telemonitoring_data.hdf5"),
                    recipe("fcnet_protein_structure_data.hdf5"),
                    recipe("fcnet_slice_localization_data.hdf5"),
                ];
                Box::new(recipes.into_iter().map(KurobakoProblemRecipe::from))
            }
        }
    }
}

#[derive(Debug, StructOpt)]
#[structopt(rename_all = "kebab-case")]
pub enum SigoptProblemSuite {
    Nonparametric,
    Auc,
}
impl SigoptProblemSuite {
    fn recipes(&self) -> Box<dyn Iterator<Item = KurobakoProblemRecipe>> {
        use kurobako_problems::sigopt::Name::{self, *};

        fn recipe(name: Name, dim: u32, res: Option<f64>) -> sigopt::SigoptProblemRecipe {
            sigopt::SigoptProblemRecipe {
                name,
                dim: Some(dim),
                res,
            }
        }

        let specs = match self {
            SigoptProblemSuite::Nonparametric => vec![
                recipe(Ackley, 11, None),
                recipe(Ackley, 3, Some(1.0)),
                recipe(Adjiman, 2, None),
                recipe(Alpine02, 2, None),
                recipe(CarromTable, 2, None),
                recipe(Csendes, 2, None),
                recipe(DeflectedCorrugatedSpring, 4, None),
                recipe(DeflectedCorrugatedSpring, 7, None),
                recipe(Easom, 2, None),
                recipe(Easom, 4, None),
                recipe(Easom, 5, None),
                recipe(Hartmann3, 3, None),
                recipe(Hartmann6, 6, Some(10.0)),
                recipe(HelicalValley, 3, None),
                recipe(LennardJones6, 6, None),
                recipe(McCourt01, 7, Some(10.0)),
                recipe(McCourt03, 9, None),
                recipe(McCourt06, 5, None),
                recipe(McCourt07, 6, Some(12.0)),
                recipe(McCourt08, 4, None),
                recipe(McCourt09, 3, None),
                recipe(McCourt10, 8, None),
                recipe(McCourt11, 8, None),
                recipe(McCourt12, 7, None),
                recipe(McCourt13, 3, None),
                recipe(McCourt14, 3, None),
                recipe(McCourt16, 4, None),
                recipe(McCourt16, 4, Some(10.0)),
                recipe(McCourt17, 7, None),
                recipe(McCourt18, 8, None),
                recipe(McCourt19, 2, None),
                recipe(McCourt20, 2, None),
                recipe(McCourt23, 6, None),
                recipe(McCourt26, 3, None),
                recipe(McCourt28, 4, None),
                recipe(Michalewicz, 4, None),
                recipe(Michalewicz, 4, Some(20.0)),
                recipe(Michalewicz, 8, None),
                recipe(Mishra06, 2, None),
                recipe(Ned01, 2, None),
                recipe(OddSquare, 2, None),
                recipe(Parsopoulos, 2, None),
                recipe(Pinter, 2, None),
                recipe(Plateau, 2, None),
                recipe(Problem03, 1, None),
                recipe(RosenbrockLog, 11, None),
                recipe(Sargan, 5, None),
                recipe(Sargan, 2, None),
                recipe(Schwefel20, 2, None),
                recipe(Schwefel36, 2, None),
                recipe(Shekel05, 4, None),
                recipe(Sphere, 7, None),
                recipe(StyblinskiTang, 5, None),
                recipe(Tripod, 2, None),
                recipe(Xor, 9, None),
            ],
            SigoptProblemSuite::Auc => vec![
                recipe(Ackley, 3, None),
                recipe(Ackley, 5, None),
                recipe(Ackley, 11, None),
                recipe(Ackley, 3, Some(1.0)),
                recipe(Branin02, 2, None),
                recipe(Bukin06, 2, None),
                recipe(CarromTable, 2, None),
                recipe(Deb02, 6, None),
                recipe(DeflectedCorrugatedSpring, 4, None),
                recipe(Easom, 4, None),
                recipe(Easom, 5, None),
                recipe(Exponential, 6, None),
                recipe(Hartmann3, 3, None),
                recipe(LennardJones6, 6, None),
                recipe(McCourt01, 7, Some(10.0)),
                recipe(McCourt02, 7, None),
                recipe(McCourt06, 5, Some(12.0)),
                recipe(McCourt07, 6, Some(12.0)),
                recipe(McCourt19, 2, None),
                recipe(McCourt22, 5, None),
                recipe(McCourt27, 3, None),
                recipe(Michalewicz, 4, None),
                recipe(Mishra06, 2, None),
                recipe(Ned01, 2, None),
                recipe(Plateau, 2, None),
                recipe(Rastrigin, 8, None),
                recipe(Rastrigin, 8, Some(0.1)),
                recipe(Sargan, 2, None),
                recipe(Schwefel20, 2, None),
                recipe(Shekel05, 4, None),
                recipe(Shekel07, 4, None),
                recipe(Sphere, 7, None),
                recipe(StyblinskiTang, 5, None),
                recipe(Trid, 6, None),
                recipe(Tripod, 2, None),
                recipe(Weierstrass, 3, None),
                recipe(Xor, 9, None),
                recipe(YaoLiu, 5, None),
            ],
        };
        Box::new(specs.into_iter().map(KurobakoProblemRecipe::from))
    }
}