Trace 1

soar> d

=>WM: (2: S1 ^superstate nil)

=>WM: (1: S1 ^type state)

0: ==>S: S1 =>WM: (3: S1 ^io I1)

=>WM: (4: I1 ^input-link I2)

=>WM: (5: I2 ^strategy-number 1)

<=WM: (5: I2 ^strategy-number 1)

=>WM: (6: I2 ^strategy-number 1)

Firing top-state*elaborate*io

-->

(I1 ^output-link O1 +)

Firing pd*initial-ps-and-state ## The problem space is set up.

-->

(S1 ^achieved yes +)

(S1 ^strategy-number none +)

(S1 ^problem-name none +)

(S1 ^turn p1 +)

(S1 ^p2total 0 +)

(S1 ^p1total 0 +)

(S1 ^p2choice none +)

(S1 ^p1choice none +)

(S1 ^round 1 +)

(S1 ^problem-space prisoners-dilemma +)

(S1 ^name top-state +)

=>WM: (18: S1 ^achieved yes)

=>WM: (17: S1 ^strategy-number none)

=>WM: (16: S1 ^problem-name none)

=>WM: (15: S1 ^turn p1)

=>WM: (14: S1 ^p2total 0)

=>WM: (13: S1 ^p1total 0)

=>WM: (12: S1 ^p2choice none)

=>WM: (11: S1 ^p1choice none)

=>WM: (10: S1 ^round 1)

=>WM: (9: S1 ^problem-space prisoners-dilemma)

=>WM: (8: S1 ^name top-state)

=>WM: (7: I1 ^output-link O1)

<=WM: (6: I2 ^strategy-number 1)

=>WM: (19: I2 ^strategy-number 1)

Firing pd*read-strategy-number ## The tcl interface for choosing

--> ## strategies.

Firing pd*propose-operator*fetch-problem

-->

(O2 ^name fetch-problem + [O] )

(S1 ^operator O2 <)

(S1 ^operator O2 +)

=>WM: (21: S1 ^operator O2 +)

=>WM: (20: O2 ^name fetch-problem)

<=WM: (19: I2 ^strategy-number 1)

=>WM: (22: I2 ^strategy-number 1)

=>WM: (23: S1 ^operator O2)

1: O: O2 (fetch-problem: ) ## The chosen strategy number

## is added to WM.

soar> d

<=WM: (22: I2 ^strategy-number 1)

=>WM: (24: I2 ^strategy-number 1)

Firing pd*elaborate*fetch-problem*strategy-number

-->

(S1 ^strategy-number 1 + [O] )

Firing pd*fetch-problem*remove-other-stuff

-->

(S1 ^achieved yes - [O] )

(S1 ^strategy-number none - [O] )

(S1 ^problem-name none - [O] )

Firing pd*fetch-problem*elaborate*main-get

-->

(O2 ^finished t + [O] )

(S1 ^achieved no + [O] )

(S1 ^achieved yes - [O] )

=>WM: (27: O2 ^finished t)

=>WM: (26: S1 ^achieved no)

=>WM: (25: S1 ^strategy-number 1)

<=WM: (18: S1 ^achieved yes)

<=WM: (17: S1 ^strategy-number none)

<=WM: (16: S1 ^problem-name none)

<=WM: (24: I2 ^strategy-number 1)

=>WM: (28: I2 ^strategy-number 1)

Firing pd*elaborate*strategy1 ## The strategy for each player

--> ## is added to WM.

(S1 ^strategynumberp2 1 +)

(S1 ^strategynumberp1 1 +)

Firing pd*fetch-problem*terminate

-->

(S1 ^operator O2 @)

Retracting pd*propose-operator*fetch-problem

--> (S1 ^operator O2 <)

(S1 ^operator O2 +)

=>WM: (30: S1 ^strategynumberp2 1)

=>WM: (29: S1 ^strategynumberp1 1)

<=WM: (21: S1 ^operator O2 +)

<=WM: (28: I2 ^strategy-number 1)

=>WM: (31: I2 ^strategy-number 1)

Firing pd*propose-op*p1-choose-coop-a ## An operator for p1 is

--> ## selected.

(O3 ^name p1-choose-coop + [O] )

(S1 ^operator O3 +)

