the TCV

RM: In the Mindreading demo (http://www.mindreadings.com/ControlDemo/Mindread.html) for example the computer does a very good job (if you are good at controlling the position of the avatars) of determining which of three possible definitions of q.i – moving Homer, Bart or Lisa – corresponds to the perception that is actually under control ,p.

PY: I encourage everyone to test out the demo to see how good of a job RM has done to demonstrate the TCV.

PY: Rick describes three possible definitions of q.i – Homer, Bart, and Lisa. H, B, and L are what you would call “different instances of the same object”. They all have the same abstract data structure.

PY: In code, we would declare H, B, and L as data of the same “type”. For example, just as you would declare

int: a

int: b

int: c

to create three objects of the integer type, you would declare

avatar: Homer

avatar: Bart

avatar: Lisa

to create three objects of the avatar type.

PY: The avatar type looks something like this:

abstract data type: avatar

{

DATA

int: x_coordinate

int: y_coordinate

boolean: state

METHODS

function: change_state

//this is a definition of an object method inside the //object type definition

{

if state = normal

state = mr_burns

else

state = normal

} // end of function declaration

} // end of type declaration

PY: Note, objects are defined as data and method. These definitions tell the compiler how to implement the object when its instances are declared in the program. The actual program would look like this:

main()

{

avatar: H, B, L // declare object instances

for (t = 0; t < time_limit; t++) // the “for” loop

{ // every instant is a loop

H,B,L += cursor movement

// apply the same action to each avatar

H += rand(1)

B += rand(2)

L += rand(3)

// apply a different disturbance to each avatar

if correlation(H) < 0.05

H.change_state // object.method syntax

if correlation(B) < 0.05

B.change_state // same method, different instance

if correlation(L) < 0.05

L.change_state // ditto

} // end for loop

} // end main function

PY: This program doesn’t actually work, but it has all the main components (except the donuts).

PY: We see that different instances of the same abstract data type object can be considered different definitions of qi because the disturbance affects each avatar independently.

PY: We also see that Bart can turn into mr burns without even touching the mouse. It’s a peculiarity of Bart’s disturbance function ( which is the same on each trial) and the initial conditions. Bart takes long diagonal strides which can accidentally dodge many rows of donuts in a row. Since the computer code doesn’t distinguish between action and disturbance, it can incorrectly determine that Bart is being controlled.

PY: This reminds me of the last chapter follow up question to ch.1 (B:CP). If a person is controlling an RC vehicle, and the vehicle spontaneously takes the correct turn (i.e. drifts into an optimal orientation) at every instant, what role would the controller’s actions play?

PY: Do you think it’s valid to count different instances of the same object as different definitions of qi? There is something I don’t like about it, but which I can’t describe in detail at the moment. Suffice it to say, that different “instances” of an object are certainly not different “aspects” of the object. But are they different aspects of the perceptual experience as a whole? RM accepts this without hesitation.

PY: All we can say right now is that each instance of an object contains all of its different aspects (which are enumerated as data types during object definition). Controlling between B, H, and L amounts to the control of the same aspect of a different instance of the same object.

PY: Note, RM programs in JavaScript, which doesn’t implement abstract data types. Any more detailed discussion of class(abstract data type)-based object-oriented programming must be deferred until I receive adequate feedback to know where everyone stands in terms of understanding my C++ coding.

[From Rick Marken (2015.09.27.1020)]

···

On Thu, Sep 24, 2015 at 1:14 PM, PHILIP JERAIR YERANOSIAN pyeranos@ucla.edu wrote:

PY: Rick describes three possible definitions of q.i – Homer, Bart, and Lisa. H, B, and L are what you would call “different instances of the same object”. They all have the same abstract data structure.

RM: Actually, the three possible definitions of q.i are the x,y screen coordinates of the position of Homer, Bart and Lisa.

PY: The avatar type looks something like this:

abstract data type: avatar

{

DATA

int: x_coordinate

int: y_coordinate

boolean: state

METHODS

function: change_state

//this is a definition of an object method inside the //object type definition

{

if state = normal

state = mr_burns

else

state = normal

} // end of function declaration

} // end of type declaration

RM: Yes, excellent. So you did understand that it’s the x, y coordinates of each avatar that is the hypothesized controlled variable.

PY: Note, objects are defined as data and method. These definitions tell the compiler how to implement the object when its instances are declared in the program. The actual program would look like this:

main()

{

avatar: H, B, L // declare object instances

for (t = 0; t < time_limit; t++) // the “for” loop

{ // every instant is a loop

H,B,L += cursor movement

// apply the same action to each avatar

H += rand(1)

B += rand(2)

L += rand(3)

// apply a different disturbance to each avatar

if correlation(H) < 0.05

H.change_state // object.method syntax

if correlation(B) < 0.05

B.change_state // same method, different instance

if correlation(L) < 0.05

L.change_state // ditto

} // end for loop

} // end main function

RM: It’s great that you are actually trying to re-write this in object code. My only problem with this approach to coding (at least at the “pseudo code” point) is that it conceals some of of the important relationships between variables involved in the demo. For example, it conceals the fact that the position of the avatars is 2 dimensional and that the random disturbance is actually a narrow band filtered random variable, not just a random variable (rand(n)) added on each iteration. And it is cursor position, not movement, that is added on each iteration. So the position of H, for example, on each iteration is

H.x = cursor.x+noiseH.x

H.y = cursor.y+noiseH.y

RM: Most important, it conceals the fact that the correlation that is computed is between the noise affecting the position of each avatar – noiseH, noiseB, and noiseL (both x and y) – and the position of each avatar – H, B and L (both x and y). That is, the correlations are between the disturbances (noise) and the hypothesized controlled variables (H, B and L). If there is control the correlation will be lower for that avatar than some threshold value (.05 in your code).

PY: We see that different instances of the same abstract data type object can be considered different definitions of qi because the disturbance affects each avatar independently.

RM: Actually, H, B and L can be considered different definitions of q.i simply because they are different variables – three different changing positions of images on the computer screen.

PY: We also see that Bart can turn into mr burns without even touching the mouse.

RM: There can be transient changes to any one of the avatars. But this is a result of the fact that running correlations are being computed and when you stop controlling an avatars one of other avatar’s correlations can spuriously go below the threshold for considering it controlled. If you just let all avatars move around the screen for about 30 seconds without moving the cursor all three correlations will approach and remain near 1.0 so none will ever turn into Mr Burns.

PY: Do you think it’s valid to count different instances of the same object as different definitions of qi?

RM: That’s an object programming implementation question. The Test for the Controlled Variable algorithm that is implemented in the “Mindreading” program works whether the program is written in assembler (which was what I first wrote it in), Basic, Pascal, Java or JavaScript (all of which I have used) or C++ (which I could use but don’t want to because platform independence was important to me when I was developing these demos for the internet.

RM: I’m really thrilled that you have started a C++ version of this demo. It would be great if you could create a working version. I think there is still room for you to improve this demo, making it more reliable. I’ve wanted to use it in an experiment demonstrating the difficulty of seeing what people are doing (what their purpose actually is) so a version that will allow this test would be great. I also think it’s still worth improving the algorithm because understanding what is going on in this demo is the best way to get a real feel for what PCT is about.

Best

Rick

PY: There is something I don’t like about it, but which I can’t describe in detail at the moment. Suffice it to say, that different “instances” of an object are certainly not different “aspects” of the object. But are they different aspects of the perceptual experience as a whole? RM accepts this without hesitation.

PY: All we can say right now is that each instance of an object contains all of its different aspects (which are enumerated as data types during object definition). Controlling between B, H, and L amounts to the control of the same aspect of a different instance of the same object.

PY: Note, RM programs in JavaScript, which doesn’t implement abstract data types. Any more detailed discussion of class(abstract data type)-based object-oriented programming must be deferred until I receive adequate feedback to know where everyone stands in terms of understanding my C++ coding.


Richard S. Marken

www.mindreadings.com
Author of Doing Research on Purpose.
Now available from Amazon or Barnes & Noble