00001 #include "gui.h"
00002
00003 void Simulation::apply_button_clicked()
00004 {
00005 this->guiReady = false;
00006 static int firstRun=true;
00007
00008 this->lg->ViTab->setEnabled (this->lg->ViLearningButton->isOn());
00009 this->lg->QTab->setEnabled (this->lg->QLearningButton->isOn());
00010
00011
00012 static int iHiddenLayers_old = 0, iHiddenUnits_old = 0, iRows_old = 0, iCols_old = 0;
00013 static double dGamma_old = 0;
00014
00015 int iHiddenLayers = 0, iHiddenUnits = 0, iRows = 0, iCols = 0;
00016 double dGamma = 0, dEta = 0;
00017 QTableItem *strategy_item, *value_item, *feedback_item;
00018
00019
00020 this->gamma = dGamma = this->lg->viGammaInput->text().toDouble();
00021
00022
00023 dEta = this->lg->netEta->text().toDouble();
00024 iHiddenUnits = this->lg->netHiddenUnits->text().toInt();
00025 iHiddenLayers = this->lg->netHiddenLayers->text().toInt();
00026
00027
00028 this->scalY = iRows = lg->numRows->text().toInt();
00029 this->scalX = iCols = lg->numCols->text().toInt();
00030 iMantisse = this->lg->mantisseInput->text().toInt();
00031 i_cell = lg->numRows->text().toInt() * lg->numCols->text().toInt();
00032
00033
00034 lg->viValueTable->setNumRows(iRows);
00035 lg->viValueTable->setNumCols(iCols);
00036 lg->strategyTable->setNumRows(iRows);
00037 lg->strategyTable->setNumCols(iCols);
00038
00039
00040 lg->envRewardTable->setNumRows(iRows);
00041 lg->envRewardTable->setNumCols(iCols);
00042
00043
00044 if ((iCols != iCols_old) || (iRows != iRows_old))
00045 {
00046
00047 for (int i=0; i<lg->numRows->text().toInt(); i++) {
00048 for (int j=0; j<lg->numCols->text().toInt(); j++) {
00049
00050
00051 value_item = new QTableItem(lg->viValueTable, QTableItem::Never);
00052 strategy_item = new QTableItem(lg->strategyTable, QTableItem::Never);
00053 feedback_item = new QTableItem(lg->envRewardTable, QTableItem::Never);
00054
00055
00056 value_item->setText (QString::number ((double)0.000));
00057 value_item->setPixmap (pix[5]);
00058 lg->viValueTable->setItem(i, j, value_item);
00059
00060
00061 strategy_item->setPixmap (pix[5]);
00062 lg->strategyTable->setItem(i, j, strategy_item);
00063
00064
00065 feedback_item->setText ("");
00066 lg->envRewardTable->setItem(i, j, feedback_item);
00067
00068 }
00069 }
00070
00071
00072 for (int j=0; j < lg->numCols->text().toInt(); j++) {
00073 lg->viValueTable->adjustColumn(j);
00074 lg->strategyTable->adjustColumn(j);
00075 }
00076
00077
00078 if (this->pkt != NULL) {
00079
00080 DBG();
00081
00082 pkt->setModusFromExtern ('q');
00083 while (pkt->running());
00084 DBG();
00085
00086 delete (pkt);
00087 }
00088
00089
00090 speed = this->lg->viSpeedSlider->maxValue()-this->lg->viSpeedSlider->value();
00091
00092
00093 this->pkt = new ValueIterationThread (
00094 (int)(this->lg->numCols->text().toInt()),
00095 (int)(this->lg->numRows->text().toInt()),
00096 this->gamma,
00097 speed,
00098 this->lg->netHiddenLayers->value(),
00099 this->lg->netHiddenUnits->value());
00100
00101 this->pkt->setTrainRandomValues((int)((float)this->scalX * (float)this->scalY *
00102 (float)this->lg->viRandomValuesSlider->value() / (float)this->lg->viRandomValuesSlider->maxValue())
00103 );
00104
00105
00106 connect( (QObject*)this->pkt,
00107 SIGNAL(emitValue(int, int, double, int)),
00108 (QObject*)this,
00109 SLOT(updatePolicyTable(int, int, double, int))
00110 );
00111 connect( (QObject*)this->pkt,
00112 SIGNAL(debugOutput(QString)),
00113 (QObject*)this,
00114 SLOT (debugOutput(QString))
00115 );
00116 connect( (QObject*)this->pkt,
00117 SIGNAL(emitNewNetworkError(double)),
00118 (QObject*)this,
00119 SLOT (adjust_network_error(double))
00120 );
00121
00122 this->lg->viSpeedSlider->setEnabled (true);
00123 connect(lg->viSpeedSlider, SIGNAL(sliderMoved(int)), this, SLOT(speed_slider_changed(int)));
00124 connect(lg->viRandomValuesSlider, SIGNAL(sliderMoved(int)), this, SLOT(vi_train_random_values_changed(int)));
00125 connect(lg->envRewardTable, SIGNAL(clicked(int, int, int, const QPoint&)),
00126 this, SLOT (feedbackClicked(int, int, int, const QPoint&)));
00127
00128
00129 this->lg->viLernenButton->setEnabled (true);
00130 this->lg->viIterationButton->setEnabled (true);
00131 this->lg->viSpeedSlider->setEnabled(true);
00132 this->lg->startSimulationButton->setEnabled(true);
00133 this->lg->viDeleteButton->setEnabled(true);
00134 this->lg->envLoadFileButton->setEnabled(true);
00135 this->lg->envSaveFileButton->setEnabled(true);
00136 this->lg->envSaveMatlabFileButton->setEnabled(true);
00137 this->lg->envSaveRewardButton->setEnabled(true);
00138
00139
00140
00141 if (firstRun==true) {
00142 this->learn_method_vi_clicked();
00143 firstRun=false;
00144 }
00145
00146 printf ("Configuration successfully applied\n");
00147
00148
00149 this->lg->canvasView->setDimension ( this->lg->numRows->value(),
00150 this->lg->numCols->value(),
00151 (this->lg->numRows->value()-1)/2,
00152 (this->lg->numCols->value()-1)/2
00153
00154
00155 );
00156
00157 this->sd->canvasView->setDimension ( this->lg->numRows->value(),
00158 this->lg->numCols->value(),
00159 (this->lg->numRows->value()-1)/2,
00160 (this->lg->numCols->value()-1)/2
00161
00162
00163 );
00164
00165
00166 } else if ((iHiddenUnits != iHiddenUnits_old) ||
00167 (iHiddenLayers != iHiddenLayers_old)) {
00168
00169
00170 if (this->pkt != NULL) {
00171
00172 DBG();
00173
00174 pkt->setModusFromExtern ('q');
00175 while (pkt->running());
00176 DBG();
00177
00178 delete (pkt);
00179 }
00180
00181
00182 this->pkt = new ValueIterationThread (
00183 (int)(this->lg->numCols->text().toInt()),
00184 (int)(this->lg->numRows->text().toInt()),
00185 this->gamma,
00186 speed,
00187 this->lg->netHiddenLayers->value(),
00188 this->lg->netHiddenUnits->value());
00189
00190 this->pkt->setTrainRandomValues((int)((float)this->scalX * (float)this->scalY *
00191 (float)this->lg->viRandomValuesSlider->value() / (float)this->lg->viRandomValuesSlider->maxValue())
00192 );
00193
00194
00195
00196 connect( (QObject*)this->pkt,
00197 SIGNAL(emitValue(int, int, double, int)),
00198 (QObject*)this,
00199 SLOT(updatePolicyTable(int, int, double, int))
00200 );
00201 connect( (QObject*)this->pkt,
00202 SIGNAL(debugOutput(QString)),
00203 (QObject*)this,
00204 SLOT (debugOutput(QString))
00205 );
00206 connect( (QObject*)this->pkt,
00207 SIGNAL(emitNewNetworkError(double)),
00208 (QObject*)this,
00209 SLOT (adjust_network_error(double))
00210 );
00211
00212 } else if (dGamma != dGamma_old) {
00213 this->pkt->setGamma (dGamma);
00214 }
00215
00216
00217 iCols_old = iCols;
00218 iRows_old = iRows;
00219
00220
00221 iHiddenUnits_old = iHiddenUnits;
00222 iHiddenLayers_old = iHiddenLayers;
00223
00224
00225 this->pkt->setNetworkParameters(
00226 this->lg->netMaxEpochs->value(),
00227 this->lg->netIterationsBetweenReport->value(),
00228 this->lg->netDesiredError->text().toDouble(),
00229 dEta,
00230 this->lg->netAutoAdjustError->isChecked(),
00231 this->lg->netActivationStepnessHidden->text().toDouble(),
00232 this->lg->netActivationStepnessOutput->text().toDouble(),
00233 this->lg->netHiddenActivationFunction->currentItem(),
00234 this->lg->netOutputActivationFunction->currentItem()
00235 );
00236
00237 int max;
00238 if(iCols> iRows) max = iCols;
00239 else max = iRows;
00240
00241
00242 this->guiReady = true;
00243 }
00244