=>WM: (33: S1 ^operator O3 +)

=>WM: (32: O3 ^name p1-choose-coop)

<=WM: (31: I2 ^strategy-number 1)

=>WM: (34: I2 ^strategy-number 1)

=>WM: (35: S1 ^operator O3)

<=WM: (23: S1 ^operator O2)

2: O: O3 (p1-choose-coop)

soar> d

<=WM: (34: I2 ^strategy-number 1)

=>WM: (36: I2 ^strategy-number 1)

Firing pd*apply-op-*p1-choose-coop

-->

(S1 ^turn p2 + [O] )

(S1 ^turn p1 - [O] )

(S1 ^p1choice coop + [O] )

(S1 ^p1choice none - [O] )

Retracting pd*fetch-problem*terminate

--> (S1 ^operator O2 @)

=>WM: (38: S1 ^turn p2)

=>WM: (37: S1 ^p1choice coop)

<=WM: (20: O2 ^name fetch-problem)

<=WM: (27: O2 ^finished t)

<=WM: (15: S1 ^turn p1)

<=WM: (11: S1 ^p1choice none)

<=WM: (36: I2 ^strategy-number 1)

=>WM: (39: I2 ^strategy-number 1)

Firing pd*teminate-op*p1-choose-coop

-->

(S1 ^operator O3 @)

Firing pd*propose-op*p2-choose-coop-a

-->

(O4 ^name p2-choose-coop + [O] )

(S1 ^operator O4 +)

Retracting pd*propose-op*p1-choose-coop-a

--> (S1 ^operator O3 +)

=>WM: (41: S1 ^operator O4 +)

=>WM: (40: O4 ^name p2-choose-coop)

<=WM: (33: S1 ^operator O3 +)

<=WM: (39: I2 ^strategy-number 1)

=>WM: (42: I2 ^strategy-number 1)

=>WM: (43: S1 ^operator O4)

<=WM: (35: S1 ^operator O3)

3: O: O4 (p2-choose-coop) ## An operator for p2 is

## selected

soar> d

<=WM: (42: I2 ^strategy-number 1)

=>WM: (44: I2 ^strategy-number 1)

Firing pd*apply-op-*p2-choose-coop

-->

(S1 ^turn p1 + [O] )

(S1 ^turn p2 - [O] )

(S1 ^p2choice coop + [O] )

(S1 ^p2choice none - [O] )

Retracting pd*teminate-op*p1-choose-coop

--> (S1 ^operator O3 @)

=>WM: (46: S1 ^turn p1)

=>WM: (45: S1 ^p2choice coop)

<=WM: (32: O3 ^name p1-choose-coop)

<=WM: (38: S1 ^turn p2)

<=WM: (12: S1 ^p2choice none)

<=WM: (44: I2 ^strategy-number 1)

=>WM: (47: I2 ^strategy-number 1)

Firing pd*teminate-op*p2-choose-coop

-->

(S1 ^operator O4 @)

Firing pd*propose-op*scores-coop-coop ## A score operator is chosen

-->

(O5 ^name score-coop-coop + [O] )

(S1 ^operator O5 +)

Retracting pd*propose-op*p2-choose-coop-a

--> (S1 ^operator O4 +)

=>WM: (49: S1 ^operator O5 +)

=>WM: (48: O5 ^name score-coop-coop)

<=WM: (41: S1 ^operator O4 +)

<=WM: (47: I2 ^strategy-number 1)

=>WM: (50: I2 ^strategy-number 1)

=>WM: (51: S1 ^operator O5)

<=WM: (43: S1 ^operator O4)

4: O: O5 (score-coop-coop)

soar> d

<=WM: (50: I2 ^strategy-number 1)

=>WM: (52: I2 ^strategy-number 1)

Firing pd*apply-op*scores-coop-coop

-->

(S1 ^p2choice none + [O] )

(S1 ^p2choice coop - [O] )

(S1 ^p1choice none + [O] )

(S1 ^p1choice coop - [O] )

(S1 ^round 1 + [O] )

(S1 ^round 1 + [O] )

(S1 ^p2score 3 + [O] )

(S1 ^p1score 3 + [O] )

Retracting pd*teminate-op*p2-choose-coop

--> (S1 ^operator O4 @)

