############################### # # # dilemma.soar # # # ############################### ## This is the soar code for the PrisonerŐs Dilemma ## N.B. It is buggy and needs modification ## I. Build the top-space: prisoners-dilemma ## ## II. Fetch-problem operator. ## ## III. This reads the strategy number ## entered in the Tcl interface ## and passes it to Soar using the I/O link ## ## IV. Contains the operators used for choosing ## cooperation or defection for all ## strategies except the evolutionary strategy. ## ## V. EVOLVING STRATEGY. Contains the operators used ## for choosing cooperation or defection for ## the evolutionary strategy. The operators ## chosen are evaluated by comparing their ## effectiveness with respect to the scores of ## both players. This doesnŐt search for score ## maximisation but compares the payoffs received ## by the two players in that round. ## ## VI. WORK OUT SCORES. This embodies the payoff matrix. ## Scores for the round are calculated and running ## totals updated. ## ## VII. Choose an operator when there is an impasse. ## Modified from Hungry-Thirsty 2. A new space ## is created to deal with tied operators. ## Operators are evaluated and given preferences ## accordingly. ## ## VIII. Takes the strategy number input by the user and ## returns values for the strategies chosen ## for each player. ######################################################################### ## # ## I. Modified from Able III # ## Build the top-space: prisoners-dilemma # ## # ######################################################################### ## Top Goal ## Elaborate the top goal with a PS (prisoners-dilemma). sp {pd*initial-ps-and-state (state ^superstate nil) --> ( ^name top-state ^problem-space prisoners-dilemma ^round 1 ^p1choice none ^p2choice none ^p1total 0 ^p2total 0 ^turn p1 ^strategy-number none ^achieved yes)} ######################################################################### ## # ## II. Fetch-problem operator. # ## Modified from Able III. # ## # ######################################################################### ## Propose Operator fetch-problem ## This operator is called at ## initialization. sp {pd*propose-operator*fetch-problem (state ^problem-space prisoners-dilemma ^achieved yes) --> ( ^operator + <) ( ^name fetch-problem)} ## Fetch-problem simply reads in the details of the problem that has ## already been selected by the user/modeller. sp {pd*fetch-problem*remove-old-problem (state ^problem-space prisoners-dilemma ^problem ^operator ) ( ^name fetch-problem -^finished) --> ( ^problem -)} sp {pd*fetch-problem*remove-other-stuff (state ^problem-space prisoners-dilemma ^operator ^problem-name ^strategy-number ^achieved yes) ( ^name fetch-problem -^finished) --> ( ^problem-name - ^strategy-number - ^achieved yes -)} sp {pd*fetch-problem*elaborate*main-get (state ^problem-space prisoners-dilemma ^operator ) ( ^name fetch-problem) --> ( ^achieved yes - no +) ( ^finished t) (tcl | makegameprogresswindow |)} ## Terminate fetch-problem sp {pd*fetch-problem*terminate (state ^problem-space prisoners-dilemma ^strategy-number ^achieved no ^operator ) ( ^name fetch-problem) --> ( ^operator @)} ## Trace the fetch-problem operator with the strategy number. format-watch -stack -add o fetch-problem \ {%id (fetch-problem: %v[strategy-number])} format-watch -object -add o fetch-problem \ {%id (fetch-problem: %v[strategy-number])} ######################################################################### ## # ## III. Modified from Able III. This reads the # ## strategy number entered in the Tcl interface # ## and passes it to Soar using the I/O link # ## # ######################################################################### # Elaborate the top state with the output link sp {top-state*elaborate*io (state ^io ) --> ( ^output-link
    )} ## Throw up a dialog to get the strategy number. ## This then comes in via the IO input-link sp {pd*read-strategy-number (state ^problem-space prisoners-dilemma -^operator.name fetch-problem ^achieved yes) --> (tcl | selectstrategy |)} ## Pull the strategy-number off the input link and stick it on the operator sp {pd*elaborate*fetch-problem*strategy-number (state ^problem-space prisoners-dilemma ^io.input-link.strategy-number ^operator ) ( ^name fetch-problem -^finished t) --> ( ^strategy-number )} ######################################################################### ## # ## IV. Contains the operators used for choosing # ## cooperation or defection for all # ## strategies except the evolutionary strategy. # ## # ######################################################################### ## COOPERATE- player 1 ## Propose choose coop a sp {pd*propose-op*p1-choose-coop-a (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 1 ^p1choice none ^turn p1) --> ( ^operator ) ( ^name p1-choose-coop)} ## Propose choose coop b sp {pd*propose-op*p1-choose-coop-b (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 3 ^p2hasdefected no ^p1choice none ^turn p1) --> ( ^operator ) ( ^name p1-choose-coop)} ## Propose choose coop c sp {pd*propose-op*p1-choose-coop-c (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 4 ^p2lastmove coop ^p1choice none ^turn p1) ( ^round >1) --> ( ^operator ) ( ^name p1-choose-coop)} ## Propose choose coop e sp {pd*propose-op*p1-choose-coop-e (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 4 ^p1choice none ^turn p1) ( ^round 1) --> ( ^operator ) ( ^name p1-choose-coop)} ## Propose choose coop d sp {pd*propose-op*p1-choose-coop-d (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 5 ^p2lastmove coop ^p1choice none ^turn p1) ( ^round >1) --> ( ^operator ) ( ^name p1-choose-coop)} ## Apply choose coop sp {pd*apply-op-*p1-choose-coop (state ^problem-space prisoners-dilemma) ( ^operator ^p1choice none ^turn p1) ( ^name p1-choose-coop) --> ( ^p1choice none - coop + ^turn p1 - p2 + )} ## Terminate choose coop sp {pd*teminate-op*p1-choose-coop (state ^problem-space prisoners-dilemma ) ( ^operator ) ( ^name p1-choose-coop) ( ^p1choice coop) --> ( ^operator @)} ## COOPERATE- player 2 ## Propose choose coop a sp {pd*propose-op*p2-choose-coop-a (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 1 ^p2choice none ^turn p2) --> ( ^operator ) ( ^name p2-choose-coop)} ## Propose choose coop b sp {pd*propose-op*p2-choose-coop-b (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 3 ^p1hasdefected no ^p2choice none ^turn p2) --> ( ^operator ) ( ^name p2-choose-coop)} ## Propose choose coop c sp {pd*propose-op*p2-choose-coop-c (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 4 ^p1lastmove coop ^p2choice none ^turn p2) ( ^round >1) --> ( ^operator ) ( ^name p2-choose-coop)} ## Propose choose coop e sp {pd*propose-op*p2-choose-coop-e (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 4 ^p1choice none ^turn p2) ( ^round 1) --> ( ^operator ) ( ^name p2-choose-coop)} ## Propose choose coop d sp {pd*propose-op*p2-choose-coop-d (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 5 ^p1lastmove coop ^p2choice none ^turn p2) ( ^round >1) --> ( ^operator ) ( ^name p2-choose-coop)} ## Apply choose coop sp {pd*apply-op-*p2-choose-coop (state ^problem-space prisoners-dilemma) ( ^operator ^p2choice none ^turn p2) ( ^name p2-choose-coop) --> ( ^p2choice none - coop + ^turn p2 - p1 + )} ## Terminate choose coop sp {pd*teminate-op*p2-choose-coop (state ^problem-space prisoners-dilemma ) ( ^operator ) ( ^name p2-choose-coop) ( ^p2choice coop) --> ( ^operator @)} ## DEFECT- player 1 ## Propose choose def a sp {pd*propose-op*p1-choose-def-a (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 2 ^p1choice none ^turn p1) --> ( ^operator ) ( ^name p1-choose-def)} ## Propose choose def b sp {pd*propose-op*p1-choose-def-b (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 3 ^p2hasdefected yes ^p1choice none ^turn p1) --> ( ^operator ) ( ^name p1-choose-def)} ## Propose choose def c sp {pd*propose-op*p1-choose-def-c (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 4 ^p2lastmove def ^p1choice none ^turn p1) ( ^round >1) --> ( ^operator ) ( ^name p1-choose-def)} ## Propose choose def d sp {pd*propose-op*p1-choose-def-d (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 5 ^p2lastmove def ^p1choice none ^turn p1) ( ^round >1) --> ( ^operator ) ( ^name p1-choose-def)} ## Propose choose def e sp {pd*propose-op*p1-choose-def-e (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 5 ^p1choice none ^turn p1) ( ^round 1) --> ( ^operator ) ( ^name p1-choose-def)} ## Apply choose def sp {pd*apply-op-*p1-choose-def (state ^problem-space prisoners-dilemma) ( ^operator ^p1choice none ^turn p1) ( ^name p1-choose-def) --> ( ^p1choice none - def + ^turn p1 - p2 + )} ## Terminate choose def sp {pd*teminate-op*p1-choose-def (state ^problem-space prisoners-dilemma ) ( ^operator ) ( ^name p1-choose-def) ( ^p1choice def) --> ( ^operator @)} ## DEFECT- player 2 ## Propose choose def a sp {pd*propose-op*p2-choose-def-a (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 2 ^p2choice none ^turn p2) --> ( ^operator ) ( ^name p2-choose-def)} ## Propose choose def b sp {pd*propose-op*p2-choose-def-b (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 3 ^p1hasdefected yes ^p2choice none ^turn p2) --> ( ^operator ) ( ^name p2-choose-def)} ## Propose choose def c sp {pd*propose-op*p2-choose-def-c (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 4 ^p1lastmove def ^p2choice none ^turn p2) ( ^round >1) --> ( ^operator ) ( ^name p2-choose-def)} ## Propose choose def d sp {pd*propose-op*p2-choose-def-d (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 5 ^p1lastmove def ^p2choice none ^turn p2) ( ^round >1) --> ( ^operator ) ( ^name p2-choose-def)} ## Propose choose def e sp {pd*propose-op*p2-choose-def-e (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 5 ^p1choice none ^turn p2) ( ^round 1) --> ( ^operator ) ( ^name p2-choose-def)} ## Apply choose def sp {pd*apply-op-*p2-choose-def (state ^problem-space prisoners-dilemma) ( ^operator ^p2choice none ^turn p2) ( ^name p2-choose-def) --> ( ^p2choice none - def + ^turn p2 - p1 +)} ## Terminate choose def sp {pd*teminate-op*p2-choose-def (state ^problem-space prisoners-dilemma ) ( ^operator ) ( ^name p2-choose-def) ( ^p2choice def) --> ( ^operator @)} ############################################################################### ## # ## V. EVOLVING STRATEGY. Contains the operators used # ## for choosing cooperation or defection for # ## the evolutionary strategy. The operators # ## chosen are evaluated by comparing their # ## effectiveness with respect to the scores of # ## both players. This doesnŐt search for score # ## maximisation but compares the payoffs received # ## by the two players in that round. # ## # ############################################################################### ## COOPERATE- player 1 ## Propose choose coop evolve sp {pd*propose-op*p1-choose-coop-evolve (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 6 ^p1choice none ^turn p1) --> ( ^operator ) ( ^name p1-choose-coop-evolve)} ## Apply choose coop sp {pd*apply-op*p1-choose-coop-evolve (state ^problem-space prisoners-dilemma) ( ^p1choice none ^turn p1) ( ^operator ) ( ^name p1-choose-coop-evolve) --> ( ^p1choice none - coop + ^turn p1 - p2 + )} ## Evaluate operator sp {pd*eval-op*p1-choose-coop-evolve-a (state ^problem-space prisoners-dilemma) ( ^p1score ^p2score > ) ( ^operator ) ( ^name p1-choose-coop-evolve) --> ( ^operator >)} ## Evaluate operator sp {pd*eval-op*p1-choose-coop-evolve-b (state ^problem-space prisoners-dilemma) ( ^p1score ^p2score = ) ( ^operator ) ( ^name p1-choose-coop-evolve) --> ( ^operator =)} ## Evaluate operator sp {pd*eval-op*p1-choose-coop-evolve-c (state ^problem-space prisoners-dilemma) ( ^p1score ^p2score < ) ( ^operator ) ( ^name p1-choose-coop-evolve) --> ( ^operator <)} ## DEFECT- player 1 ## Propose choose def evolve sp {pd*propose-op*p1-choose-def-evolve (state ^problem-space prisoners-dilemma ) ( ^strategynumberp1 6 ^p1choice none ^turn p1) --> ( ^operator ) ( ^name p1-choose-def-evolve)} ## Apply choose def sp {pd*apply-op-*p1-choose-def-evolve (state ^problem-space prisoners-dilemma) ( ^operator ^p1choice none ^turn p1) ( ^name p1-choose-def-evolve) --> ( ^p1choice none - def + ^turn p1 - p2 + )} ## Evaluate operator sp {pd*eval-op*p1-choose-def-evolve-a (state ^problem-space prisoners-dilemma) ( ^p1score ^p2score > ) ( ^operator ) ( ^name p1-choose-def-evolve) --> ( ^operator >)} ## Evaluate operator sp {pd*eval-op*p1-choose-def-evolve-b (state ^problem-space prisoners-dilemma) ( ^p1score ^p2score = ) ( ^operator ) ( ^name p1-choose-def-evolve) --> ( ^operator =)} ## Evaluate operator sp {pd*eval-op*p1-choose-def-evolve-c (state ^problem-space prisoners-dilemma) ( ^p1score ^p2score < ) ( ^operator ) ( ^name p1-choose-def-evolve) --> ( ^operator <)} ## COOPERATE- player 2 ## Propose choose coop evolve sp {pd*propose-op*p2-choose-coop-evolve (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 6 ^p2choice none ^turn p2) --> ( ^operator ) ( ^name p2-choose-coop-evolve)} ## Apply choose coop sp {pd*apply-op-*p2-choose-coop-evolve (state ^problem-space prisoners-dilemma) ( ^operator ^p2choice none ^turn p2) ( ^name p2-choose-coop-evolve) --> ( ^p2choice none - coop + ^turn p2 - p1 + )} ## Evaluate operator sp {pd*eval-op*p2-choose-coop-evolve-a (state ^problem-space prisoners-dilemma) ( ^p2score ^p1score > ) ( ^operator ) ( ^name p2-choose-coop-evolve) --> ( ^operator >)} ## Evaluate operator sp {pd*eval-op*p2-choose-coop-evolve-b (state ^problem-space prisoners-dilemma) ( ^p2score ^p1score = ) ( ^operator ) ( ^name p2-choose-coop-evolve) --> ( ^operator =)} ## Evaluate operator sp {pd*eval-op*p2-choose-coop-evolve-c (state ^problem-space prisoners-dilemma) ( ^p2score ^p1score < ) ( ^operator ) ( ^name p2-choose-coop-evolve) --> ( ^operator <)} ## DEFECT- player 2 ## Propose choose def evolve sp {pd*propose-op*p2-choose-def-evolve (state ^problem-space prisoners-dilemma ) ( ^strategynumberp2 6 ^p2choice none ^turn p2) --> ( ^operator ) ( ^name p2-choose-def-evolve)} ## Apply choose def sp {pd*apply-op-*p2-choose-def-evolve (state ^problem-space prisoners-dilemma) ( ^operator ^p2choice none ^turn p2) ( ^name p2-choose-def-evolve) --> ( ^p2choice none - def + ^turn p2 - p1 + )} ## Evaluate operator sp {pd*eval-op*p2-choose-def-evolve-a (state ^problem-space prisoners-dilemma) ( ^p2score ^p1score > ) ( ^operator ) ( ^name p2-choose-def-evolve) --> ( ^operator >)} ## Evaluate operator sp {pd*eval-op*p2-choose-def-evolve-b (state ^problem-space prisoners-dilemma) ( ^p2score ^p1score = ) ( ^operator ) ( ^name p2-choose-def-evolve) --> ( ^operator =)} ## Evaluate operator sp {pd*eval-op*p2-choose-def-evolve-c (state ^problem-space prisoners-dilemma) ( ^p2score ^p1score < ) ( ^operator ) ( ^name p2-choose-def-evolve) --> ( ^operator <)} ############################################################################### ## # ## VI. WORK OUT SCORES. This embodies the payoff matrix. # ## Scores for the round are calculated and running # ## totals updated. # ## # ############################################################################### ## Mutual cooperation score operator sp {pd*propose-op*scores-coop-coop (state ^problem-space prisoners-dilemma) ( ^p1choice coop ^p2choice coop ^round ) --> ( ^operator ) ( ^name score-coop-coop)} sp {pd*apply-op*scores-coop-coop (state ^problem-space prisoners-dilemma) ( ^operator ^round ) ( ^name score-coop-coop) --> ( ^p1score 3 ^p2score 3 ^round + 1) (tcl | updategameprogresswindow |) ( ^p1choice coop - none + ^p2choice coop - none +)} sp {pd*terminate-op*scores-coop-coop (state ^problem-space prisoners-dilemma) ( ^operator ) ( ^name score-coop-coop) ( ^p1score 3 ^p2score 3) --> ( ^operator @)} ## Player 1 coops, player2 defects score operator sp {pd*propose-op*scores-coop-def (state ^problem-space prisoners-dilemma) ( ^p1choice coop ^p2choice def ^round ) --> ( ^operator ) ( ^name score-coop-def)} sp {pd*apply-op*scores-coop-def (state ^problem-space prisoners-dilemma) ( ^operator ^round ) ( ^name score-coop-def) --> ( ^p1score 0 ^p2score 5 ^round + 1) (tcl | updategameprogresswindow |) ( ^p1choice coop - none + ^p2choice def - none +)} sp {pd*terminate-op*scores-coop-def (state ^problem-space prisoners-dilemma) ( ^operator ) ( ^name score-coop-def) ( ^p1score 0 ^p2score 5) --> ( ^operator @)} ## Player 1 defects, player 2 coops score operator sp {pd*propose-op*scores-def-coop (state ^problem-space prisoners-dilemma) ( ^p1choice def ^p2choice coop ^round ) --> ( ^operator ) ( ^name score-def-coop)} sp {pd*apply-op*scores-def-coop (state ^problem-space prisoners-dilemma) ( ^operator ^round ) ( ^name score-def-coop) --> ( ^p1score 5 ^p2score 0 ^round + 1) (tcl | updategameprogresswindow |) ( ^p1choice def - none + ^p2choice coop - none +)} sp {pd*terminate-op*scores-def-coop (state ^problem-space prisoners-dilemma) ( ^operator ) ( ^name score-def-coop) ( ^p1score 5 ^p2score 0) --> ( ^operator @)} ## Mutual defection score operator sp {pd*propose-op*scores-def-def (state ^problem-space prisoners-dilemma) ( ^p1choice def ^p2choice def ^round ) --> ( ^operator ) ( ^name score-def-def)} sp {pd*apply-op*scores-def-def (state ^problem-space prisoners-dilemma) ( ^operator ^round ) ( ^name score-def-def) --> ( ^p1score 1 ^p2score 1 ^round + 1) (tcl | updategameprogresswindow |) ( ^p1choice def - none + ^p2choice def - none +)} sp {pd*terminate-op*scores-def-def (state ^problem-space prisoners-dilemma) ( ^operator ) ( ^name score-def-def) ( ^p1score 1 ^p2score 1) --> ( ^operator @)} ## Operator for updating running totals sp {pd*propose-op*update-totals (state ^problem-space prisoners-dilemma) ( ^ready-to-update-totals yes ^p1score ^p2score ^p1total ^p2total ) --> ( ^operator ) ( ^name update-totals)} sp {pd*apply-op*update-totals (state ^problem-space prisoners-dilemma) ( ^operator ) ( ^name update-totals) --> ( ^p1total + ^p2total + ^ready-to-update-totals yes - no +)} sp {pd*terminate-op*update-totals (state ^problem-space prisoners-dilemma) ( ^ready-to-update-totals no ^operator ) ( ^name update-totals) --> ( ^operator @)} ######################################################################### ## # ## VII. Choose an operator when there is an impasse. # ## Modified from Hungry-Thirsty 2. A new space # ## is created to deal with tied operators. # ## Operators are evaluated and given preferences # ## accordingly. # ## # ######################################################################### sp {pd*propose-space*selection (state ^superstate ^choices multiple) --> ( ^problem-space

    +

    <) (

    ^name selection)} ### Create evaluate operator in selection problem space. ## the squirrelly bracket indicates a set of grouped clauses, the not ## sign indicates that the set of clauses mustn't be matched for the ## production to fire. ### Create evaluate operator in selection problem space. sp {selection*propose*evaluate-object (state ^problem-space.name selection ^item ) -{( ^evaluation ) ( ^object ^value t)} --> ( ^state ^name evaluate-object ^object ) ( ^operator +)} ### ### Reconsider evaluation operator after it finishes to allow next one ### in. ### sp {selection*terminate*evaluate-object (state ^operator ) ( ^evaluation ) ( ^object ) ( ^object ^value ) --> ( ^operator @)} ## Evaluate operators sp {selection*evaluate*p1-choose-coop (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p1-choose-coop) --> ( ^evaluation + &) ( ^value t ^object ^quality excellent)} sp {selection*evaluate*p1-choose-def (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p1-choose-def) --> ( ^evaluation + &) ( ^value t ^object ^quality good)} sp {selection*evaluate*p2-choose-coop (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p2-choose-coop) --> ( ^evaluation + &) ( ^value t ^object ^quality excellent)} sp {selection*evaluate*p2-choose-def (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p2-choose-def) --> ( ^evaluation + &) ( ^value t ^object ^quality good)} sp {selection*evaluate*p1-choose-coop-evolve (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p1-choose-coop-evolve) --> ( ^evaluation + &) ( ^value t ^object ^quality excellent)} sp {selection*evaluate*p1-choose-def-evolve (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p1-choose-def-evolve) --> ( ^evaluation + &) ( ^value t ^object ^quality good)} sp {selection*evaluate*p2-choose-coop-evolve (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p2-choose-coop-evolve) --> ( ^evaluation + &) ( ^value t ^object ^quality excellent)} sp {selection*evaluate*p2-choose-def-evolve (state ^problem-space.name selection ^operator ^superstate ) ( ^name evaluate-object ^object ) ( ^name p2-choose-def-evolve) --> ( ^evaluation + &) ( ^value t ^object ^quality good)} ## Rank operators according to evaluation sp {selection*evaluation*excellent-good (state ^problem-space.name selection ^superstate ) ( ^evaluation ) ( ^value t ^object ^quality excellent) ( ^value t ^object ^quality good) --> ( ^operator > ^operator =)} ############################################################################### ## # ## VIII. Takes the strategy number input by the user and # ## returns values for the strategies chosen # ## for each player. # ## # ############################################################################### sp {pd*elaborate*strategy1 (state ^problem-space prisoners-dilemma ^strategy-number 1) --> ( ^strategynumberp1 1 ^strategynumberp2 1)} sp {pd*elaborate*strategy2 (state ^problem-space prisoners-dilemma ^strategy-number 2) --> ( ^strategynumberp1 1 ^strategynumberp2 2)} sp {pd*elaborate*strategy3 (state ^problem-space prisoners-dilemma ^strategy-number 3) --> ( ^strategynumberp1 1 ^strategynumberp2 3)} sp {pd*elaborate*strategy4 (state ^problem-space prisoners-dilemma ^strategy-number 4) --> ( ^strategynumberp1 1 ^strategynumberp2 4)} sp {pd*elaborate*strategy5 (state ^problem-space prisoners-dilemma ^strategy-number 5) --> ( ^strategynumberp1 1 ^strategynumberp2 5)} sp {pd*elaborate*strategy6 (state ^problem-space prisoners-dilemma ^strategy-number 6) --> ( ^strategynumberp1 1 ^strategynumberp2 6)} sp {pd*elaborate*strategy7 (state ^problem-space prisoners-dilemma ^strategy-number 7) --> ( ^strategynumberp1 2 ^strategynumberp2 1)} sp {pd*elaborate*strategy8 (state ^problem-space prisoners-dilemma ^strategy-number 8) --> ( ^strategynumberp1 2 ^strategynumberp2 2)} sp {pd*elaborate*strategy9 (state ^problem-space prisoners-dilemma ^strategy-number 9) --> ( ^strategynumberp1 2 ^strategynumberp2 3)} sp {pd*elaborate*strategy10 (state ^problem-space prisoners-dilemma ^strategy-number 10) --> ( ^strategynumberp1 2 ^strategynumberp2 4)} sp {pd*elaborate*strategy11 (state ^problem-space prisoners-dilemma ^strategy-number 11) --> ( ^strategynumberp1 2 ^strategynumberp2 5)} sp {pd*elaborate*strategy12 (state ^problem-space prisoners-dilemma ^strategy-number 12) --> ( ^strategynumberp1 2 ^strategynumberp2 6)} sp {pd*elaborate*strategy13 (state ^problem-space prisoners-dilemma ^strategy-number 13) --> ( ^strategynumberp1 3 ^strategynumberp2 1)} sp {pd*elaborate*strategy14 (state ^problem-space prisoners-dilemma ^strategy-number 14) --> ( ^strategynumberp1 3 ^strategynumberp2 2)} sp {pd*elaborate*strategy15 (state ^problem-space prisoners-dilemma ^strategy-number 15) --> ( ^strategynumberp1 3 ^strategynumberp2 3)} sp {pd*elaborate*strategy16 (state ^problem-space prisoners-dilemma ^strategy-number 16) --> ( ^strategynumberp1 3 ^strategynumberp2 4)} sp {pd*elaborate*strategy17 (state ^problem-space prisoners-dilemma ^strategy-number 17) --> ( ^strategynumberp1 3 ^strategynumberp2 5)} sp {pd*elaborate*strategy18 (state ^problem-space prisoners-dilemma ^strategy-number 18) --> ( ^strategynumberp1 3 ^strategynumberp2 6)} sp {pd*elaborate*strategy19 (state ^problem-space prisoners-dilemma ^strategy-number 19) --> ( ^strategynumberp1 4 ^strategynumberp2 1)} sp {pd*elaborate*strategy20 (state ^problem-space prisoners-dilemma ^strategy-number 20) --> ( ^strategynumberp1 4 ^strategynumberp2 2)} sp {pd*elaborate*strategy21 (state ^problem-space prisoners-dilemma ^strategy-number 21) --> ( ^strategynumberp1 4 ^strategynumberp2 3)} sp {pd*elaborate*strategy22 (state ^problem-space prisoners-dilemma ^strategy-number 22) --> ( ^strategynumberp1 4 ^strategynumberp2 4)} sp {pd*elaborate*strategy23 (state ^problem-space prisoners-dilemma ^strategy-number 23) --> ( ^strategynumberp1 4 ^strategynumberp2 5)} sp {pd*elaborate*strategy24 (state ^problem-space prisoners-dilemma ^strategy-number 24) --> ( ^strategynumberp1 4 ^strategynumberp2 6)} sp {pd*elaborate*strategy25 (state ^problem-space prisoners-dilemma ^strategy-number 25) --> ( ^strategynumberp1 5 ^strategynumberp2 1)} sp {pd*elaborate*strategy26 (state ^problem-space prisoners-dilemma ^strategy-number 26) --> ( ^strategynumberp1 5 ^strategynumberp2 2)} sp {pd*elaborate*strategy27 (state ^problem-space prisoners-dilemma ^strategy-number 27) --> ( ^strategynumberp1 5 ^strategynumberp2 3)} sp {pd*elaborate*strategy28 (state ^problem-space prisoners-dilemma ^strategy-number 28) --> ( ^strategynumberp1 5 ^strategynumberp2 4)} sp {pd*elaborate*strategy29 (state ^problem-space prisoners-dilemma ^strategy-number 29) --> ( ^strategynumberp1 5 ^strategynumberp2 5)} sp {pd*elaborate*strategy30 (state ^problem-space prisoners-dilemma ^strategy-number 31) --> ( ^strategynumberp1 5 ^strategynumberp2 6)} sp {pd*elaborate*strategy31 (state ^problem-space prisoners-dilemma ^strategy-number 31) --> ( ^strategynumberp1 6 ^strategynumberp2 1)} sp {pd*elaborate*strategy32 (state ^problem-space prisoners-dilemma ^strategy-number 32) --> ( ^strategynumberp1 6 ^strategynumberp2 2)} sp {pd*elaborate*strategy33 (state ^problem-space prisoners-dilemma ^strategy-number 33) --> ( ^strategynumberp1 6 ^strategynumberp2 3)} sp {pd*elaborate*strategy34 (state ^problem-space prisoners-dilemma ^strategy-number 34) --> ( ^strategynumberp1 6 ^strategynumberp2 4)} sp {pd*elaborate*strategy35 (state ^problem-space prisoners-dilemma ^strategy-number 35) --> ( ^strategynumberp1 6 ^strategynumberp2 5)} sp {pd*elaborate*strategy36 (state ^problem-space prisoners-dilemma ^strategy-number 36) --> ( ^strategynumberp1 6 ^strategynumberp2 6)}