Skip to content

Commit

Permalink
Remove old algorithms
Browse files Browse the repository at this point in the history
  • Loading branch information
timschneeb committed Oct 15, 2021
1 parent 2cb1348 commit f118005
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 318 deletions.
20 changes: 6 additions & 14 deletions src/model/CurveFittingOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,11 @@ typedef std::pair<double,double> DoubleRange;
class CurveFittingOptions {
public:
enum AlgorithmType {
AT_DIFF_EVOLUTION = 0,
AT_SGD = 1,
AT_FMINSEARCHBND = 2,
AT_FLOWERPOLLINATION = 3,
AT_CHIO = 4,
AT_HYBRID_DE_FMIN = 5,
AT_HYBRID_FLOWER_FMIN = 6,
AT_HYBRID_CHIO_FMIN = 7,
AT_HYBRID_SGD_DE = 8,
AT_HYBRID_SGD_CHIO = 9
AT_HYBRID_SGD_DE = 0,
AT_HYBRID_SGD_CHIO = 1,
AT_SGD = 2,
AT_DIFF_EVOLUTION = 3,
AT_CHIO = 4
};

enum ProbDensityFunc {
Expand All @@ -34,7 +29,7 @@ class CurveFittingOptions {
DoubleRange _obc_freq, DoubleRange _obc_q, DoubleRange _obc_gain,
bool _force_oct_grid, unsigned int _iterations, unsigned int _iterations2, unsigned int _iterations3,
double _avgbw, double _pop_k, double _pop_n,
bool _fmin_dimension_adaptive, double _de_probibound, double _flower_pcond, double _flower_weight_step,
double _de_probibound,
unsigned int _chio_max_sol_survive_epoch, unsigned int _chio_c0, double _chio_spreading_rate, bool _invert_gain,
float _model_complexity, double _learnRate1, double _learnDecayRate1, double _learnRate2, double _learnDecayRate2){
algorithm_type = _algorithm_type;
Expand All @@ -53,10 +48,7 @@ class CurveFittingOptions {
avgbw = _avgbw;
pop_k = _pop_k;
pop_n = _pop_n;
fmin_dimension_adaptive = _fmin_dimension_adaptive;
de_probibound = _de_probibound;
flower_pcond = _flower_pcond;
flower_weight_step = _flower_weight_step;
chio_max_sol_survive_epoch = _chio_max_sol_survive_epoch;
chio_c0 = _chio_c0;
chio_spreading_rate = _chio_spreading_rate;
Expand Down
42 changes: 0 additions & 42 deletions src/utils/CurveFittingWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -557,54 +557,12 @@ void CurveFittingWorker::run()
qDebug("CurveFittingThread: gmin=%lf", gmin);
break;
}
// Standalone fminsearch
case CurveFittingOptions::AT_FMINSEARCHBND: {
emit stageChanged(1, algorithm_type);
double fval = fminsearchbnd(peakingCostFunctionMap, userdataPtr, initialAns, low, up, dim, 1e-8, 1e-8, stage1Epk, gbest, options.fminDimensionAdaptive(), optStatus, hist_userdata);
qDebug("CurveFittingThread: lval=%lf", fval);
break;
}
// Flower pollination could be as robust as DE, user could also improve FPA result using fminsearch
case CurveFittingOptions::AT_FLOWERPOLLINATION: {
emit stageChanged(1, algorithm_type);
double gmin = flowerPollination(peakingCostFunctionMap, userdataPtr, initialAns, low, up, dim, K * N, options.flowerPCond(), options.flowerWeightStep(), stage1Epk, gbest, &PRNG, pdf1, optStatus, hist_userdata);
qDebug("CurveFittingThread: gmin=%lf", gmin);
break;
}
case CurveFittingOptions::AT_CHIO: {
emit stageChanged(1, algorithm_type);
double fval = CHIO(peakingCostFunctionMap, userdataPtr, initialAns, K * N, options.chioMaxSolSurviveEpoch(), options.chioC0(), options.chioSpreadingRate(), dim, low, up, stage1Epk, gbest, &PRNG, optStatus, hist_userdata);
qDebug("CurveFittingThread: fval=%lf", fval);
break;
}
case CurveFittingOptions::AT_HYBRID_DE_FMIN: {
emit stageChanged(1, CurveFittingOptions::AT_DIFF_EVOLUTION);
double gmin = differentialEvolution(peakingCostFunctionMap, userdataPtr, initialAns, K, N, options.deProbiBound(), dim, low, up, stage1Epk, gbest, &PRNG, pdf1, optStatus, hist_userdata);
qDebug("CurveFittingThread: gmin=%lf", gmin);
emit stageChanged(2, CurveFittingOptions::AT_FMINSEARCHBND);
double fval = fminsearchbnd(peakingCostFunctionMap, userdataPtr, gbest, low, up, dim, 1e-8, 1e-8, stage2Epk, gbest, options.fminDimensionAdaptive(), optStatus, hist_userdata);
qDebug("CurveFittingThread: fval=%lf", fval);

break;
}
case CurveFittingOptions::AT_HYBRID_FLOWER_FMIN: {
emit stageChanged(1, CurveFittingOptions::AT_FLOWERPOLLINATION);
double gmin = flowerPollination(peakingCostFunctionMap, userdataPtr, initialAns, low, up, dim, K * N, options.flowerPCond(), options.flowerWeightStep(), stage1Epk, gbest, &PRNG, pdf1, optStatus, hist_userdata);
qDebug("CurveFittingThread: gmin=%lf", gmin);
emit stageChanged(2, CurveFittingOptions::AT_FMINSEARCHBND);
double fval = fminsearchbnd(peakingCostFunctionMap, userdataPtr, gbest, low, up, dim, 1e-8, 1e-8, stage2Epk, gbest, options.fminDimensionAdaptive(), optStatus, hist_userdata);
qDebug("CurveFittingThread: fval=%lf", fval);
break;
}
case CurveFittingOptions::AT_HYBRID_CHIO_FMIN: {
emit stageChanged(1, CurveFittingOptions::AT_CHIO);
double fval = CHIO(peakingCostFunctionMap, userdataPtr, initialAns, K * N, options.chioMaxSolSurviveEpoch(), options.chioC0(), options.chioSpreadingRate(), dim, low, up, stage1Epk, gbest, &PRNG, optStatus, hist_userdata);
qDebug("CurveFittingThread: fval=%lf", fval);
emit stageChanged(2, CurveFittingOptions::AT_FMINSEARCHBND);
double fval2 = fminsearchbnd(peakingCostFunctionMap, userdataPtr, gbest, low, up, dim, 1e-8, 1e-8, stage2Epk, gbest, options.fminDimensionAdaptive(), optStatus, hist_userdata);
qDebug("CurveFittingThread: fval2=%lf", fval2);
break;
}
case CurveFittingOptions::AT_SGD: {
emit stageChanged(1, CurveFittingOptions::AT_SGD);
double cost1 = buildDAGNodesDifferentiate(&PRNG, gbest, target, phi, weights, numBands, array_size, fs, 1, stage1Epk, lr1, lr1DecayRate, low, up, optStatus, userdataPtr);
Expand Down
82 changes: 2 additions & 80 deletions src/widget/CurveFittingDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,27 +38,17 @@ CurveFittingDialog::CurveFittingDialog(QWidget *parent) :
auto * deLayout = new QVBoxLayout(this);
deLayout->setContentsMargins(6, 0, 0, 0);
deLayout->addWidget(ui->algo_de_container);
auto * flowerLayout = new QVBoxLayout(this);
flowerLayout->setContentsMargins(6, 0, 0, 0);
flowerLayout->addWidget(ui->algo_flower_container);
auto * chioLayout = new QVBoxLayout(this);
chioLayout->setContentsMargins(6, 0, 0, 0);
chioLayout->addWidget(ui->algo_chio_container);
auto * fminLayout = new QVBoxLayout(this);
fminLayout->setContentsMargins(6, 0, 0, 0);
fminLayout->addWidget(ui->algo_fmin_container);
auto * sgdLayout = new QVBoxLayout(this);
sgdLayout->setContentsMargins(6, 0, 0, 0);
sgdLayout->addWidget(ui->algo_sgd_container);

algo_de = new Expander("Differential evolution options", 300, ui->mainPane);
algo_de->setContentLayout(*deLayout);
algo_flower = new Expander("Flower pollination search options", 300, ui->mainPane);
algo_flower->setContentLayout(*flowerLayout);
algo_chio = new Expander("CHIO options", 300, ui->mainPane);
algo_chio->setContentLayout(*chioLayout);
algo_fmin = new Expander("Bounded simplex search options", 300, ui->mainPane);
algo_fmin->setContentLayout(*fminLayout);
algo_sgd = new Expander("SGD options", 300, ui->mainPane);
algo_sgd->setContentLayout(*sgdLayout);
opt_boundary_constraints = new Expander("Optimization boundary constraints", 300, ui->mainPane);
Expand All @@ -70,16 +60,14 @@ CurveFittingDialog::CurveFittingDialog(QWidget *parent) :

ui->mainPane->layout()->addWidget(algo_sgd);
ui->mainPane->layout()->addWidget(algo_de);
ui->mainPane->layout()->addWidget(algo_flower);
ui->mainPane->layout()->addWidget(algo_chio);
ui->mainPane->layout()->addWidget(algo_fmin);
ui->mainPane->layout()->addWidget(opt_boundary_constraints);
ui->mainPane->layout()->addWidget(fgrid);
ui->mainPane->layout()->addWidget(advanced_rng);
ui->mainPane->layout()->addWidget(ui->previewSwitchLayout);
ui->mainPane->layout()->addWidget(ui->footer);

QList<Expander*> _expanders(std::initializer_list<Expander*>({algo_de, algo_flower, algo_chio, algo_fmin, opt_boundary_constraints, fgrid, advanced_rng}));
QList<Expander*> _expanders(std::initializer_list<Expander*>({algo_de, algo_chio, algo_sgd, opt_boundary_constraints, fgrid, advanced_rng}));
for(const auto& exp : qAsConst(_expanders)){
connect(exp, &Expander::stateChanged, this, [=](bool state){
if(state){
Expand Down Expand Up @@ -398,8 +386,7 @@ void CurveFittingDialog::accept()
ui->iterations_c->value(),
ui->fgrid_avgbw->value(),
ui->rnd_pop_k->value(), ui->rnd_pop_n->value(),
ui->algo_fmin_dimension_adaptive->isChecked(), ui->algo_de_probibound->value(),
ui->algo_flower_pcond->value(), ui->algo_flower_weightstep->value(),
ui->algo_de_probibound->value(),
ui->algo_chio_maxsolsurvive->value(), ui->algo_chio_c0->value(), ui->algo_chio_spreadingrate->value(),
ui->invert_gain->isChecked(),
ui->modelComplex->value(),
Expand Down Expand Up @@ -440,57 +427,15 @@ void CurveFittingDialog::updateSupportedProperties(int index){
ui->iterations_b->setValue(50000);
ui->iterations_c->setValue(4000);
break;
case CurveFittingOptions::AT_FMINSEARCHBND:
ui->iterations->setValue(20000);
break;
case CurveFittingOptions::AT_DIFF_EVOLUTION:
ui->iterations->setValue(20000);
break;
case CurveFittingOptions::AT_FLOWERPOLLINATION:
ui->iterations->setValue(4000);
break;
case CurveFittingOptions::AT_CHIO:
ui->iterations->setValue(4000);
break;
case CurveFittingOptions::AT_HYBRID_FLOWER_FMIN:
ui->iterations->setValue(4000);
ui->iterations_b->setValue(10000);
break;
case CurveFittingOptions::AT_HYBRID_DE_FMIN:
ui->iterations->setValue(20000);
ui->iterations_b->setValue(10000);
break;
case CurveFittingOptions::AT_HYBRID_CHIO_FMIN:
ui->iterations->setValue(4000);
ui->iterations_b->setValue(10000);
break;
}

// I really need to replace this enum with a more advanced class...
switch((CurveFittingOptions::AlgorithmType) index){
case CurveFittingOptions::AT_FMINSEARCHBND:
case CurveFittingOptions::AT_HYBRID_FLOWER_FMIN:
case CurveFittingOptions::AT_HYBRID_DE_FMIN:
case CurveFittingOptions::AT_HYBRID_CHIO_FMIN:
algo_fmin->setVisible(true);
break;
default:
algo_fmin->setVisible(false);
break;
}

switch((CurveFittingOptions::AlgorithmType) index){
case CurveFittingOptions::AT_HYBRID_FLOWER_FMIN:
case CurveFittingOptions::AT_FLOWERPOLLINATION:
algo_flower->setVisible(true);
break;
default:
algo_flower->setVisible(false);
break;
}

switch((CurveFittingOptions::AlgorithmType) index){
case CurveFittingOptions::AT_HYBRID_DE_FMIN:
case CurveFittingOptions::AT_DIFF_EVOLUTION:
case CurveFittingOptions::AT_HYBRID_SGD_DE:
algo_de->setVisible(true);
Expand All @@ -501,7 +446,6 @@ void CurveFittingDialog::updateSupportedProperties(int index){
}

switch((CurveFittingOptions::AlgorithmType) index){
case CurveFittingOptions::AT_HYBRID_CHIO_FMIN:
case CurveFittingOptions::AT_HYBRID_SGD_CHIO:
case CurveFittingOptions::AT_CHIO:
algo_chio->setVisible(true);
Expand All @@ -522,32 +466,10 @@ void CurveFittingDialog::updateSupportedProperties(int index){
break;
}

switch((CurveFittingOptions::AlgorithmType) index){
case CurveFittingOptions::AT_FMINSEARCHBND:
advanced_rng->setVisible(false);
break;
default:
advanced_rng->setVisible(true);
break;
}

QString shortcutA("");
QString shortcutB("");
QString shortcutC("");
switch((CurveFittingOptions::AlgorithmType) index){
case CurveFittingOptions::AT_HYBRID_FLOWER_FMIN:
case CurveFittingOptions::AT_HYBRID_DE_FMIN:
case CurveFittingOptions::AT_HYBRID_CHIO_FMIN: {

if(index == CurveFittingOptions::AT_HYBRID_DE_FMIN)
shortcutA = "de";
else if(index == CurveFittingOptions::AT_HYBRID_FLOWER_FMIN)
shortcutA = "fpa";
else if(index == CurveFittingOptions::AT_HYBRID_CHIO_FMIN)
shortcutA = "chio";
shortcutB = "simplex";
break;
}
case CurveFittingOptions::AT_SGD:
shortcutA = "sgd1";
shortcutB = "sgd2";
Expand Down
2 changes: 0 additions & 2 deletions src/widget/CurveFittingDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,7 @@ private slots:
Expander* advanced_rng = nullptr;
Expander* fgrid = nullptr;
Expander* algo_de = nullptr;
Expander* algo_flower = nullptr;
Expander* algo_chio = nullptr;
Expander* algo_fmin = nullptr;
Expander* algo_sgd = nullptr;

QVector<double> freq;
Expand Down
Loading

0 comments on commit f118005

Please sign in to comment.