=>WM: (56: S1 ^p2choice none)

=>WM: (55: S1 ^p1choice none)

=>WM: (54: S1 ^p2score 3)

=>WM: (53: S1 ^p1score 3)

<=WM: (40: O4 ^name p2-choose-coop)

<=WM: (45: S1 ^p2choice coop)

<=WM: (37: S1 ^p1choice coop)

<=WM: (52: I2 ^strategy-number 1)

=>WM: (57: I2 ^strategy-number 1)

Firing pd*terminate-op*scores-coop-coop

-->

(S1 ^operator O5 @)

Firing pd*propose-op*p1-choose-coop-a

-->

(O6 ^name p1-choose-coop + [O] )

(S1 ^operator O6 +)

Retracting pd*propose-op*scores-coop-coop

--> (S1 ^operator O5 +)

=>WM: (59: S1 ^operator O6 +)

=>WM: (58: O6 ^name p1-choose-coop)

<=WM: (49: S1 ^operator O5 +)

<=WM: (57: I2 ^strategy-number 1)

=>WM: (60: I2 ^strategy-number 1)

=>WM: (61: S1 ^operator O6)

<=WM: (51: S1 ^operator O5)

5: O: O6 (p1-choose-coop)

Trace 2

soar> d

=>WM: (2: S1 ^superstate nil)

=>WM: (1: S1 ^type state)

0: ==>S: S1 =>WM: (3: S1 ^io I1)

=>WM: (4: I1 ^input-link I2)

=>WM: (5: I2 ^strategy-number 1)

<=WM: (5: I2 ^strategy-number 1)

=>WM: (6: I2 ^strategy-number 1)

Firing top-state*elaborate*io

-->

(I1 ^output-link O1 +)

Firing pd*initial-ps-and-state

-->

(S1 ^achieved yes +)

(S1 ^strategy-number none +)

(S1 ^problem-name none +)

(S1 ^turn p1 +)

(S1 ^p2total 0 +)

(S1 ^p1total 0 +)

(S1 ^p2choice none +)

(S1 ^p1choice none +)

(S1 ^round 1 +)

(S1 ^problem-space prisoners-dilemma +)

(S1 ^name top-state +)

=>WM: (18: S1 ^achieved yes)

=>WM: (17: S1 ^strategy-number none)

=>WM: (16: S1 ^problem-name none)

=>WM: (15: S1 ^turn p1)

=>WM: (14: S1 ^p2total 0)

=>WM: (13: S1 ^p1total 0)

=>WM: (12: S1 ^p2choice none)

=>WM: (11: S1 ^p1choice none)

=>WM: (10: S1 ^round 1)

=>WM: (9: S1 ^problem-space prisoners-dilemma)

=>WM: (8: S1 ^name top-state)

=>WM: (7: I1 ^output-link O1)

<=WM: (6: I2 ^strategy-number 1)

=>WM: (19: I2 ^strategy-number 1)

Firing pd*read-strategy-number

-->

Firing pd*propose-operator*fetch-problem

-->

(O2 ^name fetch-problem + [O] )

(S1 ^operator O2 <)

(S1 ^operator O2 +)

=>WM: (21: S1 ^operator O2 +)

=>WM: (20: O2 ^name fetch-problem)

<=WM: (19: I2 ^strategy-number 1)

=>WM: (22: I2 ^strategy-number 36)

=>WM: (23: S1 ^operator O2)

1: O: O2 (fetch-problem: )

soar> d

<=WM: (22: I2 ^strategy-number 36)

=>WM: (24: I2 ^strategy-number 36)

Firing pd*elaborate*fetch-problem*strategy-number

-->

(S1 ^strategy-number 36 + [O] )

Firing pd*fetch-problem*remove-other-stuff

-->

(S1 ^achieved yes - [O] )

(S1 ^strategy-number none - [O] )

(S1 ^problem-name none - [O] )

Firing pd*fetch-problem*elaborate*main-get

-->

(O2 ^finished t + [O] )

(S1 ^achieved no + [O] )

(S1 ^achieved yes - [O] )

=>WM: (27: O2 ^finished t)

=>WM: (26: S1 ^achieved no)

=>WM: (25: S1 ^strategy-number 36)

