Matt,

Here is a program that feels pain.

I got the logic, but no pain when processing the code in my mind.
Maybe you should mention in the pain.cpp description that it needs to
be processed for long enough - so whatever is gonna process it, it
will eventually get to the 'I don't "feel" like doing this any more'
point. ;-)) Looks like the entropy is kind of "pain" to us (& to our
devices) and the negative entropy might be kind of "pain" to the
universe. Hopefully, when (/if) our AGI figures this out, it will not
attempt to squeeze the Universe into a single spot to "solve" it.

Regards,
Jiri Jelinek

On 6/11/07, Matt Mahoney <[EMAIL PROTECTED]> wrote:
Here is a program that feels pain.  It is a simulation of a 2-input logic gate
that you train by reinforcement learning.  It "feels" in the sense that it
adjusts its behavior to avoid negative reinforcement from the user.


/* pain.cpp - A program that can feel pleasure and pain.

The program simulates a programmable 2-input logic gate.
You train it by reinforcement conditioning.  You provide a pair of
input bits (00, 01, 10, or 11).  It will output a 0 or 1.  If the
output is correct, you "reward" it by entering "+".  If it is wrong,
you "punish" it by entering "-".  You can program it this way to
implement any 2-input logic function (AND, OR, XOR, NAND, etc).
*/

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
  // probability of output 1 given input 00, 01, 10, 11
  double wt[4]={0.5, 0.5, 0.5, 0.5};

  while (1) {
    cout << "Please input 2 bits (00, 01, 10, 11): ";
    char b1, b2;
    cin >> b1 >> b2;
    int input = (b1-'0')*2+(b2-'0');
    if (input >= 0 && input < 4) {
      int response = double(rand())/RAND_MAX < wt[input];
      cout << "Output = " << response
           << ".  Please enter + if right, - if wrong: ";
      char reinforcement;
      cin >> reinforcement;
      if (reinforcement == '+')
        cout << "aah! :-)\n";
      else if (reinforcement == '-')
        cout << "ouch! :-(\n";
      else
        continue;
      int adjustment = (reinforcement == '-') ^ response;
      if (adjustment == 0)
        wt[input] /= 2;
      else
        wt[input] = 1 - (1 - wt[input])/2;
    }
  }
}

-----
This list is sponsored by AGIRI: http://www.agiri.org/email
To unsubscribe or change your options, please go to:
http://v2.listbox.com/member/?member_id=231415&user_secret=e9e40a7e

Reply via email to