22 #include <QStringList>
26 using namespace Eigen;
30 IdentityFunction::IdentityFunction()
39 derivates.setConstant( 1.0 );
62 outputs = inputs * rate;
66 derivates.setConstant( rate );
73 QString str = params.
getValue(prefix +
"rate");
76 rate = str.toDouble(&ok);
95 for(
int i=0; i<inputs.size(); i++ ) {
96 outputs[i] = inputs[i] + gainv;
101 derivates.setConstant( 1.0 );
108 QString str = params.
getValue(prefix +
"gain");
109 if (!str.isEmpty()) {
111 gainv = str.toDouble(&ok);
131 for(
int i=0; i<inputs.size(); i++ ) {
132 outputs[i] = 1.0/(exp(-
lambda*inputs[i])+1.0);
138 for(
int i=0; i<outputs.size(); i++ ) {
139 derivates[i] =
lambda * outputs[i] * (1.0-outputs[i]);
147 QString str = params.
getValue(prefix +
"lambda");
148 if (!str.isEmpty()) {
150 lambda = str.toDouble(&ok);
169 unsigned int size = inputs.size();
171 double x0 = 6. + 2./3.;
173 for (
unsigned int i = 0; i<size; i++ ) {
176 x -= (.5 - zero) / (.075 + zero);
181 outputs[i] = .5 + .575 * x / ( 1.0 + fabs(x) );
191 for(
int i=0; i<outputs.size(); i++ ) {
192 derivates[i] =
lambda * outputs[i] * (1.0-outputs[i]);
200 QString str = params.
getValue(prefix +
"lambda");
201 if (!str.isEmpty()) {
203 lambda = str.toDouble(&ok);
227 for(
int i=0; i<inputs.size(); i++ ) {
228 outputs[i] = 1.0/(exp(-
lambda*inputs[i])+1.0);
236 for(
int i=0; i<outputs.size(); i++ ) {
237 derivates[i] =
lambda * outputs[i] * (1.0-outputs[i]);
245 QString str = params.
getValue(prefix +
"lambda");
246 if (!str.isEmpty()) {
248 lambda = str.toDouble(&ok);
255 str = params.
getValue(prefix +
"min");
256 if (!str.isEmpty()) {
258 min = str.toDouble(&ok);
265 str = params.
getValue(prefix +
"max");
266 if (!str.isEmpty()) {
268 max = str.toDouble(&ok);
300 unsigned int size = inputs.size();
303 for (
unsigned int i = 0; i<size; i++ ) {
304 double ret = m*(inputs[i]) + q;
307 }
else if (ret >
max_y) {
316 for(
int i=0; i<inputs.size(); i++ ) {
317 if ( inputs[i] >=
min_x && inputs[i] <=
max_x ) {
321 y = 1.0/( 1.0 + std::exp( -inputs[i] ) );
322 derivates[i] = y * ( 1.0 - y );
331 QString str = params.
getValue(prefix +
"minX");
332 if (!str.isEmpty()) {
334 min_x = str.toDouble(&ok);
341 str = params.
getValue(prefix +
"maxX");
342 if (!str.isEmpty()) {
344 max_x = str.toDouble(&ok);
351 str = params.
getValue(prefix +
"minY");
352 if (!str.isEmpty()) {
354 min_y = str.toDouble(&ok);
361 str = params.
getValue(prefix +
"maxY");
362 if (!str.isEmpty()) {
364 max_y = str.toDouble(&ok);
393 for(
int i=0; i<inputs.size(); i++ ) {
394 outputs[i] =
m*inputs[i]+
b;
399 derivates.setConstant(
m );
406 QString str = params.
getValue(prefix +
"m");
407 if (!str.isEmpty()) {
409 m = str.toDouble(&ok);
416 str = params.
getValue(prefix +
"b");
417 if (!str.isEmpty()) {
419 b = str.toDouble(&ok);
441 for(
int i = 0; i<inputs.size(); i++ ) {
448 for(
int i=0; i<inputs.size(); i++ ) {
450 y = 1.0/( 1.0 + std::exp( -inputs[i] ) );
451 derivates[i] = y * ( 1.0 - y );
459 QString str = params.
getValue(prefix +
"min");
460 if (!str.isEmpty()) {
462 min = str.toDouble(&ok);
469 str = params.
getValue(prefix +
"max");
470 if (!str.isEmpty()) {
472 max = str.toDouble(&ok);
479 str = params.
getValue(prefix +
"threshold");
480 if (!str.isEmpty()) {
508 for(
int i=0; i<inputs.size(); i++ ) {
528 QString str = params.
getValue(prefix +
"delta");
529 if (!str.isEmpty()) {
530 QStringList list = str.split(QRegExp(
"\\s+"), QString::SkipEmptyParts);
531 delta.resize(list.size());
532 for(
int i = 0; i < list.size(); i++) {
534 delta[i] = list[i].toDouble(&ok);
542 str = params.
getValue(prefix +
"outprev");
543 if (!str.isEmpty()) {
544 QStringList list = str.split(QRegExp(
"\\s+"), QString::SkipEmptyParts);
546 for(
int i = 0; i < list.size(); i++) {
548 outprev[i] = list[i].toDouble(&ok);
563 for (
int i = 0; i <
delta.size(); i++) {
564 list.push_back(QString::number(
delta[i]));
570 for (
int i = 0; i <
delta.size(); i++) {
571 list.push_back(QString::number(
outprev[i]));
584 for(
int i=0; i<inputs.size(); i++ ) {
585 outputs[i] = inputs[i]/(1.0+
A*inputs[i]+
B);
592 QString str = params.
getValue(prefix +
"A");
593 if (!str.isEmpty()) {
595 A = str.toDouble(&ok);
602 str = params.
getValue(prefix +
"B");
603 if (!str.isEmpty()) {
605 B = str.toDouble(&ok);
632 first->apply( inputs, mid );
633 second->apply( mid, outputs );
701 first->apply( inputs, mid );
703 second->apply( inputs, outputs );
759 QString str = params.
getValue(prefix +
"w1");
760 if (!str.isEmpty()) {
762 w1 = str.toDouble(&ok);
771 str = params.
getValue(prefix +
"w2");
772 if (!str.isEmpty()) {
774 w2 = str.toDouble(&ok);