Math Discourse

No preview image

1 collaborator

Default-person Elizabeth Dyer (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0RC7 • Viewed 261 times • Downloaded 29 times • Run 0 times
Download the 'Math Discourse' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

breed [students student]
breed [teachers teacher]
breed [dialogs dialog]

;current functionality:
;teacher asks answers, students give answers, teacher clarifies

globals [
  rows
  columns 
  student-color ;base color of the students
  high-clarity ;how high of clarity something has to be before clear
  correct-idea ;denotes which idea is correct
  change-idea ;how likely students are to change idea when asked challenging questions
  random-report
  ;counts for reports
  student-student-dialog
  student-teacher-dialog
  open-questions-count
  probing-questions-count
  more-questions-count
  evaluations-count
  advancing-questions-count
  recruiting-questions-count
  explanations-count
]

students-own [
  idea ; what idea you have
  participation ; how willing you are to participate
  respond ;how likely you are to respond to other students
  clarity ; how clear your ideas are
  explanation ; how in depth you explain
  questioning ; how likely you are to ask questions 
              ; students only ask probing questions
  speaker? ; 1 if they are speaking   
  name ; give the student a name 
  student? ;whether they are a student       
]

teachers-own [
  info-question ; how likely you are to ask information questions
  probe-question ; how likely you are to ask probing questions
  more-question ; how likely you are to ask generating questions
  evaluate ; how likely you are to evaluate student ideas
  advancing ; how likely you are to push student ideas further
  recruit ; how likely you are to get students to ask others questions
  explain ; how likely you are to explain ideas to students
  student? ;whether they are a student
]

dialogs-own [
  category ; what type of thing is said
  student? ; did a student say it
  sayer ; agent who said it
  target ; who the thing is targeted at (not always someone)
  text ; the words it is
  last-idea ; what student idea was discussed last
]

to setup
  clear-all
  reset-ticks
  ;set globals
  set rows 5
  set columns 6
  set high-clarity 50 
  set student-color 50
  set correct-idea 3 ;set which idea is correct
  set change-idea 30 ;30 percent chance of changing ideas
  set student-student-dialog 0
  set student-teacher-dialog 0
  set open-questions-count 0
  set probing-questions-count 0
  set more-questions-count 0
  set evaluations-count 0
  set advancing-questions-count 0
  set recruiting-questions-count 0
  set explanations-count 0
  ;create rows of students
  let yrepeat 3
  let xrepeat 3
  let yoffset 4
  let xoffset -11
  let student-count 0
  repeat rows [
    repeat columns [ create-students 1 [ ;put them into 'desk' formation
    set shape "person"
    set ycor (yrepeat + yoffset)
    set xcor (xrepeat + xoffset)
    set xrepeat (xrepeat + 3)
    set idea random 4
    set participation ((Average-participation - 20) + random 40)
    set explanation ((Average-explanation - 20) + random 40)
    set questioning ((Average-questioning - 20) + random 20)
    set respond ((Average-responding - 20) + random 20)
    set clarity random 100
    set speaker? 0
    set student? 1
    set size 2
    set name (word student-count)
    set student-count student-count + 1
    ;sets the color of the turtles according to participation level 
    set color scale-color student-color (participation + 10) 0 100 
    ]
  ]
    set yrepeat (yrepeat - 3)
    set xrepeat 3
  ]
  ;give students ideas
  label-by-idea
  ;make the teacher
  create-teachers 1 [
    set ycor (yoffset + 6)
    set xcor (xoffset + 2 * columns - 1) 
    set shape "face happy"
    set color 15
    set size 2
    set info-question Info-questions
    set probe-question Clarifying-questions
    set more-question Generating-questions
    set evaluate Evaluation
    set advancing Advancing-questions
    set recruit Encourage-student-talk
    set explain Give-explanations
    set student? 0
  ]
  ;make the dialog
  create-dialogs 1 [
    set ycor 14
    set xcor 14
    set color 0
    set shape "dot"
    set target "nobody"
    set category "nothing"
  ]
end 

to go
;  ask dialogs [set label-color white]
  ifelse all? dialogs [category = "nothing"]
  [teacher-ask-question] [
    ifelse all? dialogs [category = "probe-question"]
    [student-clarify] [
      ifelse all? dialogs [category = "question"]
      [answer-question] [
        ifelse all? dialogs [category = "student-request"]
        [student-request] [
          ifelse all? dialogs [category = "targeted-question"]
          [targeted-response] [
            ifelse all? dialogs [category = "idea"]
            [respond-idea] [
              stop]
          ]
        ]
      ]
    ]
  ]
  label-by-idea
  tick
end 

to answer-question
  ifelse all? dialogs [student? = 0]
  [student-answer-question]
  [teacher-answer-question]
end 

to respond-idea
  ifelse all? dialogs [student? = 0]
  ;a teacher idea was experssed
  [teacher-ask-question]
  ;a student idea was expressed
  [respond-to-student-idea]
end 

to respond-to-student-idea
  ;if the idea is unclear, see if someone will probe it
  ifelse all? dialogs [ [clarity] of sayer < high-clarity]
  ;see if a student will respond to it
    [let responder one-of students with [questioning > random 100 and speaker? = 0 and participation > random 100] ;want to sometimes not get a student
    ;if we get a student to respond, have them probe
      ifelse is-student? responder 
      [probe-student-thinking responder] 
      [low-clarity-teacher-moves]
    ]
  ;if the idea is clear
  ;does a student want to add to the idea
    [let responder one-of students with [respond > random 100 and speaker? = 0 and participation > random 100]
      ifelse is-student? responder 
      [ask dialogs [set target sayer]
        student-to-student responder 
        ]
      ;ask for another idea
      [high-clarity-teacher-moves]
      ]
end 

to low-clarity-teacher-moves
  ;see if we can recruit a student to probe
  ifelse all? teachers [recruit > random 100]
    [recruit-student]
  ;otherwise see if the teacher will probe
    [probing-teacher-moves]
end 

to probing-teacher-moves
  ifelse all? teachers [probe-question > random 100] 
    [probe-student-thinking one-of teachers] 
  ;if no probing, either ask for another idea or evaluate current idea
    [ifelse all? teachers [more-question > random 100] 
      [generate-student-idea] 
    ;do we evaluate the idea?
      [ifelse all? teachers [evaluate > random 100] 
        [eval-wrong]
        [no-eval]
      ]
    ]
end 

to high-clarity-teacher-moves
  ifelse all? teachers [more-question > random 100]
    [generate-student-idea]
  ;is it correct?
    [ifelse all? dialogs [ [idea] of sayer = correct-idea]
      [correct-teacher-moves]  
    ;wrong: recruit or 
      [wrong-teacher-moves]
    ]
end 

to correct-teacher-moves
  ;are we going to push student thinking further 
  ifelse all? teachers [advancing > random 100]
    [push-student-idea one-of teachers]
  ;are we going to explain the right answer
    [ifelse all? teachers [explain > random 100]
      [teacher-explains]
    ;are we going to evaluate?
      [ifelse all? teachers [evaluate > random 100]
        ;if the idea is correct, eval-correct
        [eval-correct]
      ;otherwise don't evaluate the idea
        [no-eval]
      ]
    ]
end   

to wrong-teacher-moves
  ifelse all? teachers [recruit > random 100]
    [recruit-student]
    [no-recruit-wrong-teacher-moves]
end 

to no-recruit-wrong-teacher-moves
  ifelse all? teachers [advancing > random 100]
    [push-student-idea one-of teachers]
    [ifelse all? teachers [explain > random 100]
      [teacher-explains]
      [ifelse all? teachers [evaluate > random 100]
        ;if the idea is wrong, eval-wrong ;ifelse all? dialogs [ [idea] of sayer = 3]  
        [eval-wrong]
      ;otherwise don't evaluate the idea
        [no-eval]
      ]
    ]
end 

to student-request
  ifelse all? dialogs [ [clarity] of target < high-clarity]
  ;see if a student will respond to it
    [let responder one-of students with [questioning + 20 > random 100 and speaker? = 0 and participation > random 100] ;want to sometimes not get a student
    ;if we get a student to respond, have them probe
      ifelse is-student? responder 
      [probe-student-thinking responder]
      ;otherwise see if the teacher will probe
      [probing-teacher-moves]
    ]
  [let responder one-of students with [respond + 20 > random 100 and speaker? = 0 and participation > random 100]
    ifelse is-student? responder
    [student-to-student responder]
    [no-recruit-wrong-teacher-moves]
  ]
end 

to student-to-student [responder]
  ;students respond to each other
  ifelse all? dialogs [[idea] of target = [idea] of responder]
  [student-agree responder]
  [ifelse [questioning] of responder > random 100
    [push-student-idea responder]
    [student-disagree responder]
  ]
end 

to student-agree [responder]
  ask dialogs [
    set category "idea"
    ifelse is-student? responder
    [set student? 1]
    [set student? 0]
    ask links [die]
    if target != responder [
      ask target [create-link-from responder]
      count-links
    ]
    set target "nobody"
    set sayer responder
    ifelse student? = 1
    [ask students [
      set speaker? 0
    ]
    ask sayer [
      set speaker? 1
    ]
    ]
    [ask students [
      set speaker? 0
    ]
    ]
    set last-idea [idea] of sayer
    set text "I agree"
    set label text
  ]
end 

to student-disagree [responder]
    ask dialogs [
    set category "idea"
    ifelse is-student? responder
    [set student? 1]
    [set student? 0]
    ask links [die]
    if target != responder [
      ask target [create-link-from responder]
      count-links
    ]
    set target "nobody"
    set sayer responder
    ifelse student? = 1
    [ask students [
      set speaker? 0
    ]
    ask sayer [
      set speaker? 1
    ]
    ]
    [ask students [
      set speaker? 0
    ]
    ]
    set last-idea [idea] of sayer
    set text (word "I disagree. I think " generate-idea sayer)
    set label text
  ]
end 

to push-student-idea [responder]
  ;ask students questions to push understanding forward
  ask dialogs [
    set category "targeted-question"
    ifelse is-student? responder
    [set student? 1]
    [set student? 0
      set advancing-questions-count advancing-questions-count + 1]
    ask links [die]
    ;if the teacher is facilitating, we want link btwn target and responder

    if is-teacher? sayer
    [set sayer target]
    if sayer != responder [
      ask sayer [create-link-from responder]
      count-links
    ]
    ask students [
      set speaker? 0
    ]
    if is-student? responder
    [ask responder [
      set speaker? 1
    ]
    ]
    set target sayer
    set sayer responder    
    set text (word "What about " generate-question target)
 ;   set label-color red
    set label text
  ]
end 

to recruit-student
  ;get student to ask advancing question
  ask dialogs [
    set category "student-request"
    set recruiting-questions-count recruiting-questions-count + 1
    set student? 0
    let responder one-of teachers
;    let participation-level random 100
;    ifelse any? students with [participation > participation-level and speaker? = 0] 
;    [set target one-of students with [participation > participation-level and speaker? = 0]]
;    [set target max-one-of students [participation]]
    set target sayer
;we want to keep the speaker the same
;    ask students [
;      set speaker? 0
;    ]
    ask links [die]
;    if sayer != responder [
;      ask target [create-link-from responder]
;    ]
    set sayer responder    
    set text (word "Does anyone have a question or reply to " [name] of target "'s comment?"
      )
    set label text
  ]
end 

to teacher-explains
  ;teacher explains math idea
  ask dialogs [
    set explanations-count explanations-count + 1
    set student? 0
    let responder one-of teachers
    ask links [die]
    ask students [
      set speaker? 0
    ]
    let explained-idea last-idea
    ask students with [idea = explained-idea] [ 
      raise-clarity 10
    ]
    set sayer responder
    set category "idea"
    set target "nobody"
    set text "Teacher explanation" ;include idea
    set label text
  ]
end 

to targeted-response
  ask dialogs [
    set student? 1
    let responder target
    set category "idea"
    ask links [die]
    if sayer != responder [
      ask sayer [create-link-from responder]
      count-links
    ]
    set sayer responder
    ask students [
      set speaker? 0
    ]
    ask sayer [
      set speaker? 1
    ]
    set target "nobody"
    let change-level random 100
    ifelse change-idea > change-level and [idea] of sayer != correct-idea
    [ask sayer [
      set idea correct-idea
      set clarity random 100
    ]
    set text (word "I change my mind. " generate-idea responder)]
    [set text generate-idea sayer]
    set last-idea [idea] of sayer  
    set label text
  ]
end 

to teacher-ask-question
  ask dialogs [
    set open-questions-count open-questions-count + 1
    set student? 0
    let responder one-of teachers
    if is-agent? sayer [
      ask links [die]
      if sayer != responder [
        ask sayer [create-link-from responder]
        count-links
      ]
    ]
    set sayer responder
    ask students [
      set speaker? 0
    ]
    set category "question"
    set target "nobody"
    set text "Teacher Question"
    set label text
  ]
end 

to teacher-answer-question
end 

to student-answer-question
  ;if the student 
  ask dialogs [
   ;I want the students with more participation to be more likely to be called on
   let responder one-of students with [participation > random 100]
   ;if we don't get any students with participation high enough, use one with highest
   if not is-student? responder
   [set responder max-one-of students [participation]]
   ;if we had a specific student in mind
   if is-student? target
   [set responder target]
   set student? 1
   ask links [die]
   if sayer != responder [
     ask sayer [create-link-from responder]
     count-links
   ]
   set sayer responder
   ask students [
     set speaker? 0
   ]
   ask sayer [
     set speaker? 1
   ]
   set target "nobody"
   set category "idea"
   set last-idea [idea] of sayer  
   set text generate-idea sayer
   set label text
  ]    
end 

to probe-student-thinking [responder]
  ask dialogs [
    set category "probe-question"
    ifelse is-student? responder
    [set student? 1]
    [set student? 0
      set probing-questions-count probing-questions-count + 1]
    if is-student? target
    [set sayer target]
    ask sayer [
      raise-participation 10
    ]
    ask links [die]
    if sayer != responder [
      ask sayer [create-link-from responder]
      count-links
    ]
    set target sayer
    set sayer responder
    ifelse is-student? sayer
    [ask students [
      set speaker? 0
    ]
    ask sayer [
      set speaker? 1
    ]
    ]
    [ask students [
      set speaker? 0
    ]
    ]
    set text "What did you mean?"
    set label text
  ]
end 

to student-clarify
  ask dialogs [
    set category "idea"
    set student? 1
    let responder target
    set target "nobody"
    ask links [die]
    if sayer != responder [
      ask sayer [create-link-from responder]
      count-links
    ]
    set sayer responder
    ask students [
      set speaker? 0
    ]
    ask sayer [
      set speaker? 1
    ]
    set last-idea [idea] of sayer  
    set text (word generate-idea responder " - clarity")
    ask responder [
      raise-clarity 10
    ]
    set label text
  ]
end 

to generate-student-idea
  ask dialogs [
    set category "question"
    set more-questions-count more-questions-count + 1
    set student? 0
    let responder one-of teachers
    let participation-level random 100
    ifelse any? students with [participation > participation-level and speaker? = 0] 
    [set target one-of students with [participation > participation-level and speaker? = 0]]
    [set target max-one-of students with [speaker? = 0] [participation]]
    ask students [
      set speaker? 0
    ]
    ask links [die]
    if sayer != responder [
      ask target [create-link-from responder]
      count-links
    ]
    set sayer responder    
    set text (word "What did you think " [name] of target "?"
      )
    set label text
  ]
end 

to no-eval
  ask dialogs [
    set category "idea"
    set student? 0
    let responder one-of teachers
    ask links [die]
    ask students [
      set speaker? 0
    ]
    if sayer != responder [
      ask sayer [create-link-from responder]
      count-links
    ]
    set sayer responder
    set target "nobody"
    set text "Interesting"
    set label text
  ]
end 

to eval-correct ;teacher saying an idea is correct
  ask dialogs [
    set category "idea"
    set evaluations-count evaluations-count + 1
    set student? 0
    let eval-idea [idea] of sayer
    ask students with [idea = eval-idea] [ ;ask sayer [
      raise-participation 10
    ]
    let responder one-of teachers
    ask links [die]
    ask students [
      set speaker? 0
    ]
    if sayer != responder [
      ask sayer [create-link-from responder]
      count-links
    ]
    set sayer responder
    set target "nobody"
    set text "Good!"
    set label text
  ]
end 

to eval-wrong ;teacher saying an idea is wrong
  ask dialogs [
    let eval-idea last-idea
    ask sayer [
      lower-participation 30
    ]
    ask sayer [ask other students with [idea = eval-idea] [ ;how do I make it not the sayer student? ;ask sayer [
      lower-participation 10
    ]
    ]
    let responder one-of teachers
    ask links [die] 
    ask students [
      set speaker? 0
    ]
    if sayer != responder [
      ask sayer [create-link-from responder]
      count-links
    ]
    set category "idea"
    set evaluations-count evaluations-count + 1
    set student? 0
    set sayer responder
    set target "nobody"
    set text "You're wrong!"
    set label text
  ]
end 

to-report generate-idea [responder]
  if [idea] of responder = 0
    [report "Student response A"]
  if [idea] of responder = 1
    [report "Student response B"]    
  if [idea] of responder = 2
    [report "Student response C"]
  if [idea] of responder = 3
    [report "Student response D"]
  if [idea] of responder = 4
    [report "Student response E"]
end 

to-report generate-question [recipient]
  if [idea] of recipient = 0
    [report "Question for response A"]
  if [idea] of recipient = 1
    [report "Question for response B"]    
  if [idea] of recipient = 2
    [report "Question for response C"]
  if [idea] of recipient = 3
    [report "Question for response D"]
  if [idea] of recipient = 4
    [report "Question for response E"]
end 

to raise-clarity [amount]
  ifelse clarity < 100 - amount
  [set clarity (clarity + amount)]
  [set clarity 100]
end 

to raise-participation [amount]
  ifelse participation < 100 - amount
    [set participation (participation + amount)]
    [set participation 100]
  set color scale-color student-color (participation + 10) 0 100
end 

to lower-participation [amount]
  ifelse participation > amount
    [set participation (participation - amount)]
    [set participation 0]
  set color scale-color student-color (participation + 10) 0 100
end 

to label-by-idea
  ask students [
    if idea = 0
      [set label "A"]
    if idea = 1
      [set label "B"]
    if idea = 2
      [set label "C"]
    if idea = 3
      [set label "D"]
    if idea = 4
      [set label "E"]
  ]
end 

to count-links
  ask links [
    ifelse all? both-ends [student? = 1]
    [set student-student-dialog student-student-dialog + 1]
    [set student-teacher-dialog student-teacher-dialog + 1]
  ]
end 

There is only one version of this model, created about 12 years ago by Elizabeth Dyer.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.