<=WM: (18: S1 ^achieved yes)

<=WM: (17: S1 ^strategy-number none)

<=WM: (16: S1 ^problem-name none)

<=WM: (24: I2 ^strategy-number 36)

=>WM: (28: I2 ^strategy-number 36)

Firing pd*elaborate*strategy36

-->

(S1 ^strategynumberp2 6 +)

(S1 ^strategynumberp1 6 +)

Firing pd*fetch-problem*terminate

-->

(S1 ^operator O2 @)

Retracting pd*propose-operator*fetch-problem

--> (S1 ^operator O2 <)

(S1 ^operator O2 +)

=>WM: (30: S1 ^strategynumberp2 6)

=>WM: (29: S1 ^strategynumberp1 6)

<=WM: (21: S1 ^operator O2 +)

<=WM: (28: I2 ^strategy-number 36)

=>WM: (31: I2 ^strategy-number 36)

Firing pd*propose-op*p1-choose-coop-evolve

-->

(O3 ^name p1-choose-coop-evolve + [O] )

(S1 ^operator O3 +)

Firing pd*propose-op*p1-choose-def-evolve

-->

(O4 ^name p1-choose-def-evolve + [O] )

(S1 ^operator O4 +)

=>WM: (35: S1 ^operator O4 +)

=>WM: (34: S1 ^operator O3 +)

=>WM: (33: O4 ^name p1-choose-def-evolve)

=>WM: (32: O3 ^name p1-choose-coop-evolve)

<=WM: (31: I2 ^strategy-number 36)

=>WM: (36: I2 ^strategy-number 36)

=>WM: (44: S2 ^item O3)

=>WM: (43: S2 ^item O4)

=>WM: (42: S2 ^quiescence t)

=>WM: (41: S2 ^choices multiple)

=>WM: (40: S2 ^impasse tie)

=>WM: (39: S2 ^attribute operator)

=>WM: (38: S2 ^superstate S1)

=>WM: (37: S2 ^type state)

<=WM: (23: S1 ^operator O2)

2: ==>S: S2 (operator tie) ## Tie due to cooperate and

## defect operators both

soar> d ## proposed

<=WM: (36: I2 ^strategy-number 36)

=>WM: (45: I2 ^strategy-number 36)

Firing pd*propose-space*selection ## New problem space

-->

(P1 ^name selection +)

(S2 ^problem-space P1 <)

(S2 ^problem-space P1 +)

Retracting pd*fetch-problem*terminate

--> (S1 ^operator O2 @)

=>WM: (47: P1 ^name selection)

=>WM: (46: S2 ^problem-space P1)

<=WM: (20: O2 ^name fetch-problem)

<=WM: (27: O2 ^finished t)

<=WM: (45: I2 ^strategy-number 36)

=>WM: (48: I2 ^strategy-number 36)

Firing selection*propose*evaluate-object ## However, I have not set this

--> ## up properly as the same two

(O5 ^object O3 + [O] ) ## operators are tied here...

(O5 ^name evaluate-object + [O] )

(O5 ^state S2 + [O] )

(S2 ^operator O5 +)

Firing selection*propose*evaluate-object

-->

(O6 ^object O4 + [O] )

(O6 ^name evaluate-object + [O] )

(O6 ^state S2 + [O] )

(S2 ^operator O6 +)

=>WM: (56: S2 ^operator O6 +)

=>WM: (55: S2 ^operator O5 +)

=>WM: (54: O6 ^object O4)

=>WM: (53: O6 ^name evaluate-object)

=>WM: (52: O6 ^state S2)

=>WM: (51: O5 ^object O3)

=>WM: (50: O5 ^name evaluate-object)

=>WM: (49: O5 ^state S2)

<=WM: (48: I2 ^strategy-number 36)

=>WM: (57: I2 ^strategy-number 36)

=>WM: (65: S3 ^item O5)

=>WM: (64: S3 ^item O6)

=>WM: (63: S3 ^quiescence t)

=>WM: (62: S3 ^choices multiple)

=>WM: (61: S3 ^impasse tie)

=>WM: (60: S3 ^attribute operator)

=>WM: (59: S3 ^superstate S2)

=>WM: (58: S3 ^type state)

3: ==>S: S3 (operator tie)