dir_e computeDir(Grid &myGrid, char NT) { int m=0,ms=myGrid.getScore(),nt; float dm[4]={0}; dir_e bd=LEFT; for(int d=0;d<4;d++) { for(int i=0;i<RUNCNT;i++) { Grid tg=myGrid; if(!tg.shift(getDirFromInt(d))) break; //printf("%d\n", tg.getSlotNo());fflush(stdout); if(NT=='+') setNT(tg, genSNT(tg)); else { setNT(tg, NT-'0'); } for(int j=0;j<RUNDEP;j++) { if(!tg.shift(getRandDir())) continue; setNT(tg, getNT(tg)); } int s=tg.getScore(); if(s>m) { m=s; bd=getDirFromInt(d); } dm[d]+=s; } } int d=rand()%4; float dmm=dm[d]; gotoXY(5,20); for(int i=0;i<4;i++) { if(dm[i]>dmm) { dmm=dm[i]; d=i; } //printf("%.0f ", dm[i]); } //printf("\n%.0f %d\n", dmm, m); //printf("%d %d\n", d, bd); if(dmm/RUNCNT*DTHRS>m) return getDirFromInt(d); return bd; }
SimannealConfigDialog::SimannealConfigDialog(QWidget *parent): QFDialog(parent) { // setup widgets QVBoxLayout* main=new QVBoxLayout(); setLayout(main); QGridLayout* grid=new QGridLayout(); QLabel* l; l=new QLabel(tr("Maximum Iterations:"), this); l->setAlignment(Qt::AlignRight); spinMaxIterations=new QSpinBox(this); spinMaxIterations->setRange(100,1000000); spinMaxIterations->setSingleStep(100); l->setBuddy(spinMaxIterations); grid->addWidget(l, 0, 0); grid->addWidget(spinMaxIterations, 0, 1); grid->addWidget(new QLabel(tr("The maximum number of iterations that the Levenberg-Marquardt algorithm will go through before it halts."), this), 0, 2); l=new QLabel(tr("Initial Temperature T<sub>0</sub>:"), this); l->setAlignment(Qt::AlignRight); neditT0=new QFDoubleEdit(this); neditT0->setRange(0, 1e6); neditT0->setSingleStep(0.001); neditT0->setDecimals(12); l->setBuddy(neditT0); grid->addWidget(l, 1, 0); grid->addWidget(neditT0, 1, 1); grid->addWidget(new QLabel(tr("The initial temperature is set to be T<sub>start</sub>=T<sub>0</sub>·χ<sup>2</sup>(<b>p</b><sub>start</sub>), depending on the initial parameters <b>p</b><sub>start</sub>."), this), 1, 2); l=new QLabel(tr("Temperature Decrease Rate r<sub>T</sub>:"), this); l->setAlignment(Qt::AlignRight); neditRT=new QFDoubleEdit(this); neditRT->setRange(0, 1e6); neditRT->setSingleStep(0.001); neditRT->setDecimals(12); l->setBuddy(neditRT); grid->addWidget(l, 2, 0); grid->addWidget(neditRT, 2, 1); grid->addWidget(new QLabel(tr("constant for temperature decrease: T<sub>new</sub> = r<sub>T</sub> · T<sub>old</sub>"), this), 2, 2); l=new QLabel(tr("convergence parameter f<sub>max</sub>:"), this); l->setAlignment(Qt::AlignRight); neditFMax=new QFDoubleEdit(this); neditFMax->setRange(0, 1e6); neditFMax->setSingleStep(0.001); neditFMax->setDecimals(12); l->setBuddy(neditFMax); grid->addWidget(l, 3, 0); grid->addWidget(neditFMax, 3, 1); grid->addWidget(new QLabel(tr("if |χ<sup>2</sup><sub>opt, i-1</sub> - χ<sup>2</sup><sub>opt, i</sub>| < f<sub>max</sub> the algorithm is said to have converged."), this), 3, 2); l=new QLabel(tr("step update constant c:"), this); l->setAlignment(Qt::AlignRight); neditC=new QFDoubleEdit(this); neditC->setRange(0, 1e6); neditC->setSingleStep(0.001); neditC->setDecimals(12); l->setBuddy(neditC); grid->addWidget(l, 4, 0); grid->addWidget(neditC, 4, 1); grid->addWidget(new QLabel(tr("constant for the update of the step vectors"), this), 4, 2); l=new QLabel(tr("Step Size Variations N<sub>S</sub>:"), this); l->setAlignment(Qt::AlignRight); spinNS=new QSpinBox(this); spinNS->setRange(1,100000000); spinNS->setSingleStep(100); l->setBuddy(spinNS); grid->addWidget(l, 5, 0); grid->addWidget(spinNS, 5, 1); grid->addWidget(new QLabel(tr("The number of variations of the step length before convergence check."), this), 5, 2); l=new QLabel(tr("Monte-Carlo Steps per Step Size N<sub>T</sub>:"), this); l->setAlignment(Qt::AlignRight); spinNT=new QSpinBox(this); spinNT->setRange(1,100000000); spinNT->setSingleStep(100); l->setBuddy(spinNT); grid->addWidget(l, 6, 0); grid->addWidget(spinNT, 6, 1); grid->addWidget(new QLabel(tr("Number of Monte-Carlo steps with each step size configuration."), this), 6, 2); l=new QLabel(tr("Maximum Iterations:"), this); l->setAlignment(Qt::AlignRight); spinNEpsilon=new QSpinBox(this); spinNEpsilon->setRange(1,100000000); spinNEpsilon->setSingleStep(100); l->setBuddy(spinNEpsilon); grid->addWidget(l, 7, 0); grid->addWidget(spinNEpsilon, 7, 1); grid->addWidget(new QLabel(tr("The Algorithm looks at the past N<sub>epsilon</sub> values of χ<sup>2</sup>(<b>p</b>) to check convergence."), this), 7, 2); main->addLayout(grid, 10); buttons=new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel, Qt::Horizontal, this); connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); main->addWidget(buttons, 0); // set default initial values, defined in header file setFMax(); setT0(); setC(); setNS(); setNT(); setNEpsilon(); setRT(); setMaxIterations(); }