├── data ├── STATICS │ ├── Qmatrix.csv │ ├── STATICS_qid_qname │ ├── STATICS_qid_sid_sname │ ├── STATICS_sid_sname │ ├── STATICS_test.csv │ ├── STATICS_train.csv │ ├── STATICS_train1.csv │ ├── STATICS_train2.csv │ ├── STATICS_train3.csv │ ├── STATICS_train4.csv │ ├── STATICS_train5.csv │ ├── STATICS_valid1.csv │ ├── STATICS_valid2.csv │ ├── STATICS_valid3.csv │ ├── STATICS_valid4.csv │ ├── STATICS_valid5.csv │ └── data_log ├── assist2009_updated │ ├── assist2009_updated_qid_sid │ ├── assist2009_updated_qname_qid │ ├── assist2009_updated_skill_mapping.txt │ ├── assist2009_updated_sname_sid │ ├── assist2009_updated_test.csv │ ├── assist2009_updated_train.csv │ ├── assist2009_updated_train1.csv │ ├── assist2009_updated_train2.csv │ ├── assist2009_updated_train3.csv │ ├── assist2009_updated_train4.csv │ ├── assist2009_updated_train5.csv │ ├── assist2009_updated_valid1.csv │ ├── assist2009_updated_valid2.csv │ ├── assist2009_updated_valid3.csv │ ├── assist2009_updated_valid4.csv │ ├── assist2009_updated_valid5.csv │ └── clustered_skill_name.txt ├── assist2015 │ ├── assist2015_qid_sid │ ├── assist2015_qname_qid │ ├── assist2015_sname_sid │ ├── assist2015_test.csv │ ├── assist2015_train.csv │ ├── assist2015_train1.csv │ ├── assist2015_train2.csv │ ├── assist2015_train3.csv │ ├── assist2015_train4.csv │ ├── assist2015_train5.csv │ ├── assist2015_valid1.csv │ ├── assist2015_valid2.csv │ ├── assist2015_valid3.csv │ ├── assist2015_valid4.csv │ └── assist2015_valid5.csv └── synthetic │ ├── cluster_info_0 │ ├── cluster_info_1 │ ├── cluster_info_10 │ ├── cluster_info_11 │ ├── cluster_info_12 │ ├── cluster_info_13 │ ├── cluster_info_14 │ ├── cluster_info_15 │ ├── cluster_info_16 │ ├── cluster_info_17 │ ├── cluster_info_18 │ ├── cluster_info_19 │ ├── cluster_info_2 │ ├── cluster_info_3 │ ├── cluster_info_4 │ ├── cluster_info_5 │ ├── cluster_info_6 │ ├── cluster_info_7 │ ├── cluster_info_8 │ ├── cluster_info_9 │ ├── naive_c5_q50_s4000_v0_test.csv │ ├── naive_c5_q50_s4000_v0_train.csv │ ├── naive_c5_q50_s4000_v0_train1.csv │ ├── naive_c5_q50_s4000_v0_valid1.csv │ ├── naive_c5_q50_s4000_v10_test.csv │ ├── naive_c5_q50_s4000_v10_train.csv │ ├── naive_c5_q50_s4000_v10_train1.csv │ ├── naive_c5_q50_s4000_v10_valid1.csv │ ├── naive_c5_q50_s4000_v11_test.csv │ ├── naive_c5_q50_s4000_v11_train.csv │ ├── naive_c5_q50_s4000_v11_train1.csv │ ├── naive_c5_q50_s4000_v11_valid1.csv │ ├── naive_c5_q50_s4000_v12_test.csv │ ├── naive_c5_q50_s4000_v12_train.csv │ ├── naive_c5_q50_s4000_v12_train1.csv │ ├── naive_c5_q50_s4000_v12_valid1.csv │ ├── naive_c5_q50_s4000_v13_test.csv │ ├── naive_c5_q50_s4000_v13_train.csv │ ├── naive_c5_q50_s4000_v13_train1.csv │ ├── naive_c5_q50_s4000_v13_valid1.csv │ ├── naive_c5_q50_s4000_v14_test.csv │ ├── naive_c5_q50_s4000_v14_train.csv │ ├── naive_c5_q50_s4000_v14_train1.csv │ ├── naive_c5_q50_s4000_v14_valid1.csv │ ├── naive_c5_q50_s4000_v15_test.csv │ ├── naive_c5_q50_s4000_v15_train.csv │ ├── naive_c5_q50_s4000_v15_train1.csv │ ├── naive_c5_q50_s4000_v15_valid1.csv │ ├── naive_c5_q50_s4000_v16_test.csv │ ├── naive_c5_q50_s4000_v16_train.csv │ ├── naive_c5_q50_s4000_v16_train1.csv │ ├── naive_c5_q50_s4000_v16_valid1.csv │ ├── naive_c5_q50_s4000_v17_test.csv │ ├── naive_c5_q50_s4000_v17_train.csv │ ├── naive_c5_q50_s4000_v17_train1.csv │ ├── naive_c5_q50_s4000_v17_valid1.csv │ ├── naive_c5_q50_s4000_v18_test.csv │ ├── naive_c5_q50_s4000_v18_train.csv │ ├── naive_c5_q50_s4000_v18_train1.csv │ ├── naive_c5_q50_s4000_v18_valid1.csv │ ├── naive_c5_q50_s4000_v19_test.csv │ ├── naive_c5_q50_s4000_v19_train.csv │ ├── naive_c5_q50_s4000_v19_train1.csv │ ├── naive_c5_q50_s4000_v19_valid1.csv │ ├── naive_c5_q50_s4000_v1_test.csv │ ├── naive_c5_q50_s4000_v1_train.csv │ ├── naive_c5_q50_s4000_v1_train1.csv │ ├── naive_c5_q50_s4000_v1_valid1.csv │ ├── naive_c5_q50_s4000_v2_test.csv │ ├── naive_c5_q50_s4000_v2_train.csv │ ├── naive_c5_q50_s4000_v2_train1.csv │ ├── naive_c5_q50_s4000_v2_valid1.csv │ ├── naive_c5_q50_s4000_v3_test.csv │ ├── naive_c5_q50_s4000_v3_train.csv │ ├── naive_c5_q50_s4000_v3_train1.csv │ ├── naive_c5_q50_s4000_v3_valid1.csv │ ├── naive_c5_q50_s4000_v4_test.csv │ ├── naive_c5_q50_s4000_v4_train.csv │ ├── naive_c5_q50_s4000_v4_train1.csv │ ├── naive_c5_q50_s4000_v4_valid1.csv │ ├── naive_c5_q50_s4000_v5_test.csv │ ├── naive_c5_q50_s4000_v5_train.csv │ ├── naive_c5_q50_s4000_v5_train1.csv │ ├── naive_c5_q50_s4000_v5_valid1.csv │ ├── naive_c5_q50_s4000_v6_test.csv │ ├── naive_c5_q50_s4000_v6_train.csv │ ├── naive_c5_q50_s4000_v6_train1.csv │ ├── naive_c5_q50_s4000_v6_valid1.csv │ ├── naive_c5_q50_s4000_v7_test.csv │ ├── naive_c5_q50_s4000_v7_train.csv │ ├── naive_c5_q50_s4000_v7_train1.csv │ ├── naive_c5_q50_s4000_v7_valid1.csv │ ├── naive_c5_q50_s4000_v8_test.csv │ ├── naive_c5_q50_s4000_v8_train.csv │ ├── naive_c5_q50_s4000_v8_train1.csv │ ├── naive_c5_q50_s4000_v8_valid1.csv │ ├── naive_c5_q50_s4000_v9_test.csv │ ├── naive_c5_q50_s4000_v9_train.csv │ ├── naive_c5_q50_s4000_v9_train1.csv │ └── naive_c5_q50_s4000_v9_valid1.csv ├── model_CNN.py ├── model_function.py ├── test.py ├── train.py └── utils ├── checkmate.py └── data_helpers.py /data/STATICS/STATICS_qid_qname: -------------------------------------------------------------------------------- 1 | qid qname 2 | 191 tutor_05_07_q8_i8 UpdateRadioButton 3 | 726 tutor_18_02_q4_i2 UpdateHotspotSingle 4 | 178 _m1_tutor10_q4_i1 UpdateHotspotSingle 5 | 368 tutor_09_07_q1_i1 UpdateHotspotSingle 6 | 1105 tutor_22_12_q1_A UpdateRadioButton 7 | 713 _m17_assess_q1_EB UpdateRadioButton 8 | 429 tutor_11_03_q7_input7 UpdateComboBox 9 | 737 _m18_assess_q2_i2 UpdateComboBox 10 | 1109 tutor_22_13_q2_B UpdateNumberField 11 | 792 tutor_08_04_q2_B UpdateRadioButton 12 | 631 tutor_17_02_q1_i1 UpdateHotspotSingle 13 | 1058 tutor_15_11_q7_i1 UpdateRadioButton 14 | 1003 tutor_08_08_q1_F UpdateComboBox 15 | 677 tutor_17_09_qh1_i1 UpdateRadioButton 16 | 136 tutor_05_03_q10_C UpdateComboBox 17 | 100 _m1_assess_q2_label UpdateHotspotSingle 18 | 51 tutor_03_15_q1_q1-input UpdateRadioButton 19 | 1050 tutor_12_20_q1_i1 UpdateHotspotMultiple 20 | 268 _m6_assess_q5_i1 UpdateRadioButton 21 | 338 tutor_07_24_q3_F UpdateComboBox 22 | 213 tutor_05_18_q5_i5 UpdateComboBox 23 | 881 tutor_22_01_q3_C UpdateRadioButton 24 | 767 _m1_tutor18_q4_i1 UpdateHotspotSingle 25 | 842 tutor_12_22_q4_D UpdateRadioButton 26 | 394 _m9_assess_q5_i5 UpdateComboBox 27 | 948 _m22_assess_q3_i1 UpdateRadioButton 28 | 226 tutor_6_03_q2_A UpdateComboBox 29 | 1168 tutor_21_2_1_q1_A UpdateNumberField 30 | 425 tutor_11_03_q3_input3 UpdateComboBox 31 | 1068 tutor_15_12_q1_D UpdateComboBox 32 | 553 tutor_12_10_q3_6_C6 UpdateRadioButton 33 | 14 _m2_assess_q1_point5i1 UpdateComboBox 34 | 473 tutor_11_24_q2_i1 UpdateRadioButton 35 | 29 tutor_03_03_q2_A UpdateRadioButton 36 | 59 _m3_assess_q3_i3 UpdateCheckbox 37 | 76 _m1_tutor1_q5_A UpdateRadioButton 38 | 1114 tutor_22_16_q5_E UpdateRadioButton 39 | 550 tutor_12_10_q3_3_C3 UpdateRadioButton 40 | 935 tutor_22_23_q6_F UpdateRadioButton 41 | 888 tutor_22_04_q2_B UpdateNumberField 42 | 996 tutor_07_27_q1_A UpdateComboBox 43 | 1071 tutor_15_13_q1_i1 UpdateRadioButton 44 | 545 tutor_12_10_q2_6_B6 UpdateRadioButton 45 | 294 tutor_7_11_q1_A UpdateComboBox 46 | 457 tutor_11_16_q1_A UpdateComboBox 47 | 1078 tutor_15_14_q5a_i1 UpdateRadioButton 48 | 101 _m1_assess_q5_sense UpdateHotspotSingle 49 | 581 _m12_assess_q3_i1 UpdateHotspotMultiple 50 | 932 tutor_22_23_q3_C UpdateRadioButton 51 | 396 _m9_assess_q9_i3 UpdateComboBox 52 | 183 tutor_05_05_q1_C UpdateComboBox 53 | 1208 tutor_20_3_5_q2_B UpdateNumberField 54 | 689 tutor_17_09_qh2_i1 UpdateRadioButton 55 | 571 tutor_12_18_q5_E UpdateRadioButton 56 | 674 tutor_17_09_qe1_i1 UpdateRadioButton 57 | 860 tutor_15_08_q5_i1 UpdateRadioButton 58 | 729 tutor_18_03_q2_i1 UpdateRadioButton 59 | 569 tutor_12_18_q3_C UpdateRadioButton 60 | 520 tutor_12_05_q7_G UpdateRadioButton 61 | 570 tutor_12_18_q4_D UpdateRadioButton 62 | 993 tutor_07_25_q3_C UpdateComboBox 63 | 772 _m4_assess_q5_i1 UpdateNumberField 64 | 804 tutor_11_09_q7_input7 UpdateComboBox 65 | 992 tutor_07_25_q2_B UpdateComboBox 66 | 911 tutor_22_09_q1_A UpdateRadioButton 67 | 1043 tutor_12_17_q6_F UpdateRadioButton 68 | 560 tutor_12_15_q3_B UpdateRadioButton 69 | 34 tutor_03_08_q1_A UpdateRadioButton 70 | 643 tutor_17_05_q1_i1 UpdateHotspotSingle 71 | 786 tutor_08_02_q2_A UpdateHotspotSingle 72 | 1203 tutor_20_3_4_q1_A UpdateNumberField 73 | 577 _m12_assess_q2_i3 UpdateComboBox 74 | 46 tutor_03_13_q2_q2-input UpdateRadioButton 75 | 95 _m1_assess_q4_sense UpdateHotspotSingle 76 | 895 tutor_22_06_q5_E UpdateRadioButton 77 | 1045 tutor_12_17_q8_H UpdateComboBox 78 | 194 tutor_05_07_q11_A UpdateComboBox 79 | 704 tutor_17_10_q3_i1 UpdateRadioButton 80 | 1155 tutor_08_21_q5_H UpdateNumberField 81 | 523 tutor_12_06_q2_B UpdateRadioButton 82 | 283 tutor_7_06_q1_A UpdateComboBox 83 | 720 _m17_assess_q3_i9 UpdateComboBox 84 | 158 _m4_assess_q1_i4 UpdateNumberField 85 | 1069 tutor_15_12_q1_E UpdateComboBox 86 | 546 tutor_12_10_q2_7_B7 UpdateComboBox 87 | 824 tutor_12_13_q2_B UpdateRadioButton 88 | 489 _m11_assess_q1_i8 UpdateComboBox 89 | 1015 tutor_08_12_q1_A UpdateShortAnswer 90 | 712 _m17_assess_q3_i5 UpdateComboBox 91 | 458 tutor_11_16_q1_C UpdateComboBox 92 | 442 tutor_11_05_q4_i2 UpdateHotspotSingle 93 | 73 _m1_tutor1_q2_A UpdateRadioButton 94 | 744 _m1_tutor2_q4_A UpdateRadioButton 95 | 593 tutor_13_06_q3_F UpdateRadioButton 96 | 756 _m1_tutor15_q2_i1 UpdateHotspotSingle 97 | 293 tutor_7_10_q4_i1 UpdateRadioButton 98 | 1066 tutor_15_12_q1_B UpdateComboBox 99 | 1220 tutor_21_4_1_q1_A UpdateNumberField 100 | 707 _m17_assess_q2_i2 UpdateNumberField 101 | 518 tutor_12_05_q5_E UpdateRadioButton 102 | 856 tutor_15_08_q1_i1 UpdateRadioButton 103 | 851 tutor_15_04_q4_i1 UpdateRadioButton 104 | 32 tutor_03_06_q1_A UpdateRadioButton 105 | 173 _m1_tutor9_q3_i1 UpdateHotspotSingle 106 | 805 tutor_11_09_q8_input8 UpdateComboBox 107 | 985 tutor_04_17_q1_A UpdateRadioButton 108 | 1055 tutor_15_11_q1_i1 UpdateRadioButton 109 | 999 tutor_08_04_q4_D UpdateRadioButton 110 | 916 tutor_22_11_q1_A UpdateRadioButton 111 | 335 tutor_07_24_q2_C UpdateComboBox 112 | 922 tutor_22_21_q2_B UpdateRadioButton 113 | 622 tutor_15_07_q3_C UpdateRadioButton 114 | 291 tutor_7_10_q2_i1 UpdateRadioButton 115 | 30 tutor_03_04_q1_i1 UpdateRadioButton 116 | 382 _m9_assess_q5_i2 UpdateComboBox 117 | 515 tutor_12_05_q2_B UpdateRadioButton 118 | 1000 tutor_08_05_q1_A UpdateRadioButton 119 | 732 tutor_18_04_q2_i1 UpdateRadioButton 120 | 39 tutor_03_11_q3_q3-input UpdateRadioButton 121 | 12 _m2_assess_q1_point7i2 UpdateComboBox 122 | 256 tutor_6_09_q2_B UpdateRadioButton 123 | 64 _m3_assess_q2_i2 UpdateCheckbox 124 | 366 tutor_09_03_q2_B UpdateShortAnswer 125 | 1170 tutor_21_4_3_q1_A UpdateRadioButton 126 | 40 tutor_03_11_q4_q4-input UpdateRadioButton 127 | 24 tutor_03_01_q3_i1 UpdateRadioButton 128 | 61 _m3_assess_q3_i4 UpdateCheckbox 129 | 1221 tutor_21_4_4_q1_A UpdateNumberField 130 | 1112 tutor_22_16_q3_C UpdateRadioButton 131 | 547 tutor_12_10_q2_8_B8 UpdateRadioButton 132 | 626 _m15_assess_q1_i2 UpdateComboBox 133 | 128 tutor_05_03_q3_i3 UpdateHotspotSingle 134 | 486 tutor_11_27_q8_i1 UpdateRadioButton 135 | 282 tutor_7_05_q1_i1 UpdateRadioButton 136 | 918 tutor_22_11_q3_C UpdateHotspotSingle 137 | 863 tutor_15_08_q8_i1 UpdateRadioButton 138 | 728 tutor_18_03_q1_i1 UpdateRadioButton 139 | 1204 tutor_20_3_4_q2_B UpdateNumberField 140 | 42 tutor_03_12_q2_q2-input UpdateRadioButton 141 | 31 tutor_03_05_q1_A UpdateRadioButton 142 | 229 tutor_6_03c_q3_C UpdateComboBox 143 | 565 tutor_12_17_q3_C UpdateComboBox 144 | 685 tutor_17_09_qd2_i1 UpdateRadioButton 145 | 126 tutor_05_03_q1_i1 UpdateComboBox 146 | 763 _m1_tutor17_q1_i1 UpdateHotspotSingle 147 | 1001 tutor_08_05_q2_B UpdateRadioButton 148 | 84 _m1_tutor13_q1_i1 UpdateHotspotSingle 149 | 292 tutor_7_10_q3_i1 UpdateRadioButton 150 | 1183 tutor_22_22_q7_G UpdateRadioButton 151 | 1189 tutor_21_2_3_q1_A UpdateNumberField 152 | 1 _m2_assess_q1_point1i1 UpdateComboBox 153 | 132 tutor_05_03_q7_i7 UpdateComboBox 154 | 510 tutor_12_01_q2_B UpdateRadioButton 155 | 955 _m1_tutor12_q3_i1 UpdateHotspotSingle 156 | 18 _m2_assess_q1_point3i1 UpdateComboBox 157 | 710 _m17_assess_q3_i6 UpdateComboBox 158 | 797 tutor_11_08_q3_i3 UpdateHotspotSingle 159 | 290 tutor_7_10_q1_i1 UpdateRadioButton 160 | 188 tutor_05_07_q5_i5 UpdateRadioButton 161 | 1146 tutor_08_20_q2_B UpdateRadioButton 162 | 499 _m11_assess_q1_i4 UpdateComboBox 163 | 331 tutor_07_23_q3_F UpdateComboBox 164 | 532 tutor_12_10_q1_1_A1 UpdateRadioButton 165 | 52 tutor_03_15_q2_q2-input UpdateRadioButton 166 | 1021 tutor_11_11_q2_input2 UpdateComboBox 167 | 409 _m9_assess_q8_i3 UpdateComboBox 168 | 1136 tutor_08_17_q1_A UpdateRadioButton 169 | 1027 tutor_11_28_q2_B UpdateComboBox 170 | 431 tutor_11_04_q1_input1 UpdateComboBox 171 | 207 tutor_05_17_q3_i3 UpdateComboBox 172 | 787 tutor_08_03_q1_A UpdateComboBox 173 | 721 _m17_assess_q3_i1 UpdateComboBox 174 | 373 tutor_09_13_q1_B UpdateShortAnswer 175 | 142 tutor_04_02_q2_B UpdateNumberField 176 | 159 tutor_05_01_q2_q2-input UpdateComboBox 177 | 967 tutor_20_2_7_q1_A UpdateRadioButton 178 | 603 tutor_15_02_q1_B UpdateComboBox 179 | 1089 tutor_15_14_q5b_i1 UpdateRadioButton 180 | 783 tutor_08_01_q3_B UpdateComboBox 181 | 359 _m8_assess_q3_i1 UpdateNumberField 182 | 477 tutor_11_26_q1_input1 UpdateRadioButton 183 | 670 tutor_17_09_qa1_i1 UpdateRadioButton 184 | 853 tutor_15_04_q6_i1 UpdateRadioButton 185 | 434 tutor_11_04_q4_input4 UpdateComboBox 186 | 1073 tutor_15_13_q3_i1 UpdateRadioButton 187 | 749 _m1_tutor4_q3_i1 UpdateHotspotSingle 188 | 1026 tutor_11_28_q1_A UpdateComboBox 189 | 238 tutor_6_05_q2_A UpdateComboBox 190 | 633 tutor_17_03_q1_i1 UpdateHotspotSingle 191 | 362 _m8_assess_q1_i1 UpdateComboBox 192 | 589 tutor_13_04_q2_E UpdateRadioButton 193 | 495 _m11_assess_q1_i13 UpdateComboBox 194 | 437 tutor_11_04_q7_input7 UpdateComboBox 195 | 647 tutor_17_06_q1_i1 UpdateHotspotSingle 196 | 218 _m5_assess_q3_i4 UpdateNumberField 197 | 1094 tutor_15_14_q10b_i1 UpdateRadioButton 198 | 397 _m9_assess_q3_i2 UpdateRadioButton 199 | 212 tutor_05_18_q4_i4 UpdateComboBox 200 | 709 _m17_assess_q2_i1 UpdateNumberField 201 | 1034 tutor_12_10_q4_1_D1 UpdateRadioButton 202 | 1090 tutor_15_14_q6b_i1 UpdateRadioButton 203 | 831 tutor_12_14_q1_A UpdateComboBox 204 | 1128 tutor_04_09_q1_C UpdateComboBox 205 | 901 tutor_22_07_q4_D UpdateRadioButton 206 | 782 tutor_08_01_q3_C UpdateComboBox 207 | 1131 tutor_04_12_q1_A UpdateComboBox 208 | 246 tutor_6_06_q5_A UpdateComboBox 209 | 1161 _m8_assess_part2_q4_i3 UpdateNumberField 210 | 295 tutor_7_11_q2_A UpdateComboBox 211 | 719 _m17_assess_q1_DE UpdateRadioButton 212 | 232 tutor_6_04_q3_A UpdateComboBox 213 | 529 tutor_12_06_q8_H UpdateRadioButton 214 | 1102 tutor_15_14_q7c_i1 UpdateRadioButton 215 | 135 tutor_05_03_q10_B UpdateComboBox 216 | 855 tutor_15_04_q8_i1 UpdateRadioButton 217 | 248 tutor_6_07_q1_B UpdateComboBox 218 | 1080 tutor_15_14_q7a_i1 UpdateRadioButton 219 | 640 tutor_17_03_q8_i8 UpdateRadioButton 220 | 896 tutor_22_06_q6_F UpdateRadioButton 221 | 538 tutor_12_10_q1_7_A7 UpdateComboBox 222 | 794 tutor_11_07_q2_B UpdateComboBox 223 | 370 tutor_09_09_q1_A UpdateComboBox 224 | 472 tutor_11_24_q1_i1 UpdateRadioButton 225 | 750 _m1_tutor4_q4_i1 UpdateHotspotSingle 226 | 1156 _m8_assess_part2_q3_i2 UpdateNumberField 227 | 698 tutor_17_09_qg3_i1 UpdateRadioButton 228 | 587 tutor_13_02_q6_F UpdateRadioButton 229 | 974 tutor_20_3_2_q4_A UpdateComboBox 230 | 176 _m1_tutor10_q2_i1 UpdateHotspotSingle 231 | 509 tutor_12_01_q1_A UpdateRadioButton 232 | 447 tutor_11_10_q1_input1 UpdateComboBox 233 | 966 tutor_20_2_6_q1_B UpdateComboBox 234 | 44 tutor_03_12_q4_q4-input UpdateRadioButton 235 | 665 tutor_17_08_q13_i1 UpdateRadioButton 236 | 835 tutor_12_21_q4_D UpdateComboBox 237 | 650 tutor_17_06_q2_i2 UpdateHotspotSingle 238 | 127 tutor_05_03_q2_i2 UpdateHotspotSingle 239 | 1133 tutor_04_12_q3_D UpdateComboBox 240 | 172 _m1_tutor9_q2_i1 UpdateHotspotSingle 241 | 791 tutor_08_04_q1_A UpdateRadioButton 242 | 1059 tutor_15_11_q8_i1 UpdateRadioButton 243 | 206 tutor_05_17_q2_i2 UpdateComboBox 244 | 110 tutor_04_08_q3_C UpdateNumberField 245 | 880 tutor_22_01_q2_B UpdateRadioButton 246 | 516 tutor_12_05_q3_C UpdateRadioButton 247 | 1033 tutor_11_30_q4_A UpdateComboBox 248 | 13 _m2_assess_q1_point2i2 UpdateComboBox 249 | 702 tutor_17_10_q1_i1 UpdateRadioButton 250 | 1182 tutor_22_22_q6_F UpdateRadioButton 251 | 492 _m11_assess_q1_i14 UpdateComboBox 252 | 864 tutor_15_08_q9_i1 UpdateRadioButton 253 | 361 _m8_assess_q2_i1 UpdateNumberField 254 | 934 tutor_22_23_q5_E UpdateRadioButton 255 | 951 _m22_assess_q6_i1 UpdateRadioButton 256 | 333 tutor_07_24_q1_A UpdateComboBox 257 | 843 tutor_12_22_q5_E UpdateRadioButton 258 | 215 _m5_assess_q3_i2 UpdateNumberField 259 | 484 tutor_11_27_q6_i1 UpdateRadioButton 260 | 1025 tutor_11_22_q1_A UpdateComboBox 261 | 427 tutor_11_03_q5_input5 UpdateComboBox 262 | 460 tutor_11_16_q1_B UpdateComboBox 263 | 301 tutor_7_16_q2_B UpdateComboBox 264 | 413 _m10_assess_q1_i4 UpdateComboBox 265 | 735 _m18_assess_q1_i3 UpdateComboBox 266 | 324 tutor_07_22_q2_C UpdateComboBox 267 | 275 tutor_7_02_q1_A UpdateComboBox 268 | 476 tutor_11_25_q1_input1 UpdateRadioButton 269 | 1007 tutor_08_10_q1_A UpdateComboBox 270 | 803 tutor_11_09_q6_input6 UpdateComboBox 271 | 836 tutor_12_21_q5_E UpdateRadioButton 272 | 204 tutor_05_15_q1_A UpdateShortAnswer 273 | 307 tutor_7_16_q8_B UpdateComboBox 274 | 160 tutor_05_03_q9_A UpdateShortAnswer 275 | 929 tutor_22_22_q1_A UpdateRadioButton 276 | 47 tutor_03_13_q3_q3-input UpdateRadioButton 277 | 1104 tutor_15_14_q9c_i1 UpdateRadioButton 278 | 533 tutor_12_10_q1_2_A2 UpdateRadioButton 279 | 976 tutor_20_3_3_q1_A UpdateNumberField 280 | 1196 tutor_21_4_2_q1_A UpdateShortAnswer 281 | 488 _m11_assess_q1_i16 UpdateComboBox 282 | 483 tutor_11_27_q5_i1 UpdateRadioButton 283 | 312 tutor_07_19_q1_B UpdateComboBox 284 | 660 tutor_17_08_q8_i1 UpdateRadioButton 285 | 225 tutor_6_03_q1_A UpdateComboBox 286 | 1217 tutor_21_3_4_q1_A UpdateNumberField 287 | 869 tutor_15_09_q3_B UpdateComboBox 288 | 1158 _m8_assess_part2_q2_i3 UpdateComboBox 289 | 1049 tutor_12_19_q1_i1 UpdateHotspotMultiple 290 | 418 tutor_11_01_q4_i1 UpdateRadioButton 291 | 619 tutor_15_06_q5_A UpdateComboBox 292 | 162 tutor_05_03_q12_I UpdateComboBox 293 | 766 _m1_tutor18_q3_i1 UpdateHotspotSingle 294 | 250 tutor_6_07_q2_A UpdateComboBox 295 | 971 tutor_20_3_2_q1_A UpdateComboBox 296 | 1013 tutor_08_11_q2_C UpdateComboBox 297 | 743 _m1_tutor2_q3_A UpdateRadioButton 298 | 681 tutor_17_09_ql1_i1 UpdateRadioButton 299 | 1047 tutor_12_17_q10_J UpdateComboBox 300 | 617 tutor_15_06_q3_A UpdateRadioButton 301 | 850 tutor_15_01_q3_i1 UpdateRadioButton 302 | 861 tutor_15_08_q6_i1 UpdateRadioButton 303 | 124 tutor_04_13_q2_F UpdateComboBox 304 | 1084 tutor_15_14_q11a_i1 UpdateRadioButton 305 | 705 tutor_17_10_q4_i1 UpdateRadioButton 306 | 315 tutor_07_20_q1_A UpdateRadioButton 307 | 585 tutor_13_02_q4_D UpdateRadioButton 308 | 249 tutor_6_07_q1_C UpdateComboBox 309 | 102 _m1_assess_q3_point UpdateHotspotSingle 310 | 118 tutor_04_10_q3_H UpdateComboBox 311 | 305 tutor_7_16_q6_B UpdateComboBox 312 | 829 tutor_12_13_q7_E UpdateRadioButton 313 | 956 _m1_tutor14_q3_i1 UpdateHotspotSingle 314 | 913 tutor_22_09_q3_C UpdateRadioButton 315 | 308 tutor_07_17_q1_A UpdateComboBox 316 | 1175 tutor_08_22_q1_B UpdateNumberField 317 | 502 _m11_assess_q1_i3 UpdateComboBox 318 | 828 tutor_12_13_q6_F UpdateRadioButton 319 | 227 tutor_6_03c_q1_A UpdateComboBox 320 | 817 tutor_12_11_q4_D UpdateRadioButton 321 | 244 tutor_6_06_q3_A UpdateComboBox 322 | 524 tutor_12_06_q3_C UpdateRadioButton 323 | 384 _m9_assess_q8_i4 UpdateComboBox 324 | 201 tutor_05_12_q5_i5 UpdateRadioButton 325 | 169 _m5_assess_q1_i1 UpdateNumberField 326 | 1036 tutor_12_10_q4_3_D3 UpdateRadioButton 327 | 167 tutor_05_03_q13_N UpdateComboBox 328 | 1152 tutor_08_21_q3_E UpdateNumberField 329 | 700 tutor_17_09_qh3_i1 UpdateRadioButton 330 | 723 tutor_18_02_q1_i1 UpdateHotspotMultiple 331 | 770 _m1_tutor19_q3_i1 UpdateHotspotSingle 332 | 921 tutor_22_21_q1_A UpdateRadioButton 333 | 1173 _m21_assess_q1_A UpdateComboBox 334 | 133 tutor_05_03_q8_i8 UpdateComboBox 335 | 706 _m17_assess_q3_i8 UpdateComboBox 336 | 858 tutor_15_08_q3_i1 UpdateRadioButton 337 | 902 tutor_22_07_q5_E UpdateRadioButton 338 | 920 tutor_22_15_q1_A UpdateNumberField 339 | 765 _m1_tutor18_q2_i1 UpdateHotspotSingle 340 | 644 tutor_17_05_q2_i2 UpdateHotspotSingle 341 | 414 _m10_assess_q1_i5 UpdateComboBox 342 | 318 tutor_07_20_q4_A UpdateRadioButton 343 | 1214 tutor_08_25_q3_A UpdateShortAnswer 344 | 667 tutor_17_08_q15_i1 UpdateRadioButton 345 | 257 tutor_6_10_q1_A UpdateRadioButton 346 | 1151 tutor_08_21_q2_D UpdateNumberField 347 | 662 tutor_17_08_q10_i1 UpdateRadioButton 348 | 627 _m15_assess_q1_i3 UpdateComboBox 349 | 1014 tutor_08_11_q2_D UpdateComboBox 350 | 775 tutor_05_10_q1_A UpdateShortAnswer 351 | 602 tutor_15_02_q1_A UpdateComboBox 352 | 234 tutor_6_04_q5_A UpdateComboBox 353 | 506 _m11_assess_q2_i1 UpdateComboBox 354 | 757 _m1_tutor15_q3_i1 UpdateHotspotSingle 355 | 903 tutor_22_07_q6_F UpdateRadioButton 356 | 428 tutor_11_03_q6_input6 UpdateComboBox 357 | 891 tutor_22_06_q1_A UpdateRadioButton 358 | 762 _m1_tutor16_q4_i1 UpdateHotspotSingle 359 | 1177 tutor_08_23_q1_A UpdateNumberField 360 | 1101 tutor_15_14_q6c_i1 UpdateRadioButton 361 | 182 tutor_05_02_q1_C UpdateComboBox 362 | 155 _m4_assess_q1_i1 UpdateNumberField 363 | 561 tutor_12_16_q1_A UpdateRadioButton 364 | 814 tutor_12_01_q8_H UpdateRadioButton 365 | 1119 tutor_22_28_q1_A UpdateRadioButton 366 | 421 tutor_11_02_q3_i1 UpdateRadioButton 367 | 190 tutor_05_07_q7_i7 UpdateRadioButton 368 | 407 _m9_assess_q5_i1 UpdateComboBox 369 | 214 tutor_05_18_q6_i6 UpdateHotspotSingle 370 | 933 tutor_22_23_q4_D UpdateRadioButton 371 | 1130 tutor_04_09_q1_D UpdateComboBox 372 | 669 tutor_17_08_q17_i1 UpdateRadioButton 373 | 693 tutor_17_09_qa3_i1 UpdateRadioButton 374 | 1106 tutor_22_12_q2_B UpdateRadioButton 375 | 1215 tutor_20_3_6_q1_A UpdateNumberField 376 | 1148 tutor_08_21_q1_A UpdateNumberField 377 | 870 tutor_15_10_q1_i1 UpdateRadioButton 378 | 624 tutor_15_07_q5_i1 UpdateRadioButton 379 | 491 _m11_assess_q1_i7 UpdateComboBox 380 | 1031 tutor_11_30_q2_C UpdateComboBox 381 | 321 tutor_07_21_q3_C UpdateComboBox 382 | 1083 tutor_15_14_q10a_i1 UpdateRadioButton 383 | 1072 tutor_15_13_q2_i1 UpdateRadioButton 384 | 925 tutor_22_21_q5_E UpdateRadioButton 385 | 1009 tutor_08_10_q2_C UpdateComboBox 386 | 845 tutor_12_22_q7_G UpdateRadioButton 387 | 260 tutor_6_10_q4_A UpdateRadioButton 388 | 355 _m8_assess_q4_i3 UpdateComboBox 389 | 590 tutor_13_04_q3_F UpdateRadioButton 390 | 883 tutor_22_01_q5_E UpdateRadioButton 391 | 116 tutor_04_10_q3_F UpdateComboBox 392 | 868 tutor_15_09_q2_A UpdateComboBox 393 | 815 tutor_12_09_q1_i1 UpdateHotspotMultiple 394 | 68 _m3_assess_q2_i4 UpdateCheckbox 395 | 1039 tutor_12_10_q4_6_D6 UpdateRadioButton 396 | 1211 tutor_21_2_4_q1_A UpdateNumberField 397 | 695 tutor_17_09_qc3_i1 UpdateRadioButton 398 | 438 tutor_11_04_q8_input8 UpdateComboBox 399 | 977 _m20_assess_q4_D UpdateComboBox 400 | 360 _m8_assess_q2_i2 UpdateNumberField 401 | 433 tutor_11_04_q3_input3 UpdateComboBox 402 | 1099 tutor_15_14_q4c_i1 UpdateRadioButton 403 | 1107 tutor_22_12_q3_C UpdateRadioButton 404 | 699 tutor_17_09_qi3_i1 UpdateRadioButton 405 | 237 tutor_6_05_q1_C UpdateComboBox 406 | 1147 tutor_08_20_q1_A UpdateRadioButton 407 | 140 tutor_05_03_q11_G UpdateComboBox 408 | 637 tutor_17_03_q5_i5 UpdateHotspotSingle 409 | 582 tutor_13_02_q1_B UpdateComboBox 410 | 722 _m17_assess_q1_DB UpdateRadioButton 411 | 857 tutor_15_08_q2_i1 UpdateRadioButton 412 | 478 tutor_11_26_q2_A UpdateComboBox 413 | 812 tutor_12_01_q6_F UpdateRadioButton 414 | 780 tutor_08_01_q2_E UpdateComboBox 415 | 41 tutor_03_12_q1_q1-input UpdateRadioButton 416 | 399 _m9_assess_q7_i5 UpdateComboBox 417 | 600 tutor_15_01_q1_i1 UpdateRadioButton 418 | 55 _m3_assess_q1_i1 UpdateComboBox 419 | 1052 tutor_15_11_q4_i1 UpdateRadioButton 420 | 423 tutor_11_03_q1_input1 UpdateComboBox 421 | 474 tutor_11_24_q3_i1 UpdateRadioButton 422 | 784 tutor_08_01_q3_D UpdateComboBox 423 | 1167 tutor_21_1_1_q1_A UpdateComboBox 424 | 584 tutor_13_02_q3_C UpdateRadioButton 425 | 1063 tutor_15_11_q12_i1 UpdateRadioButton 426 | 675 tutor_17_09_qf1_i1 UpdateRadioButton 427 | 885 tutor_22_02_q2_B UpdateComboBox 428 | 1095 tutor_15_14_q11b_i1 UpdateRadioButton 429 | 541 tutor_12_10_q2_2_B2 UpdateRadioButton 430 | 1200 tutor_20_4_4_q1_A UpdateComboBox 431 | 75 _m1_tutor1_q3_A UpdateRadioButton 432 | 319 tutor_07_21_q1_A UpdateComboBox 433 | 131 tutor_05_03_q6_i6 UpdateComboBox 434 | 1205 tutor_20_3_4_q3_C UpdateNumberField 435 | 664 tutor_17_08_q12_i1 UpdateRadioButton 436 | 1171 tutor_21_4_5_q1_A UpdateRadioButton 437 | 222 _m5_assess_q2_i4 UpdateNumberField 438 | 1035 tutor_12_10_q4_2_D2 UpdateRadioButton 439 | 1017 tutor_08_14_q1_A UpdateShortAnswer 440 | 676 tutor_17_09_qg1_i1 UpdateRadioButton 441 | 164 tutor_05_03_q12_K UpdateComboBox 442 | 242 tutor_6_06_q1_A UpdateComboBox 443 | 471 tutor_11_23_q4_i1 UpdateRadioButton 444 | 1141 tutor_08_18_q3_C UpdateRadioButton 445 | 1124 tutor_04_04_q2_B UpdateNumberField 446 | 618 tutor_15_06_q4_A UpdateComboBox 447 | 185 tutor_05_07_q2_i2 UpdateComboBox 448 | 299 tutor_7_14_q2_B UpdateComboBox 449 | 573 tutor_12_18_q7_G UpdateRadioButton 450 | 535 tutor_12_10_q1_4_A4 UpdateRadioButton 451 | 422 tutor_11_02_q4_i1 UpdateRadioButton 452 | 1169 tutor_21_2_1_q2_B UpdateNumberField 453 | 576 _m12_assess_q2_i2 UpdateComboBox 454 | 962 tutor_20_2_4_q1_A UpdateComboBox 455 | 1060 tutor_15_11_q9_i1 UpdateRadioButton 456 | 642 tutor_17_05_q3_i3 UpdateHotspotSingle 457 | 635 tutor_17_03_q3_i3 UpdateHotspotSingle 458 | 781 tutor_08_01_q3_A UpdateComboBox 459 | 325 tutor_07_22_q2_B UpdateComboBox 460 | 463 tutor_11_17_q3_i1 UpdateRadioButton 461 | 838 tutor_12_21_q7_G UpdateRadioButton 462 | 910 tutor_22_08_q6_F UpdateRadioButton 463 | 825 tutor_12_13_q3_C UpdateRadioButton 464 | 415 _m10_assess_q1_i6 UpdateComboBox 465 | 621 tutor_15_07_q2_B UpdateRadioButton 466 | 789 tutor_08_03_q3_C UpdateHotspotSingle 467 | 1188 tutor_08_24_q1_A UpdateNumberField 468 | 120 tutor_04_13_q1_B UpdateComboBox 469 | 452 tutor_11_10_q6_input6 UpdateComboBox 470 | 322 tutor_07_21_q3_D UpdateComboBox 471 | 687 tutor_17_09_qf2_i1 UpdateRadioButton 472 | 609 tutor_15_04_q1_i1 UpdateRadioButton 473 | 936 tutor_22_24_q1_A UpdateRadioButton 474 | 834 tutor_12_21_q3_C UpdateComboBox 475 | 1198 tutor_20_4_2_q1_A UpdateNumberField 476 | 503 _m11_assess_q2_i2 UpdateComboBox 477 | 844 tutor_12_22_q6_F UpdateRadioButton 478 | 1191 tutor_21_2_3_q4_D UpdateNumberField 479 | 1143 tutor_08_19_q1_A UpdateRadioButton 480 | 277 tutor_7_02_q3_C UpdateComboBox 481 | 179 tutor_11_01_q2_i1 UpdateRadioButton 482 | 6 _m2_assess_q1_point6i3 UpdateComboBox 483 | 174 _m1_tutor9_q4_i1 UpdateHotspotSingle 484 | 575 _m12_assess_q2_i1 UpdateComboBox 485 | 107 tutor_04_08_q4_D UpdateComboBox 486 | 285 tutor_7_07_q1_A UpdateComboBox 487 | 599 _m14_assess_q1_i6 UpdateComboBox 488 | 66 _m3_assess_q2_i3 UpdateCheckbox 489 | 601 tutor_15_01_q2_i1 UpdateRadioButton 490 | 1064 tutor_15_11_q13_i1 UpdateRadioButton 491 | 163 tutor_05_03_q12_J UpdateComboBox 492 | 86 _m1_tutor13_q4_i1 UpdateHotspotSingle 493 | 465 tutor_11_20_q1_A UpdateComboBox 494 | 982 tutor_08_06_q2_B UpdateComboBox 495 | 466 tutor_11_20_q1_B UpdateComboBox 496 | 823 tutor_12_13_q1_A UpdateRadioButton 497 | 393 _m9_assess_q3_i1 UpdateRadioButton 498 | 1135 tutor_04_15_q2_B UpdateComboBox 499 | 696 tutor_17_09_qd3_i1 UpdateRadioButton 500 | 105 tutor_04_01_q1_A UpdateComboBox 501 | 548 tutor_12_10_q3_1_C1 UpdateRadioButton 502 | 578 _m12_assess_q2_i4 UpdateComboBox 503 | 1129 tutor_04_09_q1_B UpdateComboBox 504 | 92 _m1_assess_q1_sense UpdateHotspotSingle 505 | 1132 tutor_04_12_q1_B UpdateComboBox 506 | 598 _m14_assess_q1_i5 UpdateComboBox 507 | 1056 tutor_15_11_q2_i1 UpdateRadioButton 508 | 446 tutor_11_06_q4_i2 UpdateHotspotSingle 509 | 1164 _m8_assess_part2_q1_i2 UpdateComboBox 510 | 419 tutor_11_02_q1_i1 UpdateRadioButton 511 | 564 tutor_12_17_q2_B UpdateComboBox 512 | 945 tutor_22_27_q4_D UpdateNumberField 513 | 512 tutor_12_03_q1_i1 UpdateHotspotMultiple 514 | 398 _m9_assess_q5_i6 UpdateComboBox 515 | 876 tutor_17_11_q1_i1 UpdateRadioButton 516 | 827 tutor_12_13_q5_E UpdateRadioButton 517 | 263 tutor_6_11b_q2_A UpdateRadioButton 518 | 914 tutor_22_10_q1_A UpdateRadioButton 519 | 753 _m1_tutor8_q1_A UpdateShortAnswer 520 | 906 tutor_22_08_q2_B UpdateRadioButton 521 | 485 tutor_11_27_q7_i1 UpdateRadioButton 522 | 504 _m11_assess_q1_i10 UpdateComboBox 523 | 36 tutor_03_10_q1_A UpdateRadioButton 524 | 508 _m11_assess_q1_i1 UpdateComboBox 525 | 344 _m7_assess_q7_i4 UpdateComboBox 526 | 653 tutor_17_08_q1_i1 UpdateRadioButton 527 | 1062 tutor_15_11_q11_i1 UpdateRadioButton 528 | 959 tutor_20_2_1_q3_C UpdateComboBox 529 | 907 tutor_22_08_q3_C UpdateRadioButton 530 | 139 tutor_05_03_q10_F UpdateComboBox 531 | 23 tutor_03_01_q2_i1 UpdateRadioButton 532 | 1081 tutor_15_14_q8a_i1 UpdateRadioButton 533 | 611 tutor_15_04_q3_i1 UpdateRadioButton 534 | 395 _m9_assess_q7_i4 UpdateComboBox 535 | 310 tutor_07_18_q1_A UpdateRadioButton 536 | 594 _m14_assess_q1_i1 UpdateComboBox 537 | 806 tutor_11_09_q9_input9 UpdateComboBox 538 | 1178 tutor_08_23_q4_D UpdateNumberField 539 | 1070 tutor_15_12_q1_F UpdateComboBox 540 | 552 tutor_12_10_q3_5_C5 UpdateRadioButton 541 | 80 _m1_tutor11_q4_i1 UpdateHotspotSingle 542 | 9 _m2_assess_q1_point7i1 UpdateComboBox 543 | 464 tutor_11_19_q1_input1 UpdateRadioButton 544 | 557 tutor_12_11_q1_A UpdateRadioButton 545 | 818 tutor_12_11_q5_E UpdateRadioButton 546 | 200 tutor_05_12_q4_i4 UpdateRadioButton 547 | 923 tutor_22_21_q3_C UpdateRadioButton 548 | 298 tutor_7_14_q1_A UpdateComboBox 549 | 605 tutor_15_02_q1_D UpdateComboBox 550 | 450 tutor_11_10_q4_input4 UpdateComboBox 551 | 954 _m1_tutor11_q3_i1 UpdateHotspotSingle 552 | 287 tutor_7_08a_q2_B UpdateComboBox 553 | 1051 tutor_12_20_q2_A UpdateRadioButton 554 | 859 tutor_15_08_q4_i1 UpdateRadioButton 555 | 459 tutor_11_16_q1_D UpdateComboBox 556 | 501 _m11_assess_q1_i11 UpdateComboBox 557 | 1176 tutor_08_23_q2_B UpdateNumberField 558 | 898 tutor_22_07_q1_A UpdateRadioButton 559 | 742 _m1_tutor2_q2_A UpdateRadioButton 560 | 1004 tutor_08_09_q1_A UpdateRadioButton 561 | 149 tutor_04_05_q4_G UpdateHotspotSingle 562 | 905 tutor_22_08_q1_A UpdateRadioButton 563 | 424 tutor_11_03_q2_input2 UpdateComboBox 564 | 365 tutor_09_03_q1_A UpdateComboBox 565 | 1162 _m8_assess_part2_q1_i3 UpdateComboBox 566 | 1061 tutor_15_11_q10_i1 UpdateRadioButton 567 | 651 tutor_17_06_q5_i5 UpdateHotspotSingle 568 | 1028 tutor_11_28_q3_C UpdateComboBox 569 | 1048 tutor_12_17_q11_K UpdateComboBox 570 | 1216 tutor_21_3_2_q1_A UpdateNumberField 571 | 543 tutor_12_10_q2_4_B4 UpdateRadioButton 572 | 938 tutor_22_25_q2_B UpdateNumberField 573 | 1010 tutor_08_10_q2_D UpdateComboBox 574 | 840 tutor_12_22_q2_B UpdateRadioButton 575 | 802 tutor_11_09_q5_input5 UpdateComboBox 576 | 309 tutor_07_17_q2_B UpdateComboBox 577 | 69 _m3_assess_q7_i1 UpdateNumberField 578 | 908 tutor_22_08_q4_D UpdateRadioButton 579 | 540 tutor_12_10_q2_1_B1 UpdateRadioButton 580 | 445 tutor_11_06_q3_i1 UpdateHotspotSingle 581 | 490 _m11_assess_q1_i15 UpdateComboBox 582 | 74 _m1_tutor1_q4_A UpdateRadioButton 583 | 592 tutor_13_06_q2_E UpdateRadioButton 584 | 741 _m1_tutor2_q1_A UpdateRadioButton 585 | 111 tutor_04_10_q1_A UpdateComboBox 586 | 877 tutor_17_11_q2_i1 UpdateRadioButton 587 | 401 _m9_assess_q4_i1 UpdateRadioButton 588 | 778 tutor_6_05_q2_C UpdateComboBox 589 | 890 tutor_22_05_q2_B UpdateComboBox 590 | 345 _m7_assess_q3_A UpdateRadioButton 591 | 811 tutor_12_01_q5_E UpdateRadioButton 592 | 867 tutor_15_09_q1_i1 UpdateRadioButton 593 | 800 tutor_11_09_q3_input3 UpdateComboBox 594 | 426 tutor_11_03_q4_input4 UpdateComboBox 595 | 878 tutor_17_11_q3_i1 UpdateRadioButton 596 | 17 _m2_assess_q1_point5i2 UpdateComboBox 597 | 761 _m1_tutor16_q3_i1 UpdateHotspotSingle 598 | 177 _m1_tutor10_q3_i1 UpdateHotspotSingle 599 | 810 tutor_12_01_q4_D UpdateRadioButton 600 | 997 tutor_07_27_q2_B UpdateComboBox 601 | 871 tutor_15_10_q2_i1 UpdateRadioButton 602 | 595 _m14_assess_q1_i2 UpdateComboBox 603 | 846 tutor_12_22_q8_H UpdateRadioButton 604 | 848 tutor_12_24_q1_i1 UpdateHotspotMultiple 605 | 168 _m5_assess_q1_i2 UpdateNumberField 606 | 733 _m18_assess_q1_i1 UpdateComboBox 607 | 337 tutor_07_24_q3_E UpdateComboBox 608 | 1179 tutor_08_23_q3_C UpdateNumberField 609 | 519 tutor_12_05_q6_F UpdateRadioButton 610 | 1082 tutor_15_14_q9a_i1 UpdateRadioButton 611 | 773 _m4_assess_q3_i1 UpdateNumberField 612 | 115 tutor_04_10_q3_E UpdateComboBox 613 | 1127 tutor_04_09_q1_A UpdateComboBox 614 | 1110 tutor_22_16_q1_A UpdateNumberField 615 | 1075 tutor_15_14_q2a_i1 UpdateRadioButton 616 | 1012 tutor_08_11_q1_B UpdateComboBox 617 | 554 tutor_12_10_q3_7_C7 UpdateComboBox 618 | 1088 tutor_15_14_q4b_i1 UpdateRadioButton 619 | 530 tutor_12_07_q1_i1 UpdateHotspotMultiple 620 | 638 tutor_17_03_q6_i6 UpdateHotspotSingle 621 | 53 tutor_03_15_q3_q3-input UpdateRadioButton 622 | 121 tutor_04_13_q1_C UpdateComboBox 623 | 887 tutor_22_04_q1_A UpdateRadioButton 624 | 899 tutor_22_07_q2_B UpdateRadioButton 625 | 330 tutor_07_23_q3_E UpdateComboBox 626 | 701 tutor_17_09_qj3_i1 UpdateRadioButton 627 | 375 tutor_09_15_q1_B UpdateShortAnswer 628 | 327 tutor_07_23_q1_B UpdateComboBox 629 | 926 tutor_22_21_q6_F UpdateNumberField 630 | 444 tutor_11_06_q2_input2 UpdateComboBox 631 | 1172 _m21_assess_q2_B UpdateComboBox 632 | 779 tutor_08_01_q1_F UpdateComboBox 633 | 1091 tutor_15_14_q7b_i1 UpdateRadioButton 634 | 129 tutor_05_03_q4_i4 UpdateHotspotSingle 635 | 410 _m10_assess_q1_i1 UpdateComboBox 636 | 1180 tutor_22_22_q4_D UpdateRadioButton 637 | 513 tutor_12_04_q1_i1 UpdateHotspotMultiple 638 | 654 tutor_17_08_q2_i1 UpdateRadioButton 639 | 240 tutor_6_05_q3_B UpdateComboBox 640 | 746 _m1_tutor2_q6_A UpdateRadioButton 641 | 970 tutor_20_3_0_q4_D UpdateRadioButton 642 | 1201 tutor_08_24_q2_B UpdateNumberField 643 | 103 _m1_assess_q5_label UpdateHotspotSingle 644 | 224 _m5_assess_q3_i1 UpdateNumberField 645 | 88 _m1_tutor14_q2_i1 UpdateHotspotSingle 646 | 481 tutor_11_27_q3_i1 UpdateRadioButton 647 | 60 _m3_assess_q1_i3 UpdateComboBox 648 | 357 _m8_assess_q4_i1 UpdateComboBox 649 | 390 _m9_assess_q5_i4 UpdateComboBox 650 | 1185 tutor_21_3_1_q1_A UpdateNumberField 651 | 252 tutor_6_07_q2_C UpdateComboBox 652 | 634 tutor_17_03_q2_i2 UpdateHotspotSingle 653 | 416 _m10_assess_q1_i7 UpdateComboBox 654 | 514 tutor_12_05_q1_A UpdateRadioButton 655 | 625 _m15_assess_q1_i1 UpdateComboBox 656 | 973 tutor_20_3_2_q3_A UpdateComboBox 657 | 166 tutor_05_03_q12_M UpdateComboBox 658 | 620 tutor_15_07_q1_A UpdateRadioButton 659 | 606 tutor_15_03_q1_i1 UpdateRadioButton 660 | 37 tutor_03_11_q1_q1-input UpdateRadioButton 661 | 153 _m4_assess_q7_i1 UpdateNumberField 662 | 241 tutor_6_05_q3_C UpdateComboBox 663 | 280 tutor_7_03_q3_C UpdateComboBox 664 | 731 tutor_18_04_q1_i1 UpdateRadioButton 665 | 684 tutor_17_09_qc2_i1 UpdateRadioButton 666 | 1140 tutor_08_18_q2_B UpdateRadioButton 667 | 558 tutor_12_15_q1_A UpdateRadioButton 668 | 752 _m1_tutor7_q1_A UpdateShortAnswer 669 | 1065 tutor_15_12_q1_A UpdateComboBox 670 | 435 tutor_11_04_q5_input5 UpdateComboBox 671 | 893 tutor_22_06_q3_C UpdateRadioButton 672 | 156 _m4_assess_q1_i2 UpdateNumberField 673 | 969 tutor_20_3_0_q3_C UpdateRadioButton 674 | 852 tutor_15_04_q5_i1 UpdateRadioButton 675 | 678 tutor_17_09_qi1_i1 UpdateRadioButton 676 | 946 _m22_assess_q1_i1 UpdateRadioButton 677 | 451 tutor_11_10_q5_input5 UpdateComboBox 678 | 716 _m17_assess_q3_i3 UpdateComboBox 679 | 608 tutor_15_03_q3_i1 UpdateRadioButton 680 | 259 tutor_6_10_q3_A UpdateRadioButton 681 | 816 tutor_12_11_q3_C UpdateRadioButton 682 | 963 tutor_20_2_4_q2_B UpdateNumberField 683 | 391 _m9_assess_q7_i3 UpdateComboBox 684 | 630 _m15_assess_q1_i6 UpdateComboBox 685 | 1181 tutor_22_22_q5_E UpdateRadioButton 686 | 448 tutor_11_10_q2_input2 UpdateComboBox 687 | 497 _m11_assess_q3_i2 UpdateRadioButton 688 | 507 _m11_assess_q1_i9 UpdateComboBox 689 | 109 tutor_04_08_q2_B UpdateNumberField 690 | 58 _m3_assess_q1_i2 UpdateComboBox 691 | 266 _m6_assess_q7_i1 UpdateComboBox 692 | 1024 tutor_11_12_q2_A UpdateShortAnswer 693 | 882 tutor_22_01_q4_D UpdateRadioButton 694 | 25 tutor_03_02_q1_i1 UpdateRadioButton 695 | 683 tutor_17_09_qb2_i1 UpdateRadioButton 696 | 1037 tutor_12_10_q4_4_D4 UpdateRadioButton 697 | 468 tutor_11_23_q1_i1 UpdateRadioButton 698 | 517 tutor_12_05_q4_D UpdateRadioButton 699 | 917 tutor_22_11_q2_B UpdateNumberField 700 | 819 tutor_12_11_q6_F UpdateRadioButton 701 | 542 tutor_12_10_q2_3_B3 UpdateRadioButton 702 | 16 _m2_assess_q1_point2i3 UpdateComboBox 703 | 348 _m7_assess_q8_i1 UpdateNumberField 704 | 1032 tutor_11_30_q3_B UpdateComboBox 705 | 884 tutor_22_02_q1_A UpdateRadioButton 706 | 487 tutor_11_27_q9_i1 UpdateRadioButton 707 | 536 tutor_12_10_q1_5_A5 UpdateRadioButton 708 | 894 tutor_22_06_q4_D UpdateRadioButton 709 | 306 tutor_7_16_q7_A UpdateComboBox 710 | 1011 tutor_08_11_q1_A UpdateComboBox 711 | 467 tutor_11_21_q1_A UpdateComboBox 712 | 90 _m1_assess_q1_point UpdateHotspotSingle 713 | 739 _m18_assess_q2_i4 UpdateComboBox 714 | 332 tutor_07_23_q4_i1 UpdateShortAnswer 715 | 1145 tutor_08_20_q3_C UpdateRadioButton 716 | 498 _m11_assess_q1_i12 UpdateComboBox 717 | 1023 tutor_11_12_q1_A UpdateComboBox 718 | 1187 tutor_07_26_q2_B UpdateComboBox 719 | 211 tutor_05_18_q3_i3 UpdateComboBox 720 | 1087 tutor_15_14_q3b_i1 UpdateRadioButton 721 | 389 _m9_assess_q2_i2 UpdateRadioButton 722 | 1117 tutor_22_19_q1_A UpdateNumberField 723 | 1163 _m8_assess_part2_q4_i2 UpdateNumberField 724 | 180 tutor_11_01_q3_i1 UpdateRadioButton 725 | 580 _m12_assess_q2_i6 UpdateComboBox 726 | 123 tutor_04_13_q2_E UpdateComboBox 727 | 117 tutor_04_10_q3_G UpdateComboBox 728 | 453 tutor_11_10_q7_input7 UpdateComboBox 729 | 1197 tutor_20_4_1_q1_A UpdateNumberField 730 | 690 tutor_17_09_qi2_i1 UpdateRadioButton 731 | 960 tutor_20_2_2_q1_A UpdateComboBox 732 | 528 tutor_12_06_q7_G UpdateRadioButton 733 | 537 tutor_12_10_q1_6_A6 UpdateRadioButton 734 | 4 _m2_assess_q1_point1i2 UpdateComboBox 735 | 26 tutor_03_02_q2_i1 UpdateRadioButton 736 | 455 tutor_11_14_q1_input1 UpdateComboBox 737 | 500 _m11_assess_q3_i1 UpdateRadioButton 738 | 210 tutor_05_18_q2_i2 UpdateComboBox 739 | 886 tutor_22_03_q1_A UpdateComboBox 740 | 574 _m12_assess_q1_i1 UpdateHotspotMultiple 741 | 872 tutor_17_07_q1_i1 UpdateRadioButton 742 | 278 tutor_7_03_q1_A UpdateComboBox 743 | 1165 _m8_assess_part2_q4_i1 UpdateNumberField 744 | 65 _m3_assess_q5_i1 UpdateComboBox 745 | 904 tutor_22_07_q7_G UpdateRadioButton 746 | 193 tutor_05_07_q10_i10 UpdateComboBox 747 | 978 _m20_assess_q3_C UpdateNumberField 748 | 175 _m1_tutor10_q1_i1 UpdateHotspotSingle 749 | 964 tutor_20_2_5_q1_A UpdateRadioButton 750 | 628 _m15_assess_q1_i4 UpdateComboBox 751 | 748 _m1_tutor4_q2_i1 UpdateHotspotSingle 752 | 441 tutor_11_05_q3_i1 UpdateHotspotSingle 753 | 703 tutor_17_10_q2_i1 UpdateRadioButton 754 | 990 tutor_05_19_q1_A UpdateNumberField 755 | 187 tutor_05_07_q4_i4 UpdateRadioButton 756 | 764 _m1_tutor18_q1_i1 UpdateHotspotSingle 757 | 385 _m9_assess_q2_i1 UpdateRadioButton 758 | 254 tutor_6_09_q1_A UpdateComboBox 759 | 534 tutor_12_10_q1_3_A3 UpdateRadioButton 760 | 245 tutor_6_06_q4_A UpdateComboBox 761 | 496 _m11_assess_q1_i5 UpdateComboBox 762 | 192 tutor_05_07_q9_i9 UpdateRadioButton 763 | 727 tutor_18_02_q5_i3 UpdateHotspotSingle 764 | 1193 tutor_11_24_q5_i1 UpdateHotspotSingle 765 | 950 _m22_assess_q5_i1 UpdateRadioButton 766 | 1006 tutor_08_09_q2_B UpdateRadioButton 767 | 7 _m2_assess_q1_point1i3 UpdateComboBox 768 | 87 _m1_tutor14_q1_i1 UpdateHotspotSingle 769 | 692 tutor_17_09_qk2_i1 UpdateRadioButton 770 | 931 tutor_22_23_q2_B UpdateRadioButton 771 | 566 tutor_12_17_q4_D UpdateComboBox 772 | 347 _m7_assess_q4_A UpdateRadioButton 773 | 1093 tutor_15_14_q9b_i1 UpdateRadioButton 774 | 1199 tutor_20_4_3_q1_A UpdateRadioButton 775 | 203 tutor_05_12_q2_i2 UpdateRadioButton 776 | 1103 tutor_15_14_q8c_i1 UpdateRadioButton 777 | 671 tutor_17_09_qb1_i1 UpdateRadioButton 778 | 184 tutor_05_07_q1_i1 UpdateComboBox 779 | 586 tutor_13_02_q5_E UpdateRadioButton 780 | 830 tutor_12_13_q8_F UpdateRadioButton 781 | 267 _m6_assess_q6_i1 UpdateRadioButton 782 | 402 _m9_assess_q5_i7 UpdateComboBox 783 | 1098 tutor_15_14_q3c_i1 UpdateRadioButton 784 | 148 tutor_04_05_q3_F UpdateRadioButton 785 | 1005 tutor_08_09_q3_C UpdateComboBox 786 | 694 tutor_17_09_qb3_i1 UpdateRadioButton 787 | 900 tutor_22_07_q3_C UpdateRadioButton 788 | 1150 tutor_08_21_q2_C UpdateNumberField 789 | 822 tutor_12_12_q1_A UpdateComboBox 790 | 270 _m6_assess_q3_i1 UpdateRadioButton 791 | 1121 tutor_04_03_q1_A UpdateComboBox 792 | 1210 tutor_21_2_3_q3_C UpdateNumberField 793 | 146 tutor_04_05_q1_D UpdateComboBox 794 | 539 tutor_12_10_q1_8_A8 UpdateRadioButton 795 | 199 tutor_05_12_q1_i1 UpdateComboBox 796 | 652 tutor_17_06_q6_i6 UpdateHotspotSingle 797 | 296 tutor_7_12_q1_A UpdateComboBox 798 | 691 tutor_17_09_qj2_i1 UpdateRadioButton 799 | 262 tutor_6_11b_q1_A UpdateRadioButton 800 | 363 tutor_09_01_q1_A UpdateComboBox 801 | 927 tutor_22_21_q7_G UpdateRadioButton 802 | 839 tutor_12_22_q1_A UpdateRadioButton 803 | 798 tutor_11_09_q1_input1 UpdateComboBox 804 | 170 _m1_tutor3_q1_A UpdateShortAnswer 805 | 682 tutor_17_09_qa2_i1 UpdateRadioButton 806 | 1100 tutor_15_14_q5c_i1 UpdateRadioButton 807 | 83 _m1_tutor12_q4_i1 UpdateHotspotSingle 808 | 889 tutor_22_05_q1_A UpdateRadioButton 809 | 649 tutor_17_06_q3_i3 UpdateHotspotSingle 810 | 769 _m1_tutor19_q2_i1 UpdateHotspotSingle 811 | 27 tutor_03_02_q3_i1 UpdateRadioButton 812 | 1085 tutor_15_14_q1b_i1 UpdateRadioButton 813 | 89 _m1_tutor14_q4_i1 UpdateHotspotSingle 814 | 777 tutor_6_05_q2_B UpdateComboBox 815 | 343 _m7_assess_q2_A UpdateRadioButton 816 | 276 tutor_7_02_q2_B UpdateComboBox 817 | 588 tutor_13_04_q1_D UpdateRadioButton 818 | 708 _m17_assess_q3_i7 UpdateComboBox 819 | 367 tutor_09_05_q1_A UpdateHotspotSingle 820 | 958 tutor_20_2_1_q2_B UpdateComboBox 821 | 154 _m4_assess_q9_i1 UpdateComboBox 822 | 134 tutor_05_03_q10_A UpdateComboBox 823 | 334 tutor_07_24_q1_B UpdateComboBox 824 | 253 tutor_6_08_q1_A UpdateComboBox 825 | 821 tutor_12_11_q8_H UpdateRadioButton 826 | 147 tutor_04_05_q2_E UpdateRadioButton 827 | 612 tutor_15_05_q1_A UpdateComboBox 828 | 983 tutor_08_06_q2_C UpdateComboBox 829 | 251 tutor_6_07_q2_B UpdateComboBox 830 | 975 tutor_20_3_2_q5_A UpdateComboBox 831 | 342 _m7_assess_q7_i3 UpdateComboBox 832 | 941 tutor_22_26_q1_A UpdateRadioButton 833 | 873 tutor_17_07_q2_i2 UpdateRadioButton 834 | 1144 tutor_08_19_q2_B UpdateRadioButton 835 | 314 tutor_07_19_q2_C UpdateComboBox 836 | 302 tutor_7_16_q3_A UpdateComboBox 837 | 820 tutor_12_11_q7_G UpdateRadioButton 838 | 3 _m2_assess_q1_point6i2 UpdateComboBox 839 | 430 tutor_11_03_q8_input8 UpdateComboBox 840 | 195 tutor_05_07_q11_B UpdateComboBox 841 | 1209 tutor_20_4_4_q2_B UpdateComboBox 842 | 71 _m3_assess_q8_i1 UpdateComboBox 843 | 979 _m20_assess_q2_B UpdateNumberField 844 | 796 tutor_11_08_q2_i2 UpdateHotspotSingle 845 | 940 tutor_22_25_q4_D UpdateNumberField 846 | 968 tutor_20_3_0_q2_B UpdateRadioButton 847 | 1076 tutor_15_14_q3a_i1 UpdateRadioButton 848 | 1019 tutor_08_16_q1_A UpdateShortAnswer 849 | 912 tutor_22_09_q2_B UpdateRadioButton 850 | 62 _m3_assess_q2_i1 UpdateCheckbox 851 | 436 tutor_11_04_q6_input6 UpdateComboBox 852 | 1207 tutor_20_3_5_q1_A UpdateNumberField 853 | 939 tutor_22_25_q3_C UpdateRadioButton 854 | 454 tutor_11_13_q1_input1 UpdateComboBox 855 | 114 tutor_04_10_q3_D UpdateComboBox 856 | 854 tutor_15_04_q7_i1 UpdateRadioButton 857 | 356 _m8_assess_q4_i2 UpdateComboBox 858 | 223 _m5_assess_q2_i5 UpdateNumberField 859 | 801 tutor_11_09_q4_input4 UpdateComboBox 860 | 313 tutor_07_19_q2_D UpdateComboBox 861 | 1219 tutor_21_3_3_q1_A UpdateNumberField 862 | 572 tutor_12_18_q6_F UpdateRadioButton 863 | 202 tutor_05_12_q3_i3 UpdateRadioButton 864 | 20 _m2_assess_q1_point3i2 UpdateComboBox 865 | 987 tutor_04_19_q1_A UpdateRadioButton 866 | 284 tutor_7_06_q2_B UpdateComboBox 867 | 1108 tutor_22_13_q1_A UpdateRadioButton 868 | 5 _m2_assess_q1_point4i1 UpdateComboBox 869 | 596 _m14_assess_q1_i3 UpdateComboBox 870 | 525 tutor_12_06_q4_D UpdateRadioButton 871 | 1195 tutor_11_24_q7_i1 UpdateRadioButton 872 | 412 _m10_assess_q1_i3 UpdateComboBox 873 | 1157 _m8_assess_part2_q3_i1 UpdateNumberField 874 | 272 _m6_assess_q2_i1 UpdateRadioButton 875 | 369 tutor_09_08_q1_i1 UpdateHotspotSingle 876 | 408 _m9_assess_q6_i1 UpdateRadioButton 877 | 320 tutor_07_21_q2_B UpdateComboBox 878 | 328 tutor_07_23_q2_C UpdateComboBox 879 | 1086 tutor_15_14_q2b_i1 UpdateRadioButton 880 | 658 tutor_17_08_q6_i1 UpdateRadioButton 881 | 847 tutor_12_23_q1_i1 UpdateHotspotMultiple 882 | 875 tutor_17_07_q4_i5 UpdateRadioButton 883 | 1118 tutor_22_20_q1_A UpdateNumberField 884 | 300 tutor_7_16_q1_A UpdateComboBox 885 | 258 tutor_6_10_q2_A UpdateRadioButton 886 | 909 tutor_22_08_q5_E UpdateRadioButton 887 | 1186 tutor_08_08_q2_A UpdateComboBox 888 | 19 _m2_assess_q1_point5i3 UpdateComboBox 889 | 555 tutor_12_10_q3_8_C8 UpdateRadioButton 890 | 986 tutor_04_18_q1_A UpdateRadioButton 891 | 725 tutor_18_02_q3_i1 UpdateHotspotSingle 892 | 832 tutor_12_21_q1_A UpdateComboBox 893 | 247 tutor_6_07_q1_A UpdateComboBox 894 | 380 tutor_09_20_q1_B UpdateShortAnswer 895 | 734 _m18_assess_q1_i2 UpdateComboBox 896 | 527 tutor_12_06_q5_E UpdateRadioButton 897 | 544 tutor_12_10_q2_5_B5 UpdateRadioButton 898 | 56 _m3_assess_q3_i2 UpdateCheckbox 899 | 808 tutor_11_22_q1_B UpdateComboBox 900 | 758 _m1_tutor15_q4_i1 UpdateHotspotSingle 901 | 1054 tutor_15_11_q6_i1 UpdateRadioButton 902 | 85 _m1_tutor13_q2_i1 UpdateHotspotSingle 903 | 99 _m1_assess_q5_point UpdateHotspotSingle 904 | 181 tutor_11_01_q1_i1 UpdateRadioButton 905 | 364 tutor_09_01_q2_B UpdateComboBox 906 | 1134 tutor_04_15_q2_A UpdateComboBox 907 | 289 tutor_7_08b_q1_i1 UpdateRadioButton 908 | 449 tutor_11_10_q3_input3 UpdateComboBox 909 | 879 tutor_22_01_q1_A UpdateRadioButton 910 | 799 tutor_11_09_q2_input2 UpdateComboBox 911 | 672 tutor_17_09_qc1_i1 UpdateRadioButton 912 | 947 _m22_assess_q2_i1 UpdateRadioButton 913 | 1113 tutor_22_16_q4_D UpdateRadioButton 914 | 144 tutor_04_05_q1_B UpdateComboBox 915 | 8 _m2_assess_q1_point4i2 UpdateComboBox 916 | 420 tutor_11_02_q2_i1 UpdateRadioButton 917 | 171 _m1_tutor9_q1_i1 UpdateHotspotSingle 918 | 354 _m7_assess_q7_i2 UpdateComboBox 919 | 79 _m1_tutor11_q2_i1 UpdateHotspotSingle 920 | 771 _m1_tutor19_q4_i1 UpdateHotspotSingle 921 | 994 tutor_07_25_q3_D UpdateComboBox 922 | 1194 tutor_11_24_q6_i1 UpdateRadioButton 923 | 239 tutor_6_05_q3_A UpdateComboBox 924 | 897 tutor_22_06_q7_G UpdateRadioButton 925 | 143 tutor_04_05_q1_A UpdateComboBox 926 | 989 tutor_05_19_q3_C UpdateNumberField 927 | 145 tutor_04_05_q1_C UpdateComboBox 928 | 928 tutor_22_21_q8_H UpdateRadioButton 929 | 279 tutor_7_03_q2_B UpdateComboBox 930 | 216 _m5_assess_q3_i3 UpdateNumberField 931 | 1079 tutor_15_14_q6a_i1 UpdateRadioButton 932 | 403 _m9_assess_q8_i1 UpdateComboBox 933 | 151 _m4_assess_q4_direction UpdateHotspotSingle 934 | 383 _m9_assess_q7_i1 UpdateComboBox 935 | 378 tutor_09_19_q2_B UpdateHotspotSingle 936 | 35 tutor_03_09_q1_A UpdateRadioButton 937 | 81 _m1_tutor12_q1_i1 UpdateHotspotSingle 938 | 54 tutor_03_15_q4_q4-input UpdateRadioButton 939 | 165 tutor_05_03_q12_L UpdateComboBox 940 | 208 tutor_05_17_q4_i4 UpdateComboBox 941 | 1018 tutor_08_15_q1_A UpdateShortAnswer 942 | 63 _m3_assess_q4_i1 UpdateNumberField 943 | 613 tutor_15_05_q1_B UpdateComboBox 944 | 1122 tutor_04_03_q2_B UpdateComboBox 945 | 718 _m17_assess_q3_i2 UpdateComboBox 946 | 303 tutor_7_16_q4_B UpdateComboBox 947 | 759 _m1_tutor16_q1_i1 UpdateHotspotSingle 948 | 865 tutor_15_08_q10_i1 UpdateRadioButton 949 | 97 _m1_assess_q4_label UpdateHotspotSingle 950 | 563 tutor_12_17_q1_A UpdateComboBox 951 | 230 tutor_6_04_q1_A UpdateComboBox 952 | 556 tutor_12_11_q2_B UpdateRadioButton 953 | 141 tutor_04_02_q1_A UpdateNumberField 954 | 1038 tutor_12_10_q4_5_D5 UpdateRadioButton 955 | 807 tutor_11_18_q1_input1 UpdateRadioButton 956 | 11 _m2_assess_q1_point4i3 UpdateComboBox 957 | 386 _m9_assess_q5_i3 UpdateComboBox 958 | 645 tutor_17_05_q5_i5 UpdateHotspotSingle 959 | 261 tutor_6_11a_q1_A UpdateShortAnswer 960 | 583 tutor_13_02_q2_A UpdateComboBox 961 | 937 tutor_22_25_q1_A UpdateNumberField 962 | 549 tutor_12_10_q3_2_C2 UpdateRadioButton 963 | 50 tutor_03_14_q2_q2-input UpdateRadioButton 964 | 273 _m6_assess_q8_i1 UpdateComboBox 965 | 1096 tutor_15_14_q1c_i1 UpdateRadioButton 966 | 714 _m17_assess_q3_i4 UpdateComboBox 967 | 1040 tutor_12_10_q4_7_D7 UpdateComboBox 968 | 493 _m11_assess_q1_i6 UpdateComboBox 969 | 526 tutor_12_06_q6_F UpdateRadioButton 970 | 953 _m22_assess_q8_i1 UpdateRadioButton 971 | 1044 tutor_12_17_q7_G UpdateRadioButton 972 | 372 tutor_09_12_q1_B UpdateShortAnswer 973 | 274 _m6_assess_q1_i1 UpdateRadioButton 974 | 813 tutor_12_01_q7_G UpdateRadioButton 975 | 78 _m1_tutor11_q1_i1 UpdateHotspotSingle 976 | 122 tutor_04_13_q2_D UpdateComboBox 977 | 760 _m1_tutor16_q2_i1 UpdateHotspotSingle 978 | 1137 tutor_08_17_q3_C UpdateRadioButton 979 | 1174 tutor_08_22_q1_A UpdateNumberField 980 | 400 _m9_assess_q9_i4 UpdateComboBox 981 | 72 _m1_tutor1_q1_A UpdateRadioButton 982 | 952 _m22_assess_q7_i1 UpdateRadioButton 983 | 740 _m18_assess_q2_i5 UpdateComboBox 984 | 323 tutor_07_22_q1_A UpdateComboBox 985 | 57 _m3_assess_q9_i1 UpdateComboBox 986 | 376 tutor_09_18_q1_i1 UpdateHotspotSingle 987 | 130 tutor_05_03_q5_i5 UpdateComboBox 988 | 1142 tutor_08_19_q3_C UpdateRadioButton 989 | 755 _m1_tutor15_q1_i1 UpdateHotspotSingle 990 | 551 tutor_12_10_q3_4_C4 UpdateRadioButton 991 | 680 tutor_17_09_qk1_i1 UpdateRadioButton 992 | 776 tutor_05_11_q1_A UpdateShortAnswer 993 | 984 tutor_04_15_q1_C UpdateComboBox 994 | 641 tutor_17_04_q1_i1 UpdateHotspotSingle 995 | 666 tutor_17_08_q14_i1 UpdateRadioButton 996 | 790 tutor_08_03_q4_D UpdateComboBox 997 | 754 _m1_tutor13_q3_i1 UpdateHotspotSingle 998 | 1202 tutor_20_3_3_q2_B UpdateNumberField 999 | 350 _m7_assess_q8_i2 UpdateNumberField 1000 | 774 _m4_assess_q8_i1 UpdateNumberField 1001 | 1166 _m8_assess_part2_q1_i1 UpdateComboBox 1002 | 915 tutor_22_10_q2_B UpdateRadioButton 1003 | 255 tutor_6_09_q2_A UpdateComboBox 1004 | 243 tutor_6_06_q2_A UpdateComboBox 1005 | 152 _m4_assess_q6_i1 UpdateComboBox 1006 | 112 tutor_04_10_q2_B UpdateComboBox 1007 | 358 _m8_assess_q3_i2 UpdateNumberField 1008 | 745 _m1_tutor2_q5_A UpdateRadioButton 1009 | 661 tutor_17_08_q9_i1 UpdateRadioButton 1010 | 326 tutor_07_23_q1_A UpdateComboBox 1011 | 639 tutor_17_03_q7_i7 UpdateRadioButton 1012 | 388 _m9_assess_q9_i1 UpdateComboBox 1013 | 874 tutor_17_07_q3_i3 UpdateRadioButton 1014 | 236 tutor_6_05_q1_B UpdateComboBox 1015 | 209 tutor_05_18_q1_i1 UpdateComboBox 1016 | 1022 tutor_11_11_q3_input3 UpdateComboBox 1017 | 49 tutor_03_14_q1_q1-input UpdateRadioButton 1018 | 659 tutor_17_08_q7_i1 UpdateRadioButton 1019 | 981 tutor_08_06_q1_A UpdateComboBox 1020 | 125 tutor_05_01_q1_q1-input UpdateComboBox 1021 | 724 tutor_18_02_q2_i1 UpdateHotspotMultiple 1022 | 198 tutor_05_09_q1_A UpdateShortAnswer 1023 | 1126 tutor_04_06_q2_i1 UpdateRadioButton 1024 | 381 _m9_assess_q1_i1 UpdateComboBox 1025 | 43 tutor_03_12_q3_q3-input UpdateRadioButton 1026 | 113 tutor_04_10_q3_C UpdateComboBox 1027 | 235 tutor_6_05_q1_A UpdateComboBox 1028 | 1074 tutor_15_14_q1a_i1 UpdateRadioButton 1029 | 604 tutor_15_02_q1_C UpdateComboBox 1030 | 841 tutor_12_22_q3_C UpdateRadioButton 1031 | 353 _m7_assess_q7_i1 UpdateComboBox 1032 | 1138 tutor_08_17_q2_B UpdateRadioButton 1033 | 1154 tutor_08_21_q4_G UpdateNumberField 1034 | 711 _m17_assess_q1_DE2 UpdateRadioButton 1035 | 28 tutor_03_03_q1_A UpdateRadioButton 1036 | 479 tutor_11_27_q1_i1 UpdateRadioButton 1037 | 715 _m17_assess_q1_EC UpdateRadioButton 1038 | 379 tutor_09_19_q3_C UpdateHotspotSingle 1039 | 648 tutor_17_06_q4_i4 UpdateHotspotSingle 1040 | 233 tutor_6_04_q4_A UpdateComboBox 1041 | 1223 tutor_22_13_q3_C UpdateHotspotSingle 1042 | 98 _m1_assess_q2_sense UpdateHotspotSingle 1043 | 336 tutor_07_24_q2_D UpdateComboBox 1044 | 228 tutor_6_03c_q2_B UpdateComboBox 1045 | 788 tutor_08_03_q2_B UpdateComboBox 1046 | 480 tutor_11_27_q2_i1 UpdateRadioButton 1047 | 646 tutor_17_05_q4_i4 UpdateHotspotSingle 1048 | 1077 tutor_15_14_q4a_i1 UpdateRadioButton 1049 | 82 _m1_tutor12_q2_i1 UpdateHotspotSingle 1050 | 1029 tutor_11_29_q1_input1 UpdateRadioButton 1051 | 462 tutor_11_17_q2_A UpdateShortAnswer 1052 | 1116 tutor_22_18_q1_A UpdateNumberField 1053 | 217 _m5_assess_q2_i1 UpdateNumberField 1054 | 1123 tutor_04_04_q1_A UpdateNumberField 1055 | 219 _m5_assess_q2_i2 UpdateNumberField 1056 | 511 tutor_12_02_q1_i1 UpdateHotspotMultiple 1057 | 1115 tutor_22_17_q1_A UpdateNumberField 1058 | 1160 _m8_assess_part2_q2_i1 UpdateComboBox 1059 | 930 tutor_22_23_q1_A UpdateRadioButton 1060 | 826 tutor_12_13_q4_D UpdateRadioButton 1061 | 1002 tutor_08_07_q1_A UpdateComboBox 1062 | 189 tutor_05_07_q6_i6 UpdateRadioButton 1063 | 697 tutor_17_09_qf3_i1 UpdateRadioButton 1064 | 623 tutor_15_07_q4_i1 UpdateRadioButton 1065 | 470 tutor_11_23_q3_i1 UpdateRadioButton 1066 | 919 tutor_22_14_q1_A UpdateRadioButton 1067 | 1159 _m8_assess_part2_q2_i2 UpdateComboBox 1068 | 33 tutor_03_07_q1_A UpdateRadioButton 1069 | 475 tutor_11_24_q4_i1 UpdateRadioButton 1070 | 862 tutor_15_08_q7_i1 UpdateRadioButton 1071 | 833 tutor_12_21_q2_B UpdateComboBox 1072 | 161 tutor_05_03_q12_H UpdateComboBox 1073 | 461 tutor_11_17_q1_A UpdateComboBox 1074 | 286 tutor_7_08a_q1_A UpdateComboBox 1075 | 568 tutor_12_18_q2_B UpdateRadioButton 1076 | 961 tutor_20_2_3_q1_A UpdateComboBox 1077 | 317 tutor_07_20_q3_A UpdateRadioButton 1078 | 157 _m4_assess_q1_i3 UpdateNumberField 1079 | 965 tutor_20_2_6_q1_A UpdateComboBox 1080 | 1212 tutor_21_3_2_q1_B UpdateNumberField 1081 | 45 tutor_03_13_q1_q1-input UpdateRadioButton 1082 | 793 tutor_11_07_q1_A UpdateComboBox 1083 | 405 _m9_assess_q5_i8 UpdateComboBox 1084 | 657 tutor_17_08_q5_i1 UpdateRadioButton 1085 | 610 tutor_15_04_q2_i1 UpdateRadioButton 1086 | 686 tutor_17_09_qe2_i1 UpdateRadioButton 1087 | 1213 tutor_08_25_q2_B UpdateNumberField 1088 | 271 _m6_assess_q8_i2 UpdateComboBox 1089 | 432 tutor_11_04_q2_input2 UpdateComboBox 1090 | 352 _m7_assess_q8_i3 UpdateNumberField 1091 | 297 tutor_7_12_q2_B UpdateComboBox 1092 | 392 _m9_assess_q9_i2 UpdateComboBox 1093 | 411 _m10_assess_q1_i2 UpdateComboBox 1094 | 1057 tutor_15_11_q3_i1 UpdateRadioButton 1095 | 104 _m1_assess_q3_sense UpdateHotspotSingle 1096 | 795 tutor_11_08_q1_i1 UpdateHotspotSingle 1097 | 1053 tutor_15_11_q5_i1 UpdateRadioButton 1098 | 738 _m18_assess_q2_i3 UpdateComboBox 1099 | 688 tutor_17_09_qg2_i1 UpdateRadioButton 1100 | 892 tutor_22_06_q2_B UpdateRadioButton 1101 | 980 _m20_assess_q1_A UpdateRadioButton 1102 | 70 _m3_assess_q3_i1 UpdateCheckbox 1103 | 77 _m1_tutor5_q1_A UpdateShortAnswer 1104 | 559 tutor_12_15_q2_B UpdateRadioButton 1105 | 522 tutor_12_06_q1_A UpdateRadioButton 1106 | 264 tutor_6_11b_q3_B UpdateComboBox 1107 | 616 tutor_15_06_q2_A UpdateRadioButton 1108 | 205 tutor_05_17_q1_i1 UpdateComboBox 1109 | 150 _m4_assess_q2_i1 UpdateNumberField 1110 | 439 tutor_11_05_q1_input1 UpdateComboBox 1111 | 607 tutor_15_03_q2_i1 UpdateRadioButton 1112 | 1206 tutor_20_3_4_q4_D UpdateNumberField 1113 | 265 _m6_assess_q7_i2 UpdateComboBox 1114 | 387 _m9_assess_q7_i2 UpdateComboBox 1115 | 1030 tutor_11_30_q1_input1 UpdateRadioButton 1116 | 440 tutor_11_05_q2_input2 UpdateComboBox 1117 | 615 tutor_15_06_q1_A UpdateRadioButton 1118 | 21 _m2_assess_q1_point6i1 UpdateComboBox 1119 | 138 tutor_05_03_q10_E UpdateComboBox 1120 | 673 tutor_17_09_qd1_i1 UpdateRadioButton 1121 | 629 _m15_assess_q1_i5 UpdateComboBox 1122 | 730 tutor_18_03_q3_i1 UpdateRadioButton 1123 | 96 _m1_assess_q2_point UpdateHotspotSingle 1124 | 15 _m2_assess_q1_point7i3 UpdateComboBox 1125 | 768 _m1_tutor19_q1_i1 UpdateHotspotSingle 1126 | 1120 tutor_22_29_q1_A UpdateRadioButton 1127 | 349 _m7_assess_q5_A UpdateRadioButton 1128 | 943 tutor_22_27_q2_B UpdateNumberField 1129 | 531 tutor_12_08_q1_i1 UpdateHotspotMultiple 1130 | 991 tutor_07_25_q1_A UpdateComboBox 1131 | 351 _m7_assess_q6_A UpdateRadioButton 1132 | 1184 tutor_22_22_q8_H UpdateRadioButton 1133 | 346 _m7_assess_q7_i5 UpdateComboBox 1134 | 1125 tutor_04_06_q1_i1 UpdateRadioButton 1135 | 505 _m11_assess_q1_i2 UpdateComboBox 1136 | 614 tutor_15_05_q1_C UpdateComboBox 1137 | 1153 tutor_08_21_q3_F UpdateNumberField 1138 | 456 tutor_11_15_q1_A UpdateShortAnswer 1139 | 304 tutor_7_16_q5_A UpdateComboBox 1140 | 995 tutor_07_26_q1_A UpdateShortAnswer 1141 | 972 tutor_20_3_2_q2_A UpdateComboBox 1142 | 1008 tutor_08_10_q1_B UpdateComboBox 1143 | 288 tutor_7_08a_q3_C UpdateComboBox 1144 | 2 _m2_assess_q1_point3i3 UpdateComboBox 1145 | 1111 tutor_22_16_q2_B UpdateNumberField 1146 | 562 tutor_12_16_q2_B UpdateRadioButton 1147 | 679 tutor_17_09_qj1_i1 UpdateRadioButton 1148 | 482 tutor_11_27_q4_i1 UpdateRadioButton 1149 | 736 _m18_assess_q2_i1 UpdateComboBox 1150 | 567 tutor_12_18_q1_A UpdateRadioButton 1151 | 281 tutor_7_04_q1_A UpdateComboBox 1152 | 1139 tutor_08_18_q1_A UpdateRadioButton 1153 | 866 tutor_15_08_q11_i1 UpdateRadioButton 1154 | 406 _m9_assess_q8_i2 UpdateComboBox 1155 | 988 tutor_05_19_q2_B UpdateNumberField 1156 | 108 tutor_04_08_q1_A UpdateNumberField 1157 | 137 tutor_05_03_q10_D UpdateComboBox 1158 | 22 tutor_03_01_q1_i1 UpdateRadioButton 1159 | 656 tutor_17_08_q4_i1 UpdateRadioButton 1160 | 316 tutor_07_20_q2_A UpdateRadioButton 1161 | 663 tutor_17_08_q11_i1 UpdateRadioButton 1162 | 942 tutor_22_27_q1_A UpdateNumberField 1163 | 957 tutor_20_2_1_q1_A UpdateComboBox 1164 | 231 tutor_6_04_q2_A UpdateComboBox 1165 | 494 _m11_assess_q3_i3 UpdateRadioButton 1166 | 579 _m12_assess_q2_i5 UpdateComboBox 1167 | 668 tutor_17_08_q16_i1 UpdateRadioButton 1168 | 10 _m2_assess_q1_point2i1 UpdateComboBox 1169 | 747 _m1_tutor4_q1_i1 UpdateHotspotSingle 1170 | 944 tutor_22_27_q3_C UpdateRadioButton 1171 | 597 _m14_assess_q1_i4 UpdateComboBox 1172 | 269 _m6_assess_q4_i1 UpdateRadioButton 1173 | 636 tutor_17_03_q4_i4 UpdateHotspotSingle 1174 | 93 _m1_assess_q4_point UpdateHotspotSingle 1175 | 374 tutor_09_14_q1_B UpdateShortAnswer 1176 | 521 tutor_12_05_q8_H UpdateRadioButton 1177 | 339 tutor_07_24_q5_H UpdateComboBox 1178 | 998 tutor_08_04_q3_C UpdateRadioButton 1179 | 340 tutor_07_24_q4_G UpdateComboBox 1180 | 849 tutor_12_24_q2_A UpdateRadioButton 1181 | 220 _m5_assess_q3_i5 UpdateNumberField 1182 | 106 tutor_04_01_q2_B UpdateComboBox 1183 | 1149 tutor_08_21_q1_B UpdateNumberField 1184 | 837 tutor_12_21_q6_F UpdateRadioButton 1185 | 1046 tutor_12_17_q9_I UpdateComboBox 1186 | 91 _m1_assess_q3_label UpdateHotspotSingle 1187 | 417 _m10_assess_q1_i8 UpdateComboBox 1188 | 48 tutor_03_13_q4_q4-input UpdateRadioButton 1189 | 1092 tutor_15_14_q8b_i1 UpdateRadioButton 1190 | 38 tutor_03_11_q2_q2-input UpdateRadioButton 1191 | 341 _m7_assess_q1_A UpdateRadioButton 1192 | 371 tutor_09_10_q1_i1 UpdateHotspotSingle 1193 | 591 tutor_13_06_q1_D UpdateRadioButton 1194 | 1041 tutor_12_10_q4_8_D8 UpdateRadioButton 1195 | 717 _m17_assess_q1_DF UpdateRadioButton 1196 | 1218 tutor_08_25_q1_A UpdateNumberField 1197 | 1020 tutor_11_11_q1_input1 UpdateComboBox 1198 | 119 tutor_04_13_q1_A UpdateComboBox 1199 | 329 tutor_07_23_q2_D UpdateComboBox 1200 | 443 tutor_11_06_q1_input1 UpdateComboBox 1201 | 1067 tutor_15_12_q1_C UpdateComboBox 1202 | 94 _m1_assess_q1_label UpdateHotspotSingle 1203 | 67 _m3_assess_q6_i1 UpdateComboBox 1204 | 949 _m22_assess_q4_i1 UpdateRadioButton 1205 | 924 tutor_22_21_q4_D UpdateRadioButton 1206 | 1222 tutor_22_10_q3_C UpdateRadioButton 1207 | 197 tutor_05_07_q12_i12 UpdateComboBox 1208 | 469 tutor_11_23_q2_i1 UpdateRadioButton 1209 | 632 tutor_17_02_q2_i2 UpdateHotspotSingle 1210 | 404 _m9_assess_q4_i2 UpdateRadioButton 1211 | 311 tutor_07_19_q1_A UpdateComboBox 1212 | 1190 tutor_21_2_3_q2_B UpdateNumberField 1213 | 1192 tutor_21_2_2_q1_A UpdateNumberField 1214 | 809 tutor_12_01_q3_C UpdateRadioButton 1215 | 377 tutor_09_19_q1_A UpdateHotspotSingle 1216 | 655 tutor_17_08_q3_i1 UpdateRadioButton 1217 | 785 tutor_08_02_q1_A UpdateComboBox 1218 | 1097 tutor_15_14_q2c_i1 UpdateRadioButton 1219 | 1042 tutor_12_17_q5_E UpdateRadioButton 1220 | 186 tutor_05_07_q3_i3 UpdateComboBox 1221 | 196 tutor_05_07_q11_C UpdateComboBox 1222 | 1016 tutor_08_13_q1_A UpdateShortAnswer 1223 | 221 _m5_assess_q2_i3 UpdateNumberField 1224 | 751 _m1_tutor6_q1_A UpdateShortAnswer 1225 | -------------------------------------------------------------------------------- /data/STATICS/STATICS_qid_sid_sname: -------------------------------------------------------------------------------- 1 | qid skillid skillname 2 | 1 1 identify_interaction 3 | 2 2 gravitational_forces 4 | 3 3 represent_interaction_spring 5 | 4 4 represent_interaction_cord 6 | 5 1 identify_interaction 7 | 6 3 represent_interaction_spring 8 | 7 4 represent_interaction_cord 9 | 8 5 simple_step 10 | 9 1 identify_interaction 11 | 10 1 identify_interaction 12 | 11 5 simple_step 13 | 12 4 represent_interaction_cord 14 | 13 3 represent_interaction_spring 15 | 14 1 identify_interaction 16 | 15 4 represent_interaction_cord 17 | 16 3 represent_interaction_spring 18 | 17 2 gravitational_forces 19 | 18 1 identify_interaction 20 | 19 2 gravitational_forces 21 | 20 2 gravitational_forces 22 | 21 1 identify_interaction 23 | 22 6 distinguish_rotation_translation 24 | 23 6 distinguish_rotation_translation 25 | 24 6 distinguish_rotation_translation 26 | 25 6 distinguish_rotation_translation 27 | 26 6 distinguish_rotation_translation 28 | 27 6 distinguish_rotation_translation 29 | 28 7 motion_dependence_on_force 30 | 29 7 motion_dependence_on_force 31 | 30 7 motion_dependence_on_force 32 | 31 8 rotation_sense_of_force 33 | 32 8 rotation_sense_of_force 34 | 33 8 rotation_sense_of_force 35 | 34 8 rotation_sense_of_force 36 | 35 8 rotation_sense_of_force 37 | 36 8 rotation_sense_of_force 38 | 37 9 find_moment_arm 39 | 38 5 simple_step 40 | 39 8 rotation_sense_of_force 41 | 40 10 moment_sign_sense_relation 42 | 41 9 find_moment_arm 43 | 42 5 simple_step 44 | 43 8 rotation_sense_of_force 45 | 44 10 moment_sign_sense_relation 46 | 45 9 find_moment_arm 47 | 46 5 simple_step 48 | 47 8 rotation_sense_of_force 49 | 48 10 moment_sign_sense_relation 50 | 49 9 find_moment_arm 51 | 50 5 simple_step 52 | 51 9 find_moment_arm 53 | 52 5 simple_step 54 | 53 8 rotation_sense_of_force 55 | 54 10 moment_sign_sense_relation 56 | 55 7 motion_dependence_on_force 57 | 56 11 58 | 57 10 moment_sign_sense_relation 59 | 58 7 motion_dependence_on_force 60 | 59 11 61 | 60 7 motion_dependence_on_force 62 | 61 11 63 | 62 12 rotation_sense_of_force~~motion_dependence_on_force 64 | 63 9 find_moment_arm 65 | 64 12 rotation_sense_of_force~~motion_dependence_on_force 66 | 65 8 rotation_sense_of_force 67 | 66 12 rotation_sense_of_force~~motion_dependence_on_force 68 | 67 10 moment_sign_sense_relation 69 | 68 12 rotation_sense_of_force~~motion_dependence_on_force 70 | 69 9 find_moment_arm 71 | 70 11 72 | 71 8 rotation_sense_of_force 73 | 72 1 identify_interaction 74 | 73 1 identify_interaction 75 | 74 1 identify_interaction 76 | 75 1 identify_interaction 77 | 76 1 identify_interaction 78 | 77 4 represent_interaction_cord 79 | 78 13 body_draw_force_on 80 | 79 14 represent_interaction_contacting_body 81 | 80 14 represent_interaction_contacting_body 82 | 81 13 body_draw_force_on 83 | 82 14 represent_interaction_contacting_body 84 | 83 14 represent_interaction_contacting_body 85 | 84 13 body_draw_force_on 86 | 85 3 represent_interaction_spring 87 | 86 3 represent_interaction_spring 88 | 87 13 body_draw_force_on 89 | 88 3 represent_interaction_spring 90 | 89 3 represent_interaction_spring 91 | 90 14 represent_interaction_contacting_body 92 | 91 15 identify_interaction~~body_draw_force_on 93 | 92 14 represent_interaction_contacting_body 94 | 93 1 identify_interaction 95 | 94 15 identify_interaction~~body_draw_force_on 96 | 95 1 identify_interaction 97 | 96 3 represent_interaction_spring 98 | 97 1 identify_interaction 99 | 98 3 represent_interaction_spring 100 | 99 4 represent_interaction_cord 101 | 100 15 identify_interaction~~body_draw_force_on 102 | 101 4 represent_interaction_cord 103 | 102 3 represent_interaction_spring 104 | 103 15 identify_interaction~~body_draw_force_on 105 | 104 3 represent_interaction_spring 106 | 105 16 resolve_into_components 107 | 106 16 resolve_into_components 108 | 107 10 moment_sign_sense_relation 109 | 108 8 rotation_sense_of_force 110 | 109 8 rotation_sense_of_force 111 | 110 5 simple_step 112 | 111 17 is_net_moment_sense_obvious 113 | 112 8 rotation_sense_of_force 114 | 113 18 moment_sign_sense_relation~~rotation_sense_of_force 115 | 114 9 find_moment_arm 116 | 115 18 moment_sign_sense_relation~~rotation_sense_of_force 117 | 116 9 find_moment_arm 118 | 117 18 moment_sign_sense_relation~~rotation_sense_of_force 119 | 118 9 find_moment_arm 120 | 119 18 moment_sign_sense_relation~~rotation_sense_of_force 121 | 120 16 resolve_into_components 122 | 121 9 find_moment_arm 123 | 122 18 moment_sign_sense_relation~~rotation_sense_of_force 124 | 123 16 resolve_into_components 125 | 124 9 find_moment_arm 126 | 125 19 statics_problem_collinear 127 | 126 20 choose_subsystem 128 | 127 4 represent_interaction_cord 129 | 128 14 represent_interaction_contacting_body 130 | 129 5 simple_step 131 | 130 21 recognize_forces_concurrent 132 | 131 22 recognize_forces_collinear 133 | 132 23 count_independent_equations 134 | 133 24 count_unknowns 135 | 134 16 resolve_into_components 136 | 135 16 resolve_into_components 137 | 136 16 resolve_into_components 138 | 137 16 resolve_into_components 139 | 138 16 resolve_into_components 140 | 139 16 resolve_into_components 141 | 140 5 simple_step 142 | 141 16 resolve_into_components 143 | 142 16 resolve_into_components 144 | 143 5 simple_step 145 | 144 5 simple_step 146 | 145 5 simple_step 147 | 146 5 simple_step 148 | 147 25 find_magnitude_given_components 149 | 148 26 find_angle_given_components 150 | 149 11 151 | 150 25 find_magnitude_given_components 152 | 151 26 find_angle_given_components 153 | 152 10 moment_sign_sense_relation 154 | 153 16 resolve_into_components 155 | 154 18 moment_sign_sense_relation~~rotation_sense_of_force 156 | 155 16 resolve_into_components 157 | 156 16 resolve_into_components 158 | 157 16 resolve_into_components 159 | 158 16 resolve_into_components 160 | 159 19 statics_problem_collinear 161 | 160 5 simple_step 162 | 161 16 resolve_into_components 163 | 162 16 resolve_into_components 164 | 163 16 resolve_into_components 165 | 164 16 resolve_into_components 166 | 165 16 resolve_into_components 167 | 166 16 resolve_into_components 168 | 167 5 simple_step 169 | 168 27 impose_solve_concurrent_equilibrium 170 | 169 27 impose_solve_concurrent_equilibrium 171 | 170 14 represent_interaction_contacting_body 172 | 171 4 represent_interaction_cord 173 | 172 4 represent_interaction_cord 174 | 173 4 represent_interaction_cord 175 | 174 4 represent_interaction_cord 176 | 175 3 represent_interaction_spring 177 | 176 3 represent_interaction_spring 178 | 177 3 represent_interaction_spring 179 | 178 3 represent_interaction_spring 180 | 179 11 181 | 180 11 182 | 181 11 183 | 182 19 statics_problem_collinear 184 | 183 28 judge_equilibrium_qualitatively 185 | 184 21 recognize_forces_concurrent 186 | 185 22 recognize_forces_collinear 187 | 186 23 count_independent_equations 188 | 187 29 recognize_knowns_vs_unknowns 189 | 188 29 recognize_knowns_vs_unknowns 190 | 189 29 recognize_knowns_vs_unknowns 191 | 190 29 recognize_knowns_vs_unknowns 192 | 191 28 judge_equilibrium_qualitatively 193 | 192 28 judge_equilibrium_qualitatively 194 | 193 5 simple_step 195 | 194 30 find_moment_arm~~rotation_sense_of_force 196 | 195 9 find_moment_arm 197 | 196 9 find_moment_arm 198 | 197 5 simple_step 199 | 198 31 interpret_equation 200 | 199 28 judge_equilibrium_qualitatively 201 | 200 28 judge_equilibrium_qualitatively 202 | 201 28 judge_equilibrium_qualitatively 203 | 202 28 judge_equilibrium_qualitatively 204 | 203 28 judge_equilibrium_qualitatively 205 | 204 31 interpret_equation 206 | 205 31 interpret_equation 207 | 206 31 interpret_equation 208 | 207 31 interpret_equation 209 | 208 31 interpret_equation 210 | 209 28 judge_equilibrium_qualitatively 211 | 210 28 judge_equilibrium_qualitatively 212 | 211 28 judge_equilibrium_qualitatively 213 | 212 28 judge_equilibrium_qualitatively 214 | 213 28 judge_equilibrium_qualitatively 215 | 214 28 judge_equilibrium_qualitatively 216 | 215 32 statics_problem_force_and_moment 217 | 216 32 statics_problem_force_and_moment 218 | 217 32 statics_problem_force_and_moment 219 | 218 32 statics_problem_force_and_moment 220 | 219 32 statics_problem_force_and_moment 221 | 220 32 statics_problem_force_and_moment 222 | 221 32 statics_problem_force_and_moment 223 | 222 32 statics_problem_force_and_moment 224 | 223 32 statics_problem_force_and_moment 225 | 224 32 statics_problem_force_and_moment 226 | 225 33 couple_represents_net_zero_force 227 | 226 33 couple_represents_net_zero_force 228 | 227 34 motion_dependence_on_force~~couple_represents_net_zero_force 229 | 228 34 motion_dependence_on_force~~couple_represents_net_zero_force 230 | 229 33 couple_represents_net_zero_force 231 | 230 33 couple_represents_net_zero_force 232 | 231 35 couple_represents_net_zero_force~~couple_related_to_forces 233 | 232 33 couple_represents_net_zero_force 234 | 233 33 couple_represents_net_zero_force 235 | 234 35 couple_represents_net_zero_force~~couple_related_to_forces 236 | 235 33 couple_represents_net_zero_force 237 | 236 36 couple_related_to_forces 238 | 237 36 couple_related_to_forces 239 | 238 33 couple_represents_net_zero_force 240 | 239 33 couple_represents_net_zero_force 241 | 240 36 couple_related_to_forces 242 | 241 36 couple_related_to_forces 243 | 242 35 couple_represents_net_zero_force~~couple_related_to_forces 244 | 243 35 couple_represents_net_zero_force~~couple_related_to_forces 245 | 244 33 couple_represents_net_zero_force 246 | 245 35 couple_represents_net_zero_force~~couple_related_to_forces 247 | 246 33 couple_represents_net_zero_force 248 | 247 33 couple_represents_net_zero_force 249 | 248 36 couple_related_to_forces 250 | 249 36 couple_related_to_forces 251 | 250 33 couple_represents_net_zero_force 252 | 251 36 couple_related_to_forces 253 | 252 36 couple_related_to_forces 254 | 253 33 couple_represents_net_zero_force 255 | 254 33 couple_represents_net_zero_force 256 | 255 36 couple_related_to_forces 257 | 256 36 couple_related_to_forces 258 | 257 37 equivalence_of_couples 259 | 258 37 equivalence_of_couples 260 | 259 33 couple_represents_net_zero_force 261 | 260 37 equivalence_of_couples 262 | 261 33 couple_represents_net_zero_force 263 | 262 33 couple_represents_net_zero_force 264 | 263 36 couple_related_to_forces 265 | 264 36 couple_related_to_forces 266 | 265 38 moment_about_point_due_to_couple 267 | 266 38 moment_about_point_due_to_couple 268 | 267 33 couple_represents_net_zero_force 269 | 268 33 couple_represents_net_zero_force 270 | 269 33 couple_represents_net_zero_force 271 | 270 33 couple_represents_net_zero_force 272 | 271 36 couple_related_to_forces 273 | 272 33 couple_represents_net_zero_force 274 | 273 36 couple_related_to_forces 275 | 274 33 couple_represents_net_zero_force 276 | 275 39 recognize_equivalence_from_motion 277 | 276 40 recognize_conditions_for_full_equivalence 278 | 277 39 recognize_equivalence_from_motion 279 | 278 39 recognize_equivalence_from_motion 280 | 279 41 recognize_conditions_for_full_equivalence~~recognize_equivalence_from_motion 281 | 280 39 recognize_equivalence_from_motion 282 | 281 39 recognize_equivalence_from_motion 283 | 282 42 recognize_equivalence_of_translated_forces 284 | 283 37 equivalence_of_couples 285 | 284 37 equivalence_of_couples 286 | 285 40 recognize_conditions_for_full_equivalence 287 | 286 42 recognize_equivalence_of_translated_forces 288 | 287 42 recognize_equivalence_of_translated_forces 289 | 288 42 recognize_equivalence_of_translated_forces 290 | 289 37 equivalence_of_couples 291 | 290 43 moving_force_perpendicular_to_line_of_action 292 | 291 43 moving_force_perpendicular_to_line_of_action 293 | 292 43 moving_force_perpendicular_to_line_of_action 294 | 293 43 moving_force_perpendicular_to_line_of_action 295 | 294 43 moving_force_perpendicular_to_line_of_action 296 | 295 43 moving_force_perpendicular_to_line_of_action 297 | 296 43 moving_force_perpendicular_to_line_of_action 298 | 297 43 moving_force_perpendicular_to_line_of_action 299 | 298 44 moving_force_to_general_point 300 | 299 44 moving_force_to_general_point 301 | 300 44 moving_force_to_general_point 302 | 301 44 moving_force_to_general_point 303 | 302 44 moving_force_to_general_point 304 | 303 44 moving_force_to_general_point 305 | 304 44 moving_force_to_general_point 306 | 305 44 moving_force_to_general_point 307 | 306 44 moving_force_to_general_point 308 | 307 44 moving_force_to_general_point 309 | 308 45 replace_forces_in_same_sense_with_one_force 310 | 309 45 replace_forces_in_same_sense_with_one_force 311 | 310 45 replace_forces_in_same_sense_with_one_force 312 | 311 46 replace_forces_in_opposite_sense_with_force_and_couple 313 | 312 46 replace_forces_in_opposite_sense_with_force_and_couple 314 | 313 46 replace_forces_in_opposite_sense_with_force_and_couple 315 | 314 46 replace_forces_in_opposite_sense_with_force_and_couple 316 | 315 46 replace_forces_in_opposite_sense_with_force_and_couple 317 | 316 46 replace_forces_in_opposite_sense_with_force_and_couple 318 | 317 46 replace_forces_in_opposite_sense_with_force_and_couple 319 | 318 46 replace_forces_in_opposite_sense_with_force_and_couple 320 | 319 47 replace_general_loads_with_force_and_couple 321 | 320 47 replace_general_loads_with_force_and_couple 322 | 321 47 replace_general_loads_with_force_and_couple 323 | 322 47 replace_general_loads_with_force_and_couple 324 | 323 47 replace_general_loads_with_force_and_couple 325 | 324 47 replace_general_loads_with_force_and_couple 326 | 325 47 replace_general_loads_with_force_and_couple 327 | 326 47 replace_general_loads_with_force_and_couple 328 | 327 47 replace_general_loads_with_force_and_couple 329 | 328 47 replace_general_loads_with_force_and_couple 330 | 329 47 replace_general_loads_with_force_and_couple 331 | 330 47 replace_general_loads_with_force_and_couple 332 | 331 47 replace_general_loads_with_force_and_couple 333 | 332 47 replace_general_loads_with_force_and_couple 334 | 333 47 replace_general_loads_with_force_and_couple 335 | 334 47 replace_general_loads_with_force_and_couple 336 | 335 47 replace_general_loads_with_force_and_couple 337 | 336 47 replace_general_loads_with_force_and_couple 338 | 337 47 replace_general_loads_with_force_and_couple 339 | 338 47 replace_general_loads_with_force_and_couple 340 | 339 47 replace_general_loads_with_force_and_couple 341 | 340 47 replace_general_loads_with_force_and_couple 342 | 341 42 recognize_equivalence_of_translated_forces 343 | 342 46 replace_forces_in_opposite_sense_with_force_and_couple 344 | 343 42 recognize_equivalence_of_translated_forces 345 | 344 46 replace_forces_in_opposite_sense_with_force_and_couple 346 | 345 40 recognize_conditions_for_full_equivalence 347 | 346 46 replace_forces_in_opposite_sense_with_force_and_couple 348 | 347 42 recognize_equivalence_of_translated_forces 349 | 348 47 replace_general_loads_with_force_and_couple 350 | 349 43 moving_force_perpendicular_to_line_of_action 351 | 350 47 replace_general_loads_with_force_and_couple 352 | 351 43 moving_force_perpendicular_to_line_of_action 353 | 352 47 replace_general_loads_with_force_and_couple 354 | 353 46 replace_forces_in_opposite_sense_with_force_and_couple 355 | 354 46 replace_forces_in_opposite_sense_with_force_and_couple 356 | 355 48 possible_interaction_for_nonuniform_contact 357 | 356 48 possible_interaction_for_nonuniform_contact 358 | 357 48 possible_interaction_for_nonuniform_contact 359 | 358 49 find_net_force_position_for_linear_distribution 360 | 359 50 find_net_force_for_linear_distribution 361 | 360 51 find_linear_force_per_length 362 | 361 51 find_linear_force_per_length 363 | 362 52 find_symmetry_plane 364 | 363 53 distinguish_fixed_pin_connections 365 | 364 53 distinguish_fixed_pin_connections 366 | 365 54 represent_interaction_fixed_connection 367 | 366 54 represent_interaction_fixed_connection 368 | 367 11 369 | 368 55 judge_force_sense_based_on_sign 370 | 369 56 relate_direction_normal_force_and_contact 371 | 370 57 judge_force_sense_based_on_sign~~relate_direction_normal_force_and_contact 372 | 371 55 judge_force_sense_based_on_sign 373 | 372 58 can_connection_be_modeled_in_2D 374 | 373 58 can_connection_be_modeled_in_2D 375 | 374 58 can_connection_be_modeled_in_2D 376 | 375 58 can_connection_be_modeled_in_2D 377 | 376 59 represent_forces_two-force_member 378 | 377 60 represent_interaction_roller_connection 379 | 378 56 relate_direction_normal_force_and_contact 380 | 379 60 represent_interaction_roller_connection 381 | 380 61 conditions_equal_force_pulley 382 | 381 54 represent_interaction_fixed_connection 383 | 382 62 represent_interaction_pin_connection 384 | 383 63 represent_interaction_pin_in_slot_connection 385 | 384 60 represent_interaction_roller_connection 386 | 385 62 represent_interaction_pin_connection 387 | 386 62 represent_interaction_pin_connection 388 | 387 63 represent_interaction_pin_in_slot_connection 389 | 388 64 represent_interaction_rigid_sliding_connection 390 | 389 62 represent_interaction_pin_connection 391 | 390 62 represent_interaction_pin_connection 392 | 391 63 represent_interaction_pin_in_slot_connection 393 | 392 64 represent_interaction_rigid_sliding_connection 394 | 393 62 represent_interaction_pin_connection 395 | 394 62 represent_interaction_pin_connection 396 | 395 63 represent_interaction_pin_in_slot_connection 397 | 396 64 represent_interaction_rigid_sliding_connection 398 | 397 62 represent_interaction_pin_connection 399 | 398 62 represent_interaction_pin_connection 400 | 399 63 represent_interaction_pin_in_slot_connection 401 | 400 64 represent_interaction_rigid_sliding_connection 402 | 401 62 represent_interaction_pin_connection 403 | 402 62 represent_interaction_pin_connection 404 | 403 60 represent_interaction_roller_connection 405 | 404 62 represent_interaction_pin_connection 406 | 405 62 represent_interaction_pin_connection 407 | 406 60 represent_interaction_roller_connection 408 | 407 62 represent_interaction_pin_connection 409 | 408 59 represent_forces_two-force_member 410 | 409 60 represent_interaction_roller_connection 411 | 410 62 represent_interaction_pin_connection 412 | 411 62 represent_interaction_pin_connection 413 | 412 4 represent_interaction_cord 414 | 413 4 represent_interaction_cord 415 | 414 60 represent_interaction_roller_connection 416 | 415 60 represent_interaction_roller_connection 417 | 416 54 represent_interaction_fixed_connection 418 | 417 54 represent_interaction_fixed_connection 419 | 418 11 420 | 419 11 421 | 420 11 422 | 421 11 423 | 422 11 424 | 423 11 425 | 424 11 426 | 425 11 427 | 426 11 428 | 427 11 429 | 428 11 430 | 429 11 431 | 430 11 432 | 431 11 433 | 432 11 434 | 433 11 435 | 434 11 436 | 435 11 437 | 436 11 438 | 437 11 439 | 438 11 440 | 439 11 441 | 440 11 442 | 441 11 443 | 442 11 444 | 443 11 445 | 444 11 446 | 445 11 447 | 446 11 448 | 447 11 449 | 448 11 450 | 449 11 451 | 450 11 452 | 451 11 453 | 452 11 454 | 453 11 455 | 454 11 456 | 455 11 457 | 456 11 458 | 457 11 459 | 458 11 460 | 459 11 461 | 460 11 462 | 461 11 463 | 462 11 464 | 463 11 465 | 464 11 466 | 465 11 467 | 466 11 468 | 467 11 469 | 468 11 470 | 469 11 471 | 470 11 472 | 471 11 473 | 472 11 474 | 473 11 475 | 474 11 476 | 475 11 477 | 476 11 478 | 477 11 479 | 478 11 480 | 479 11 481 | 480 11 482 | 481 11 483 | 482 11 484 | 483 11 485 | 484 11 486 | 485 11 487 | 486 11 488 | 487 11 489 | 488 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 490 | 489 16 resolve_into_components 491 | 490 38 moment_about_point_due_to_couple 492 | 491 16 resolve_into_components 493 | 492 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 494 | 493 16 resolve_into_components 495 | 494 28 judge_equilibrium_qualitatively 496 | 495 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 497 | 496 16 resolve_into_components 498 | 497 28 judge_equilibrium_qualitatively 499 | 498 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 500 | 499 16 resolve_into_components 501 | 500 28 judge_equilibrium_qualitatively 502 | 501 38 moment_about_point_due_to_couple 503 | 502 16 resolve_into_components 504 | 503 66 statics_problem_force_and_moment~~interpret_equation~~possible_interaction_for_nonuniform_contact 505 | 504 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 506 | 505 16 resolve_into_components 507 | 506 66 statics_problem_force_and_moment~~interpret_equation~~possible_interaction_for_nonuniform_contact 508 | 507 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 509 | 508 16 resolve_into_components 510 | 509 11 511 | 510 11 512 | 511 11 513 | 512 11 514 | 513 11 515 | 514 11 516 | 515 11 517 | 516 11 518 | 517 11 519 | 518 11 520 | 519 11 521 | 520 11 522 | 521 11 523 | 522 11 524 | 523 11 525 | 524 11 526 | 525 11 527 | 526 11 528 | 527 11 529 | 528 11 530 | 529 11 531 | 530 11 532 | 531 11 533 | 532 11 534 | 533 11 535 | 534 11 536 | 535 11 537 | 536 11 538 | 537 11 539 | 538 11 540 | 539 11 541 | 540 11 542 | 541 11 543 | 542 11 544 | 543 11 545 | 544 11 546 | 545 11 547 | 546 11 548 | 547 11 549 | 548 11 550 | 549 11 551 | 550 11 552 | 551 11 553 | 552 11 554 | 553 11 555 | 554 11 556 | 555 11 557 | 556 11 558 | 557 11 559 | 558 11 560 | 559 11 561 | 560 11 562 | 561 11 563 | 562 11 564 | 563 11 565 | 564 11 566 | 565 11 567 | 566 11 568 | 567 11 569 | 568 11 570 | 569 11 571 | 570 11 572 | 571 11 573 | 572 11 574 | 573 11 575 | 574 67 identify_interaction~~represent_interaction_contacting_body~~represent_interaction_cord 576 | 575 68 identify_two-force_member 577 | 576 68 identify_two-force_member 578 | 577 68 identify_two-force_member 579 | 578 68 identify_two-force_member 580 | 579 68 identify_two-force_member 581 | 580 68 identify_two-force_member 582 | 581 69 identify_interaction~~represent_interaction_pin_connection~~represent_forces_two-force_member 583 | 582 11 584 | 583 11 585 | 584 11 586 | 585 11 587 | 586 11 588 | 587 11 589 | 588 11 590 | 589 11 591 | 590 11 592 | 591 11 593 | 592 11 594 | 593 11 595 | 594 70 identify_interaction~~Newtons_third_law 596 | 595 70 identify_interaction~~Newtons_third_law 597 | 596 1 identify_interaction 598 | 597 1 identify_interaction 599 | 598 71 identify_interaction~~represent_interaction_cord 600 | 599 71 identify_interaction~~represent_interaction_cord 601 | 600 11 602 | 601 11 603 | 602 11 604 | 603 11 605 | 604 11 606 | 605 11 607 | 606 11 608 | 607 11 609 | 608 11 610 | 609 11 611 | 610 11 612 | 611 11 613 | 612 11 614 | 613 11 615 | 614 11 616 | 615 11 617 | 616 11 618 | 617 11 619 | 618 11 620 | 619 11 621 | 620 11 622 | 621 11 623 | 622 11 624 | 623 11 625 | 624 11 626 | 625 72 identify_enabling_unknown~~determine_subsystem_is_solvable 627 | 626 73 identify_equation_isolates_specific_unknown 628 | 627 74 identify_enabling_unknown 629 | 628 5 simple_step 630 | 629 75 identify_equation_isolates_specific_unknown~~anticipate_solved_variables 631 | 630 5 simple_step 632 | 631 11 633 | 632 11 634 | 633 11 635 | 634 11 636 | 635 11 637 | 636 11 638 | 637 11 639 | 638 11 640 | 639 11 641 | 640 11 642 | 641 11 643 | 642 11 644 | 643 11 645 | 644 11 646 | 645 11 647 | 646 11 648 | 647 11 649 | 648 11 650 | 649 11 651 | 650 11 652 | 651 11 653 | 652 11 654 | 653 11 655 | 654 11 656 | 655 11 657 | 656 11 658 | 657 11 659 | 658 11 660 | 659 11 661 | 660 11 662 | 661 11 663 | 662 11 664 | 663 11 665 | 664 11 666 | 665 11 667 | 666 11 668 | 667 11 669 | 668 11 670 | 669 11 671 | 670 11 672 | 671 11 673 | 672 11 674 | 673 11 675 | 674 11 676 | 675 11 677 | 676 11 678 | 677 11 679 | 678 11 680 | 679 11 681 | 680 11 682 | 681 11 683 | 682 11 684 | 683 11 685 | 684 11 686 | 685 11 687 | 686 11 688 | 687 11 689 | 688 11 690 | 689 11 691 | 690 11 692 | 691 11 693 | 692 11 694 | 693 11 695 | 694 11 696 | 695 11 697 | 696 11 698 | 697 11 699 | 698 11 700 | 699 11 701 | 700 11 702 | 701 11 703 | 702 11 704 | 703 11 705 | 704 11 706 | 705 11 707 | 706 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 708 | 707 77 Newtons_third_law~~tension_vs_compression_given_force_senses~~judge_force_sense_based_on_sign 709 | 708 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 710 | 709 77 Newtons_third_law~~tension_vs_compression_given_force_senses~~judge_force_sense_based_on_sign 711 | 710 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 712 | 711 78 force_at_joint_implied_by_previous_analysis 713 | 712 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 714 | 713 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 715 | 714 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 716 | 715 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 717 | 716 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 718 | 717 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 719 | 718 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 720 | 719 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 721 | 720 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 722 | 721 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 723 | 722 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 724 | 723 11 725 | 724 11 726 | 725 11 727 | 726 11 728 | 727 11 729 | 728 11 730 | 729 11 731 | 730 11 732 | 731 11 733 | 732 11 734 | 733 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 735 | 734 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 736 | 735 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 737 | 736 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 738 | 737 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 739 | 738 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 740 | 739 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 741 | 740 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 742 | 741 1 identify_interaction 743 | 742 1 identify_interaction 744 | 743 1 identify_interaction 745 | 744 1 identify_interaction 746 | 745 1 identify_interaction 747 | 746 1 identify_interaction 748 | 747 14 represent_interaction_contacting_body 749 | 748 1 identify_interaction 750 | 749 14 represent_interaction_contacting_body 751 | 750 14 represent_interaction_contacting_body 752 | 751 4 represent_interaction_cord 753 | 752 4 represent_interaction_cord 754 | 753 4 represent_interaction_cord 755 | 754 3 represent_interaction_spring 756 | 755 15 identify_interaction~~body_draw_force_on 757 | 756 3 represent_interaction_spring 758 | 757 3 represent_interaction_spring 759 | 758 3 represent_interaction_spring 760 | 759 15 identify_interaction~~body_draw_force_on 761 | 760 14 represent_interaction_contacting_body 762 | 761 14 represent_interaction_contacting_body 763 | 762 14 represent_interaction_contacting_body 764 | 763 1 identify_interaction 765 | 764 15 identify_interaction~~body_draw_force_on 766 | 765 4 represent_interaction_cord 767 | 766 4 represent_interaction_cord 768 | 767 4 represent_interaction_cord 769 | 768 15 identify_interaction~~body_draw_force_on 770 | 769 3 represent_interaction_spring 771 | 770 3 represent_interaction_spring 772 | 771 3 represent_interaction_spring 773 | 772 82 determine_moment 774 | 773 26 find_angle_given_components 775 | 774 9 find_moment_arm 776 | 775 31 interpret_equation 777 | 776 31 interpret_equation 778 | 777 33 couple_represents_net_zero_force 779 | 778 33 couple_represents_net_zero_force 780 | 779 52 find_symmetry_plane 781 | 780 52 find_symmetry_plane 782 | 781 83 identify_forces_in_symmetry_plane 783 | 782 83 identify_forces_in_symmetry_plane 784 | 783 83 identify_forces_in_symmetry_plane 785 | 784 83 identify_forces_in_symmetry_plane 786 | 785 52 find_symmetry_plane 787 | 786 83 identify_forces_in_symmetry_plane 788 | 787 52 find_symmetry_plane 789 | 788 52 find_symmetry_plane 790 | 789 83 identify_forces_in_symmetry_plane 791 | 790 52 find_symmetry_plane 792 | 791 84 find_uniform_pressure_under_weight 793 | 792 85 find_uniform_force_per_length 794 | 793 11 795 | 794 11 796 | 795 11 797 | 796 11 798 | 797 11 799 | 798 11 800 | 799 11 801 | 800 11 802 | 801 11 803 | 802 11 804 | 803 11 805 | 804 11 806 | 805 11 807 | 806 11 808 | 807 11 809 | 808 11 810 | 809 11 811 | 810 11 812 | 811 11 813 | 812 11 814 | 813 11 815 | 814 11 816 | 815 11 817 | 816 11 818 | 817 11 819 | 818 11 820 | 819 11 821 | 820 11 822 | 821 11 823 | 822 11 824 | 823 11 825 | 824 11 826 | 825 11 827 | 826 11 828 | 827 11 829 | 828 11 830 | 829 11 831 | 830 11 832 | 831 11 833 | 832 11 834 | 833 11 835 | 834 11 836 | 835 11 837 | 836 11 838 | 837 11 839 | 838 11 840 | 839 11 841 | 840 11 842 | 841 11 843 | 842 11 844 | 843 11 845 | 844 11 846 | 845 11 847 | 846 11 848 | 847 11 849 | 848 11 850 | 849 11 851 | 850 11 852 | 851 11 853 | 852 11 854 | 853 11 855 | 854 11 856 | 855 11 857 | 856 11 858 | 857 11 859 | 858 11 860 | 859 11 861 | 860 11 862 | 861 11 863 | 862 11 864 | 863 11 865 | 864 11 866 | 865 11 867 | 866 11 868 | 867 11 869 | 868 11 870 | 869 11 871 | 870 11 872 | 871 11 873 | 872 11 874 | 873 11 875 | 874 11 876 | 875 11 877 | 876 11 878 | 877 11 879 | 878 11 880 | 879 11 881 | 880 11 882 | 881 11 883 | 882 11 884 | 883 11 885 | 884 11 886 | 885 11 887 | 886 11 888 | 887 11 889 | 888 11 890 | 889 11 891 | 890 11 892 | 891 11 893 | 892 11 894 | 893 11 895 | 894 11 896 | 895 11 897 | 896 11 898 | 897 11 899 | 898 11 900 | 899 11 901 | 900 11 902 | 901 11 903 | 902 11 904 | 903 11 905 | 904 11 906 | 905 11 907 | 906 11 908 | 907 11 909 | 908 11 910 | 909 11 911 | 910 11 912 | 911 11 913 | 912 11 914 | 913 11 915 | 914 11 916 | 915 11 917 | 916 11 918 | 917 11 919 | 918 11 920 | 919 11 921 | 920 11 922 | 921 11 923 | 922 11 924 | 923 11 925 | 924 11 926 | 925 11 927 | 926 11 928 | 927 11 929 | 928 11 930 | 929 11 931 | 930 11 932 | 931 11 933 | 932 11 934 | 933 11 935 | 934 11 936 | 935 11 937 | 936 11 938 | 937 11 939 | 938 11 940 | 939 11 941 | 940 11 942 | 941 11 943 | 942 11 944 | 943 11 945 | 944 11 946 | 945 11 947 | 946 11 948 | 947 11 949 | 948 11 950 | 949 11 951 | 950 11 952 | 951 11 953 | 952 11 954 | 953 11 955 | 954 14 represent_interaction_contacting_body 956 | 955 14 represent_interaction_contacting_body 957 | 956 3 represent_interaction_spring 958 | 957 11 959 | 958 11 960 | 959 11 961 | 960 11 962 | 961 11 963 | 962 11 964 | 963 11 965 | 964 11 966 | 965 11 967 | 966 11 968 | 967 11 969 | 968 11 970 | 969 11 971 | 970 11 972 | 971 11 973 | 972 11 974 | 973 11 975 | 974 11 976 | 975 11 977 | 976 11 978 | 977 86 polar_moment_of_area 979 | 978 87 second_moment_of_area_parallel_axis_theorem 980 | 979 88 second_moment_of_area_tabulated_shape 981 | 980 89 relative_magnitudes_moment_of_area 982 | 981 90 find_pressure_under_linear_distribution 983 | 982 51 find_linear_force_per_length 984 | 983 51 find_linear_force_per_length 985 | 984 16 resolve_into_components 986 | 985 91 choose_moment_method 987 | 986 91 choose_moment_method 988 | 987 91 choose_moment_method 989 | 988 32 statics_problem_force_and_moment 990 | 989 32 statics_problem_force_and_moment 991 | 990 32 statics_problem_force_and_moment 992 | 991 47 replace_general_loads_with_force_and_couple 993 | 992 47 replace_general_loads_with_force_and_couple 994 | 993 47 replace_general_loads_with_force_and_couple 995 | 994 47 replace_general_loads_with_force_and_couple 996 | 995 92 replace_general_loads_with_single_force 997 | 996 92 replace_general_loads_with_single_force 998 | 997 92 replace_general_loads_with_single_force 999 | 998 85 find_uniform_force_per_length 1000 | 999 84 find_uniform_pressure_under_weight 1001 | 1000 90 find_pressure_under_linear_distribution 1002 | 1001 51 find_linear_force_per_length 1003 | 1002 51 find_linear_force_per_length 1004 | 1003 85 find_uniform_force_per_length 1005 | 1004 51 find_linear_force_per_length 1006 | 1005 49 find_net_force_position_for_linear_distribution 1007 | 1006 50 find_net_force_for_linear_distribution 1008 | 1007 50 find_net_force_for_linear_distribution 1009 | 1008 49 find_net_force_position_for_linear_distribution 1010 | 1009 93 find_net_force_for_uniform_distribution 1011 | 1010 94 find_net_force_position_for_uniform_distribution 1012 | 1011 93 find_net_force_for_uniform_distribution 1013 | 1012 94 find_net_force_position_for_uniform_distribution 1014 | 1013 50 find_net_force_for_linear_distribution 1015 | 1014 49 find_net_force_position_for_linear_distribution 1016 | 1015 48 possible_interaction_for_nonuniform_contact 1017 | 1016 48 possible_interaction_for_nonuniform_contact 1018 | 1017 48 possible_interaction_for_nonuniform_contact 1019 | 1018 48 possible_interaction_for_nonuniform_contact 1020 | 1019 48 possible_interaction_for_nonuniform_contact 1021 | 1020 11 1022 | 1021 11 1023 | 1022 11 1024 | 1023 11 1025 | 1024 11 1026 | 1025 11 1027 | 1026 11 1028 | 1027 11 1029 | 1028 11 1030 | 1029 11 1031 | 1030 11 1032 | 1031 11 1033 | 1032 11 1034 | 1033 11 1035 | 1034 11 1036 | 1035 11 1037 | 1036 11 1038 | 1037 11 1039 | 1038 11 1040 | 1039 11 1041 | 1040 11 1042 | 1041 11 1043 | 1042 11 1044 | 1043 11 1045 | 1044 11 1046 | 1045 11 1047 | 1046 11 1048 | 1047 11 1049 | 1048 11 1050 | 1049 11 1051 | 1050 11 1052 | 1051 11 1053 | 1052 11 1054 | 1053 11 1055 | 1054 11 1056 | 1055 11 1057 | 1056 11 1058 | 1057 11 1059 | 1058 11 1060 | 1059 11 1061 | 1060 11 1062 | 1061 11 1063 | 1062 11 1064 | 1063 11 1065 | 1064 11 1066 | 1065 11 1067 | 1066 11 1068 | 1067 11 1069 | 1068 11 1070 | 1069 11 1071 | 1070 11 1072 | 1071 11 1073 | 1072 11 1074 | 1073 11 1075 | 1074 11 1076 | 1075 11 1077 | 1076 11 1078 | 1077 11 1079 | 1078 11 1080 | 1079 11 1081 | 1080 11 1082 | 1081 11 1083 | 1082 11 1084 | 1083 11 1085 | 1084 11 1086 | 1085 11 1087 | 1086 11 1088 | 1087 11 1089 | 1088 11 1090 | 1089 11 1091 | 1090 11 1092 | 1091 11 1093 | 1092 11 1094 | 1093 11 1095 | 1094 11 1096 | 1095 11 1097 | 1096 11 1098 | 1097 11 1099 | 1098 11 1100 | 1099 11 1101 | 1100 11 1102 | 1101 11 1103 | 1102 11 1104 | 1103 11 1105 | 1104 11 1106 | 1105 11 1107 | 1106 11 1108 | 1107 11 1109 | 1108 11 1110 | 1109 11 1111 | 1110 11 1112 | 1111 11 1113 | 1112 11 1114 | 1113 11 1115 | 1114 11 1116 | 1115 11 1117 | 1116 11 1118 | 1117 11 1119 | 1118 11 1120 | 1119 11 1121 | 1120 11 1122 | 1121 16 resolve_into_components 1123 | 1122 16 resolve_into_components 1124 | 1123 16 resolve_into_components 1125 | 1124 16 resolve_into_components 1126 | 1125 25 find_magnitude_given_components 1127 | 1126 26 find_angle_given_components 1128 | 1127 18 moment_sign_sense_relation~~rotation_sense_of_force 1129 | 1128 18 moment_sign_sense_relation~~rotation_sense_of_force 1130 | 1129 9 find_moment_arm 1131 | 1130 9 find_moment_arm 1132 | 1131 82 determine_moment 1133 | 1132 82 determine_moment 1134 | 1133 55 judge_force_sense_based_on_sign 1135 | 1134 18 moment_sign_sense_relation~~rotation_sense_of_force 1136 | 1135 9 find_moment_arm 1137 | 1136 52 find_symmetry_plane 1138 | 1137 52 find_symmetry_plane 1139 | 1138 52 find_symmetry_plane 1140 | 1139 52 find_symmetry_plane 1141 | 1140 52 find_symmetry_plane 1142 | 1141 52 find_symmetry_plane 1143 | 1142 52 find_symmetry_plane 1144 | 1143 52 find_symmetry_plane 1145 | 1144 52 find_symmetry_plane 1146 | 1145 52 find_symmetry_plane 1147 | 1146 52 find_symmetry_plane 1148 | 1147 52 find_symmetry_plane 1149 | 1148 5 simple_step 1150 | 1149 95 identify_centroid 1151 | 1150 5 simple_step 1152 | 1151 95 identify_centroid 1153 | 1152 5 simple_step 1154 | 1153 95 identify_centroid 1155 | 1154 5 simple_step 1156 | 1155 96 centroid_of_composite_area 1157 | 1156 5 simple_step 1158 | 1157 5 simple_step 1159 | 1158 52 find_symmetry_plane 1160 | 1159 52 find_symmetry_plane 1161 | 1160 52 find_symmetry_plane 1162 | 1161 96 centroid_of_composite_area 1163 | 1162 52 find_symmetry_plane 1164 | 1163 96 centroid_of_composite_area 1165 | 1164 52 find_symmetry_plane 1166 | 1165 96 centroid_of_composite_area 1167 | 1166 52 find_symmetry_plane 1168 | 1167 11 1169 | 1168 11 1170 | 1169 11 1171 | 1170 11 1172 | 1171 11 1173 | 1172 97 mass_moment_of_inertia_parallel_axis_theorem 1174 | 1173 98 relative_magnitudes_mass_moment_of_inertia 1175 | 1174 96 centroid_of_composite_area 1176 | 1175 96 centroid_of_composite_area 1177 | 1176 5 simple_step 1178 | 1177 96 centroid_of_composite_area 1179 | 1178 32 statics_problem_force_and_moment 1180 | 1179 32 statics_problem_force_and_moment 1181 | 1180 11 1182 | 1181 11 1183 | 1182 11 1184 | 1183 11 1185 | 1184 11 1186 | 1185 11 1187 | 1186 51 find_linear_force_per_length 1188 | 1187 92 replace_general_loads_with_single_force 1189 | 1188 5 simple_step 1190 | 1189 11 1191 | 1190 11 1192 | 1191 11 1193 | 1192 11 1194 | 1193 11 1195 | 1194 11 1196 | 1195 11 1197 | 1196 11 1198 | 1197 11 1199 | 1198 11 1200 | 1199 11 1201 | 1200 11 1202 | 1201 96 centroid_of_composite_area 1203 | 1202 11 1204 | 1203 11 1205 | 1204 11 1206 | 1205 11 1207 | 1206 11 1208 | 1207 11 1209 | 1208 11 1210 | 1209 11 1211 | 1210 11 1212 | 1211 11 1213 | 1212 11 1214 | 1213 5 simple_step 1215 | 1214 28 judge_equilibrium_qualitatively 1216 | 1215 11 1217 | 1216 11 1218 | 1217 11 1219 | 1218 96 centroid_of_composite_area 1220 | 1219 11 1221 | 1220 11 1222 | 1221 11 1223 | 1222 11 1224 | 1223 11 1225 | -------------------------------------------------------------------------------- /data/STATICS/STATICS_sid_sname: -------------------------------------------------------------------------------- 1 | skillid skillname 2 | 11 3 | 4 represent_interaction_cord 4 | 55 judge_force_sense_based_on_sign 5 | 65 find_moment_arm~~moment_sign_sense_relation~~rotation_sense_of_force 6 | 91 choose_moment_method 7 | 61 conditions_equal_force_pulley 8 | 29 recognize_knowns_vs_unknowns 9 | 80 sense_if_assuming_tension~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 10 | 53 distinguish_fixed_pin_connections 11 | 54 represent_interaction_fixed_connection 12 | 21 recognize_forces_concurrent 13 | 41 recognize_conditions_for_full_equivalence~~recognize_equivalence_from_motion 14 | 69 identify_interaction~~represent_interaction_pin_connection~~represent_forces_two-force_member 15 | 33 couple_represents_net_zero_force 16 | 67 identify_interaction~~represent_interaction_contacting_body~~represent_interaction_cord 17 | 26 find_angle_given_components 18 | 18 moment_sign_sense_relation~~rotation_sense_of_force 19 | 27 impose_solve_concurrent_equilibrium 20 | 96 centroid_of_composite_area 21 | 77 Newtons_third_law~~tension_vs_compression_given_force_senses~~judge_force_sense_based_on_sign 22 | 62 represent_interaction_pin_connection 23 | 98 relative_magnitudes_mass_moment_of_inertia 24 | 51 find_linear_force_per_length 25 | 8 rotation_sense_of_force 26 | 66 statics_problem_force_and_moment~~interpret_equation~~possible_interaction_for_nonuniform_contact 27 | 78 force_at_joint_implied_by_previous_analysis 28 | 56 relate_direction_normal_force_and_contact 29 | 5 simple_step 30 | 81 determine_subsystem_is_solvable~~identify_external_load_points_on_section~~identify_internal_load_points_on_section 31 | 14 represent_interaction_contacting_body 32 | 36 couple_related_to_forces 33 | 86 polar_moment_of_area 34 | 82 determine_moment 35 | 24 count_unknowns 36 | 19 statics_problem_collinear 37 | 72 identify_enabling_unknown~~determine_subsystem_is_solvable 38 | 73 identify_equation_isolates_specific_unknown 39 | 90 find_pressure_under_linear_distribution 40 | 39 recognize_equivalence_from_motion 41 | 6 distinguish_rotation_translation 42 | 7 motion_dependence_on_force 43 | 2 gravitational_forces 44 | 13 body_draw_force_on 45 | 47 replace_general_loads_with_force_and_couple 46 | 17 is_net_moment_sense_obvious 47 | 83 identify_forces_in_symmetry_plane 48 | 1 identify_interaction 49 | 52 find_symmetry_plane 50 | 20 choose_subsystem 51 | 15 identify_interaction~~body_draw_force_on 52 | 68 identify_two-force_member 53 | 25 find_magnitude_given_components 54 | 12 rotation_sense_of_force~~motion_dependence_on_force 55 | 93 find_net_force_for_uniform_distribution 56 | 59 represent_forces_two-force_member 57 | 71 identify_interaction~~represent_interaction_cord 58 | 42 recognize_equivalence_of_translated_forces 59 | 70 identify_interaction~~Newtons_third_law 60 | 23 count_independent_equations 61 | 10 moment_sign_sense_relation 62 | 74 identify_enabling_unknown 63 | 40 recognize_conditions_for_full_equivalence 64 | 16 resolve_into_components 65 | 45 replace_forces_in_same_sense_with_one_force 66 | 85 find_uniform_force_per_length 67 | 89 relative_magnitudes_moment_of_area 68 | 94 find_net_force_position_for_uniform_distribution 69 | 97 mass_moment_of_inertia_parallel_axis_theorem 70 | 63 represent_interaction_pin_in_slot_connection 71 | 76 anticipate_solved_variables~~determine_joint_is_solvable~~recognize_variable_solvable_from_subsystem 72 | 30 find_moment_arm~~rotation_sense_of_force 73 | 46 replace_forces_in_opposite_sense_with_force_and_couple 74 | 48 possible_interaction_for_nonuniform_contact 75 | 88 second_moment_of_area_tabulated_shape 76 | 35 couple_represents_net_zero_force~~couple_related_to_forces 77 | 50 find_net_force_for_linear_distribution 78 | 75 identify_equation_isolates_specific_unknown~~anticipate_solved_variables 79 | 95 identify_centroid 80 | 37 equivalence_of_couples 81 | 34 motion_dependence_on_force~~couple_represents_net_zero_force 82 | 79 force_at_joint_implied_by_previous_analysis~~sense_if_assuming_tension 83 | 31 interpret_equation 84 | 64 represent_interaction_rigid_sliding_connection 85 | 43 moving_force_perpendicular_to_line_of_action 86 | 32 statics_problem_force_and_moment 87 | 3 represent_interaction_spring 88 | 49 find_net_force_position_for_linear_distribution 89 | 9 find_moment_arm 90 | 28 judge_equilibrium_qualitatively 91 | 92 replace_general_loads_with_single_force 92 | 60 represent_interaction_roller_connection 93 | 87 second_moment_of_area_parallel_axis_theorem 94 | 84 find_uniform_pressure_under_weight 95 | 22 recognize_forces_collinear 96 | 58 can_connection_be_modeled_in_2D 97 | 44 moving_force_to_general_point 98 | 57 judge_force_sense_based_on_sign~~relate_direction_normal_force_and_contact 99 | 38 moment_about_point_due_to_couple 100 | -------------------------------------------------------------------------------- /data/STATICS/data_log: -------------------------------------------------------------------------------- 1 | 2 | 3 | STATICS 4 | Total number of students: 333 5 | Total number of questions: 1223 6 | Total number of skills: 98 7 | Total number of answers: 189297 8 | The maximum number of questions answer by one student is: 1181 9 | Total remove answers : 5650 10 | -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_qid_sid: -------------------------------------------------------------------------------- 1 | 1 1 2 | 2 2 3 | 3 3 4 | 4 4 5 | 5 5 6 | 6 6 7 | 7 7 8 | 8 8 9 | 9 9 10 | 10 10 11 | 11 11 12 | 12 12 13 | 13 13 14 | 14 14 15 | 15 15 16 | 16 16 17 | 17 17 18 | 18 18 19 | 19 19 20 | 20 20 21 | 21 21 22 | 22 22 23 | 23 23 24 | 24 24 25 | 25 25 26 | 26 26 27 | 27 27 28 | 28 28 29 | 29 29 30 | 30 30 31 | 31 31 32 | 32 32 33 | 33 33 34 | 34 34 35 | 35 35 36 | 36 36 37 | 37 37 38 | 38 38 39 | 39 39 40 | 40 40 41 | 41 41 42 | 42 42 43 | 43 43 44 | 44 44 45 | 45 45 46 | 46 46 47 | 47 47 48 | 48 48 49 | 49 49 50 | 50 50 51 | 51 51 52 | 52 52 53 | 53 53 54 | 54 54 55 | 55 55 56 | 56 56 57 | 57 57 58 | 58 58 59 | 59 59 60 | 60 60 61 | 61 61 62 | 62 62 63 | 63 63 64 | 64 64 65 | 65 65 66 | 66 66 67 | 67 67 68 | 68 68 69 | 69 69 70 | 70 70 71 | 71 71 72 | 72 72 73 | 73 73 74 | 74 74 75 | 75 75 76 | 76 76 77 | 77 77 78 | 78 78 79 | 79 79 80 | 80 80 81 | 81 81 82 | 82 82 83 | 83 83 84 | 84 84 85 | 85 85 86 | 86 86 87 | 87 87 88 | 88 88 89 | 89 89 90 | 90 90 91 | 91 91 92 | 92 92 93 | 93 93 94 | 94 94 95 | 95 95 96 | 96 96 97 | 97 97 98 | 98 98 99 | 99 99 100 | 100 100 101 | 101 101 102 | 102 102 103 | 103 103 104 | 104 104 105 | 105 105 106 | 106 106 107 | 107 107 108 | 108 108 109 | 109 109 110 | 110 110 111 | -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_qname_qid: -------------------------------------------------------------------------------- 1 | Circumference 31 2 | Scientific Notation 65 3 | Rounding 38 4 | Multiplication Fractions 19 5 | Finding Slope From Situation 106 6 | Probability of Two Distinct Events 3 7 | Surface Area Rectangular Prism 64 8 | Counting Methods 29 9 | Percents 67 10 | Exponents 59 11 | Interior Angles Figures with More than 3 Sides 53 12 | Percent Discount 47 13 | Area Triangle 82 14 | Reading a Ruler or Scale 56 15 | Recognize Quadratic Pattern 108 16 | Fraction Of 15 17 | Interpreting Coordinate Graphs 96 18 | Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable 107 19 | Scale Factor 63 20 | Estimation 61 21 | Solving for a variable 58 22 | Write Linear Equation from Situation 43 23 | Least Common Multiple 69 24 | Prime Number 73 25 | Area Irregular Figure 2 26 | Linear Equations 99 27 | Finding Slope from Ordered Pairs 105 28 | Recognize Linear Pattern 103 29 | Simplifying Expressions positive exponents 104 30 | Equivalent Fractions 13 31 | Algebraic Solving 46 32 | Multiplication Whole Numbers 90 33 | Percent Of 35 34 | Proportion 14 35 | Finding Percents 41 36 | Multiplication and Division Integers 21 37 | Algebraic Simplification 45 38 | Ordering Fractions 30 39 | Number Line 77 40 | Finding Slope From Equation 109 41 | Translations 94 42 | Conversion of Fraction Decimals Percents 34 43 | Complementary and Supplementary Angles 49 44 | Intercept 98 45 | Ordering Integers 33 46 | Ordering Positive Decimals 37 47 | Divisibility Rules 55 48 | Subtraction Whole Numbers 25 49 | Effect of Changing Dimensions of a Shape Prportionally 84 50 | Range 9 51 | Perimeter of a Polygon 57 52 | Area Circle 68 53 | Division Fractions 60 54 | Slope 100 55 | Rotations 92 56 | Polynomial Factors 91 57 | Pythagorean Theorem 50 58 | Solving Systems of Linear Equations by Graphing 89 59 | Venn Diagram 10 60 | Midpoint 95 61 | Area Trapezoid 1 62 | Write Linear Equation from Ordered Pairs 72 63 | Addition Whole Numbers 22 64 | Addition and Subtraction Fractions 24 65 | Absolute Value 23 66 | Volume Rectangular Prism 39 67 | Quadratic Formula to Solve Quadratic Equation 110 68 | Equation Solving Two or Fewer Steps 26 69 | Histogram as Table or Graph 11 70 | Order of Operations +,-,/,* () positive reals 27 71 | Reflection 93 72 | Addition and Subtraction Integers 20 73 | Distributive Property 102 74 | Surface Area Cylinder 85 75 | Greatest Common Factor 87 76 | Circle Graph 12 77 | Stem and Leaf Plot 6 78 | Unit Rate 36 79 | Area Rectangle 81 80 | D.4.8-understanding-concept-of-probabilities 51 81 | Unit Conversion Within a System 80 82 | Probability of a Single Event 16 83 | Ordering Real Numbers 62 84 | Write Linear Equation from Graph 66 85 | Volume Sphere 75 86 | Computation with Real Numbers 76 87 | Pattern Finding 42 88 | Angles on Parallel Lines Cut by a Transversal 71 89 | Box and Whisker 32 90 | Square Root 44 91 | Calculations with Similar Figures 28 92 | Area Parallelogram 83 93 | Volume Cylinder 86 94 | Order of Operations All 40 95 | Median 5 96 | Multiplication and Division Positive Decimals 74 97 | Mode 7 98 | Solving Systems of Linear Equations 88 99 | Solving Inequalities 79 100 | Nets of 3D Figures 48 101 | Mean 8 102 | Scatter Plot 17 103 | Choose an Equation from Given Information 97 104 | Congruence 52 105 | Angles - Obtuse, Acute, and Right 101 106 | Addition and Subtraction Positive Decimals 18 107 | Rate 78 108 | Interior Angles Triangle 54 109 | Equation Solving More Than Two Steps 70 110 | Table 4 111 | -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_skill_mapping.txt: -------------------------------------------------------------------------------- 1 | 31 Circumference 2 | 65 Scientific Notation 3 | 38 Rounding 4 | 19 Multiplication Fractions 5 | 106 Finding Slope From Situation 6 | 3 Probability of Two Distinct Events 7 | 64 Surface Area Rectangular Prism 8 | 29 Counting Methods 9 | 67 Percents 10 | 59 Exponents 11 | 53 Interior Angles Figures with More than 3 Sides 12 | 47 Percent Discount 13 | 82 Area Triangle 14 | 56 Reading a Ruler or Scale 15 | 108 Recognize Quadratic Pattern 16 | 15 Fraction Of 17 | 96 Interpreting Coordinate Graphs 18 | 107 "Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable" 19 | 63 Scale Factor 20 | 61 Estimation 21 | 58 Solving for a variable 22 | 43 Write Linear Equation from Situation 23 | 69 Least Common Multiple 24 | 73 Prime Number 25 | 2 Area Irregular Figure 26 | 99 Linear Equations 27 | 105 Finding Slope from Ordered Pairs 28 | 103 Recognize Linear Pattern 29 | 104 Simplifying Expressions positive exponents 30 | 13 Equivalent Fractions 31 | 46 Algebraic Solving 32 | 90 Multiplication Whole Numbers 33 | 35 Percent Of 34 | 14 Proportion 35 | 41 Finding Percents 36 | 21 Multiplication and Division Integers 37 | 45 Algebraic Simplification 38 | 30 Ordering Fractions 39 | 77 Number Line 40 | 109 Finding Slope From Equation 41 | 94 Translations 42 | 34 Conversion of Fraction Decimals Percents 43 | 49 Complementary and Supplementary Angles 44 | 98 Intercept 45 | 33 Ordering Integers 46 | 37 Ordering Positive Decimals 47 | 55 Divisibility Rules 48 | 25 Subtraction Whole Numbers 49 | 84 Effect of Changing Dimensions of a Shape Prportionally 50 | 9 Range 51 | 57 Perimeter of a Polygon 52 | 68 Area Circle 53 | 60 Division Fractions 54 | 100 Slope 55 | 92 Rotations 56 | 91 Polynomial Factors 57 | 50 Pythagorean Theorem 58 | 89 Solving Systems of Linear Equations by Graphing 59 | 10 Venn Diagram 60 | 95 Midpoint 61 | 1 Area Trapezoid 62 | 72 Write Linear Equation from Ordered Pairs 63 | 22 Addition Whole Numbers 64 | 24 Addition and Subtraction Fractions 65 | 23 Absolute Value 66 | 39 Volume Rectangular Prism 67 | 110 Quadratic Formula to Solve Quadratic Equation 68 | 26 Equation Solving Two or Fewer Steps 69 | 11 Histogram as Table or Graph 70 | 27 "Order of Operations +,-,/,* () positive reals" 71 | 93 Reflection 72 | 20 Addition and Subtraction Integers 73 | 102 Distributive Property 74 | 85 Surface Area Cylinder 75 | 87 Greatest Common Factor 76 | 12 Circle Graph 77 | 6 Stem and Leaf Plot 78 | 36 Unit Rate 79 | 81 Area Rectangle 80 | 51 D.4.8-understanding-concept-of-probabilities 81 | 80 Unit Conversion Within a System 82 | 16 Probability of a Single Event 83 | 62 Ordering Real Numbers 84 | 66 Write Linear Equation from Graph 85 | 75 Volume Sphere 86 | 76 Computation with Real Numbers 87 | 42 Pattern Finding 88 | 71 Angles on Parallel Lines Cut by a Transversal 89 | 32 Box and Whisker 90 | 44 Square Root 91 | 28 Calculations with Similar Figures 92 | 83 Area Parallelogram 93 | 86 Volume Cylinder 94 | 40 Order of Operations All 95 | 5 Median 96 | 74 Multiplication and Division Positive Decimals 97 | 7 Mode 98 | 88 Solving Systems of Linear Equations 99 | 79 Solving Inequalities 100 | 48 Nets of 3D Figures 101 | 8 Mean 102 | 17 Scatter Plot 103 | 97 Choose an Equation from Given Information 104 | 52 Congruence 105 | 101 "Angles - Obtuse, Acute, and Right" 106 | 18 Addition and Subtraction Positive Decimals 107 | 78 Rate 108 | 54 Interior Angles Triangle 109 | 70 Equation Solving More Than Two Steps 110 | 4 Table 111 | -------------------------------------------------------------------------------- /data/assist2009_updated/assist2009_updated_sname_sid: -------------------------------------------------------------------------------- 1 | Circumference 31 2 | Scientific Notation 65 3 | Rounding 38 4 | Multiplication Fractions 19 5 | Finding Slope From Situation 106 6 | Probability of Two Distinct Events 3 7 | Surface Area Rectangular Prism 64 8 | Counting Methods 29 9 | Percents 67 10 | Exponents 59 11 | Interior Angles Figures with More than 3 Sides 53 12 | Percent Discount 47 13 | Area Triangle 82 14 | Reading a Ruler or Scale 56 15 | Recognize Quadratic Pattern 108 16 | Fraction Of 15 17 | Interpreting Coordinate Graphs 96 18 | Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable 107 19 | Scale Factor 63 20 | Estimation 61 21 | Solving for a variable 58 22 | Write Linear Equation from Situation 43 23 | Least Common Multiple 69 24 | Prime Number 73 25 | Area Irregular Figure 2 26 | Linear Equations 99 27 | Finding Slope from Ordered Pairs 105 28 | Recognize Linear Pattern 103 29 | Simplifying Expressions positive exponents 104 30 | Equivalent Fractions 13 31 | Algebraic Solving 46 32 | Multiplication Whole Numbers 90 33 | Percent Of 35 34 | Proportion 14 35 | Finding Percents 41 36 | Multiplication and Division Integers 21 37 | Algebraic Simplification 45 38 | Ordering Fractions 30 39 | Number Line 77 40 | Finding Slope From Equation 109 41 | Translations 94 42 | Conversion of Fraction Decimals Percents 34 43 | Complementary and Supplementary Angles 49 44 | Intercept 98 45 | Ordering Integers 33 46 | Ordering Positive Decimals 37 47 | Divisibility Rules 55 48 | Subtraction Whole Numbers 25 49 | Effect of Changing Dimensions of a Shape Prportionally 84 50 | Range 9 51 | Perimeter of a Polygon 57 52 | Area Circle 68 53 | Division Fractions 60 54 | Slope 100 55 | Rotations 92 56 | Polynomial Factors 91 57 | Pythagorean Theorem 50 58 | Solving Systems of Linear Equations by Graphing 89 59 | Venn Diagram 10 60 | Midpoint 95 61 | Area Trapezoid 1 62 | Write Linear Equation from Ordered Pairs 72 63 | Addition Whole Numbers 22 64 | Addition and Subtraction Fractions 24 65 | Absolute Value 23 66 | Volume Rectangular Prism 39 67 | Quadratic Formula to Solve Quadratic Equation 110 68 | Equation Solving Two or Fewer Steps 26 69 | Histogram as Table or Graph 11 70 | Order of Operations +,-,/,* () positive reals 27 71 | Reflection 93 72 | Addition and Subtraction Integers 20 73 | Distributive Property 102 74 | Surface Area Cylinder 85 75 | Greatest Common Factor 87 76 | Circle Graph 12 77 | Stem and Leaf Plot 6 78 | Unit Rate 36 79 | Area Rectangle 81 80 | D.4.8-understanding-concept-of-probabilities 51 81 | Unit Conversion Within a System 80 82 | Probability of a Single Event 16 83 | Ordering Real Numbers 62 84 | Write Linear Equation from Graph 66 85 | Volume Sphere 75 86 | Computation with Real Numbers 76 87 | Pattern Finding 42 88 | Angles on Parallel Lines Cut by a Transversal 71 89 | Box and Whisker 32 90 | Square Root 44 91 | Calculations with Similar Figures 28 92 | Area Parallelogram 83 93 | Volume Cylinder 86 94 | Order of Operations All 40 95 | Median 5 96 | Multiplication and Division Positive Decimals 74 97 | Mode 7 98 | Solving Systems of Linear Equations 88 99 | Solving Inequalities 79 100 | Nets of 3D Figures 48 101 | Mean 8 102 | Scatter Plot 17 103 | Choose an Equation from Given Information 97 104 | Congruence 52 105 | Angles - Obtuse, Acute, and Right 101 106 | Addition and Subtraction Positive Decimals 18 107 | Rate 78 108 | Interior Angles Triangle 54 109 | Equation Solving More Than Two Steps 70 110 | Table 4 111 | -------------------------------------------------------------------------------- /data/assist2009_updated/clustered_skill_name.txt: -------------------------------------------------------------------------------- 1 | 0 3 Probability of Two Distinct Events 2 | 0 4 Table 3 | 0 5 Median 4 | 0 6 Stem and Leaf Plot 5 | 0 7 Mode 6 | 0 8 Mean 7 | 0 9 Range 8 | 0 10 Venn Diagram 9 | 0 12 Circle Graph 10 | 0 13 Equivalent Fractions 11 | 0 14 Proportion 12 | 0 15 Fraction Of 13 | 0 16 Probability of a Single Event 14 | 0 22 Addition Whole Numbers 15 | 0 29 Counting Methods 16 | 0 32 Box and Whisker 17 | 0 35 Percent Of 18 | 0 39 Volume Rectangular Prism 19 | 0 41 Finding Percents 20 | 0 51 D.4.8-understanding-concept-of-probabilities 21 | 1 24 Addition and Subtraction Fractions 22 | 1 28 Calculations with Similar Figures 23 | 1 53 Interior Angles Figures with More than 3 Sides 24 | 1 58 Solving for a variable 25 | 1 77 Number Line 26 | 1 79 Solving Inequalities 27 | 1 84 Effect of Changing Dimensions of a Shape Prportionally 28 | 1 105 Finding Slope from Ordered Pairs 29 | 2 17 Scatter Plot 30 | 2 21 Multiplication and Division Integers 31 | 2 23 Absolute Value 32 | 2 25 Subtraction Whole Numbers 33 | 2 30 Ordering Fractions 34 | 2 33 Ordering Integers 35 | 2 37 Ordering Positive Decimals 36 | 2 42 Pattern Finding 37 | 2 43 Write Linear Equation from Situation 38 | 2 44 Square Root 39 | 2 46 Algebraic Solving 40 | 2 52 Congruence 41 | 2 61 Estimation 42 | 2 62 Ordering Real Numbers 43 | 2 74 Multiplication and Division Positive Decimals 44 | 2 81 Area Rectangle 45 | 2 97 Choose an Equation from Given Information 46 | 2 98 Intercept 47 | 2 99 Linear Equations 48 | 2 100 Slope 49 | 2 102 Distributive Property 50 | 2 109 Finding Slope From Equation 51 | 3 45 Algebraic Simplification 52 | 3 55 Divisibility Rules 53 | 3 56 Reading a Ruler or Scale 54 | 3 66 Write Linear Equation from Graph 55 | 3 72 Write Linear Equation from Ordered Pairs 56 | 4 31 Circumference 57 | 4 70 Equation Solving More Than Two Steps 58 | 4 75 Volume Sphere 59 | 4 82 Area Triangle 60 | 4 91 Polynomial Factors 61 | 4 104 Simplifying Expressions positive exponents 62 | 5 2 Area Irregular Figure 63 | 5 48 Nets of 3D Figures 64 | 5 65 Scientific Notation 65 | 5 83 Area Parallelogram 66 | 5 86 Volume Cylinder 67 | 5 92 Rotations 68 | 5 94 Translations 69 | 5 101 "Angles - Obtuse, Acute, and Right" 70 | 5 103 Recognize Linear Pattern 71 | 6 19 Multiplication Fractions 72 | 6 27 "Order of Operations +,-,/,* () positive reals" 73 | 6 38 Rounding 74 | 6 60 Division Fractions 75 | 6 63 Scale Factor 76 | 6 106 Finding Slope From Situation 77 | 6 107 "Parts of a Polyomial, Terms, Coefficient, Monomial, Exponent, Variable" 78 | 7 1 Area Trapezoid 79 | 7 11 Histogram as Table or Graph 80 | 7 47 Percent Discount 81 | 7 54 Interior Angles Triangle 82 | 7 64 Surface Area Rectangular Prism 83 | 7 67 Percents 84 | 7 68 Area Circle 85 | 7 69 Least Common Multiple 86 | 7 73 Prime Number 87 | 7 76 Computation with Real Numbers 88 | 7 78 Rate 89 | 7 85 Surface Area Cylinder 90 | 7 88 Solving Systems of Linear Equations 91 | 7 89 Solving Systems of Linear Equations by Graphing 92 | 7 96 Interpreting Coordinate Graphs 93 | 7 108 Recognize Quadratic Pattern 94 | 7 110 Quadratic Formula to Solve Quadratic Equation 95 | 8 18 Addition and Subtraction Positive Decimals 96 | 8 26 Equation Solving Two or Fewer Steps 97 | 8 36 Unit Rate 98 | 8 40 Order of Operations All 99 | 8 49 Complementary and Supplementary Angles 100 | 8 59 Exponents 101 | 8 80 Unit Conversion Within a System 102 | 8 87 Greatest Common Factor 103 | 8 90 Multiplication Whole Numbers 104 | 8 93 Reflection 105 | 9 20 Addition and Subtraction Integers 106 | 9 34 Conversion of Fraction Decimals Percents 107 | 9 50 Pythagorean Theorem 108 | 9 57 Perimeter of a Polygon 109 | 9 71 Angles on Parallel Lines Cut by a Transversal 110 | 9 95 Midpoint 111 | -------------------------------------------------------------------------------- /data/assist2015/assist2015_qid_sid: -------------------------------------------------------------------------------- 1 | 1 1 2 | 2 2 3 | 3 3 4 | 4 4 5 | 5 5 6 | 6 6 7 | 7 7 8 | 8 8 9 | 9 9 10 | 10 10 11 | 11 11 12 | 12 12 13 | 13 13 14 | 14 14 15 | 15 15 16 | 16 16 17 | 17 17 18 | 18 18 19 | 19 19 20 | 20 20 21 | 21 21 22 | 22 22 23 | 23 23 24 | 24 24 25 | 25 25 26 | 26 26 27 | 27 27 28 | 28 28 29 | 29 29 30 | 30 30 31 | 31 31 32 | 32 32 33 | 33 33 34 | 34 34 35 | 35 35 36 | 36 36 37 | 37 37 38 | 38 38 39 | 39 39 40 | 40 40 41 | 41 41 42 | 42 42 43 | 43 43 44 | 44 44 45 | 45 45 46 | 46 46 47 | 47 47 48 | 48 48 49 | 49 49 50 | 50 50 51 | 51 51 52 | 52 52 53 | 53 53 54 | 54 54 55 | 55 55 56 | 56 56 57 | 57 57 58 | 58 58 59 | 59 59 60 | 60 60 61 | 61 61 62 | 62 62 63 | 63 63 64 | 64 64 65 | 65 65 66 | 66 66 67 | 67 67 68 | 68 68 69 | 69 69 70 | 70 70 71 | 71 71 72 | 72 72 73 | 73 73 74 | 74 74 75 | 75 75 76 | 76 76 77 | 77 77 78 | 78 78 79 | 79 79 80 | 80 80 81 | 81 81 82 | 82 82 83 | 83 83 84 | 84 84 85 | 85 85 86 | 86 86 87 | 87 87 88 | 88 88 89 | 89 89 90 | 90 90 91 | 91 91 92 | 92 92 93 | 93 93 94 | 94 94 95 | 95 95 96 | 96 96 97 | 97 97 98 | 98 98 99 | 99 99 100 | 100 100 101 | -------------------------------------------------------------------------------- /data/assist2015/assist2015_qname_qid: -------------------------------------------------------------------------------- 1 | 11829 89 2 | 10293 59 3 | 13731 94 4 | 13935 36 5 | 8864 68 6 | 6473 74 7 | 6009 60 8 | 7192 50 9 | 7196 32 10 | 7195 3 11 | 10767 87 12 | 11836 92 13 | 31260 62 14 | 204037 58 15 | 11831 24 16 | 6849 84 17 | 6910 95 18 | 8741 76 19 | 6913 97 20 | 14211 80 21 | 6022 48 22 | 37055 51 23 | 10195 39 24 | 6018 83 25 | 5918 53 26 | 6851 65 27 | 31277 100 28 | 7035 63 29 | 37980 15 30 | 7012 93 31 | 5968 26 32 | 5969 61 33 | 39162 34 34 | 5961 78 35 | 5962 45 36 | 5965 75 37 | 10597 41 38 | 15528 54 39 | 14442 6 40 | 7020 46 41 | 11898 28 42 | 11899 47 43 | 11893 25 44 | 12450 4 45 | 8946 35 46 | 7157 66 47 | 236309 19 48 | 5976 29 49 | 6937 88 50 | 26902 20 51 | 9245 79 52 | 9244 71 53 | 19610 52 54 | 19362 99 55 | 7014 37 56 | 6921 30 57 | 5945 73 58 | 7159 44 59 | 7158 33 60 | 8949 55 61 | 7156 82 62 | 7155 2 63 | 37002 72 64 | 164496 5 65 | 39885 38 66 | 5898 7 67 | 6402 16 68 | 7160 96 69 | 7166 14 70 | 7167 70 71 | 7165 13 72 | 8585 64 73 | 6891 81 74 | 14247 57 75 | 21257 18 76 | 9180 23 77 | 6943 67 78 | 7179 49 79 | 9222 98 80 | 31825 77 81 | 37570 11 82 | 9428 22 83 | 10763 17 84 | 10765 1 85 | 10833 8 86 | 9423 56 87 | 9424 42 88 | 8928 31 89 | 10264 9 90 | 10265 43 91 | 37876 10 92 | 14168 21 93 | 24173 69 94 | 37374 27 95 | 6465 12 96 | 6039 40 97 | 7182 85 98 | 7183 91 99 | 7184 90 100 | 7185 86 101 | -------------------------------------------------------------------------------- /data/assist2015/assist2015_sname_sid: -------------------------------------------------------------------------------- 1 | 11829 89 2 | 10293 59 3 | 13731 94 4 | 13935 36 5 | 8864 68 6 | 6473 74 7 | 6009 60 8 | 7192 50 9 | 7196 32 10 | 7195 3 11 | 10767 87 12 | 11836 92 13 | 31260 62 14 | 204037 58 15 | 11831 24 16 | 6849 84 17 | 6910 95 18 | 8741 76 19 | 6913 97 20 | 14211 80 21 | 6022 48 22 | 37055 51 23 | 10195 39 24 | 6018 83 25 | 5918 53 26 | 6851 65 27 | 31277 100 28 | 7035 63 29 | 37980 15 30 | 7012 93 31 | 5968 26 32 | 5969 61 33 | 39162 34 34 | 5961 78 35 | 5962 45 36 | 5965 75 37 | 10597 41 38 | 15528 54 39 | 14442 6 40 | 7020 46 41 | 11898 28 42 | 11899 47 43 | 11893 25 44 | 12450 4 45 | 8946 35 46 | 7157 66 47 | 236309 19 48 | 5976 29 49 | 6937 88 50 | 26902 20 51 | 9245 79 52 | 9244 71 53 | 19610 52 54 | 19362 99 55 | 7014 37 56 | 6921 30 57 | 5945 73 58 | 7159 44 59 | 7158 33 60 | 8949 55 61 | 7156 82 62 | 7155 2 63 | 37002 72 64 | 164496 5 65 | 39885 38 66 | 5898 7 67 | 6402 16 68 | 7160 96 69 | 7166 14 70 | 7167 70 71 | 7165 13 72 | 8585 64 73 | 6891 81 74 | 14247 57 75 | 21257 18 76 | 9180 23 77 | 6943 67 78 | 7179 49 79 | 9222 98 80 | 31825 77 81 | 37570 11 82 | 9428 22 83 | 10763 17 84 | 10765 1 85 | 10833 8 86 | 9423 56 87 | 9424 42 88 | 8928 31 89 | 10264 9 90 | 10265 43 91 | 37876 10 92 | 14168 21 93 | 24173 69 94 | 37374 27 95 | 6465 12 96 | 6039 40 97 | 7182 85 98 | 7183 91 99 | 7184 90 100 | 7185 86 101 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_0: -------------------------------------------------------------------------------- 1 | [3, 3, 1, 2, 4, 1, 1, 3, 3, 3, 1, 0, 2, 3, 0, 3, 2, 1, 0, 1, 3, 4, 3, 0, 1, 2, 1, 3, 1, 4, 4, 2, 1, 3, 3, 4, 2, 3, 2, 0, 4, 4, 1, 2, 1, 0, 0, 2, 2, 2] 2 | 0 [12, 15, 19, 24, 40, 46, 47] 3 | 1 [3, 6, 7, 11, 18, 20, 25, 27, 29, 33, 43, 45] 4 | 2 [4, 13, 17, 26, 32, 37, 39, 44, 48, 49, 50] 5 | 3 [1, 2, 8, 9, 10, 14, 16, 21, 23, 28, 34, 35, 38] 6 | 4 [5, 22, 30, 31, 36, 41, 42] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_1: -------------------------------------------------------------------------------- 1 | [3, 2, 3, 2, 3, 4, 0, 2, 3, 0, 1, 0, 1, 4, 3, 3, 0, 1, 4, 4, 0, 4, 4, 1, 1, 0, 0, 4, 2, 0, 4, 4, 1, 2, 4, 0, 3, 0, 1, 2, 2, 0, 3, 3, 2, 3, 2, 3, 2, 1] 2 | 0 [7, 10, 12, 17, 21, 26, 27, 30, 36, 38, 42] 3 | 1 [11, 13, 18, 24, 25, 33, 39, 50] 4 | 2 [2, 4, 8, 29, 34, 40, 41, 45, 47, 49] 5 | 3 [1, 3, 5, 9, 15, 16, 37, 43, 44, 46, 48] 6 | 4 [6, 14, 19, 20, 22, 23, 28, 31, 32, 35] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_10: -------------------------------------------------------------------------------- 1 | [1, 1, 0, 2, 4, 2, 3, 3, 1, 0, 0, 0, 2, 4, 0, 0, 3, 0, 4, 1, 2, 0, 1, 4, 3, 1, 1, 3, 1, 3, 0, 0, 0, 2, 1, 3, 4, 3, 3, 3, 1, 3, 3, 0, 2, 0, 2, 4, 4, 0] 2 | 0 [3, 10, 11, 12, 15, 16, 18, 22, 31, 32, 33, 44, 46, 50] 3 | 1 [1, 2, 9, 20, 23, 26, 27, 29, 35, 41] 4 | 2 [4, 6, 13, 21, 34, 45, 47] 5 | 3 [7, 8, 17, 25, 28, 30, 36, 38, 39, 40, 42, 43] 6 | 4 [5, 14, 19, 24, 37, 48, 49] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_11: -------------------------------------------------------------------------------- 1 | [4, 1, 3, 3, 0, 3, 2, 3, 2, 0, 3, 2, 4, 2, 0, 3, 1, 2, 3, 0, 2, 3, 1, 4, 2, 3, 2, 4, 1, 1, 4, 1, 0, 2, 4, 4, 1, 4, 2, 1, 3, 0, 1, 4, 2, 1, 4, 3, 2, 2] 2 | 0 [5, 10, 15, 20, 33, 42] 3 | 1 [2, 17, 23, 29, 30, 32, 37, 40, 43, 46] 4 | 2 [7, 9, 12, 14, 18, 21, 25, 27, 34, 39, 45, 49, 50] 5 | 3 [3, 4, 6, 8, 11, 16, 19, 22, 26, 41, 48] 6 | 4 [1, 13, 24, 28, 31, 35, 36, 38, 44, 47] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_12: -------------------------------------------------------------------------------- 1 | [2, 2, 0, 3, 0, 3, 2, 0, 2, 4, 3, 4, 4, 3, 2, 0, 2, 4, 4, 0, 0, 1, 4, 3, 4, 2, 3, 2, 1, 4, 1, 3, 1, 3, 2, 0, 3, 3, 4, 3, 4, 2, 3, 0, 4, 3, 0, 3, 4, 0] 2 | 0 [3, 5, 8, 16, 20, 21, 36, 44, 47, 50] 3 | 1 [22, 29, 31, 33] 4 | 2 [1, 2, 7, 9, 15, 17, 26, 28, 35, 42] 5 | 3 [4, 6, 11, 14, 24, 27, 32, 34, 37, 38, 40, 43, 46, 48] 6 | 4 [10, 12, 13, 18, 19, 23, 25, 30, 39, 41, 45, 49] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_13: -------------------------------------------------------------------------------- 1 | [3, 4, 0, 3, 1, 4, 2, 1, 1, 0, 4, 1, 1, 4, 1, 0, 1, 3, 2, 2, 2, 1, 3, 0, 3, 0, 2, 3, 2, 2, 1, 0, 2, 0, 0, 1, 4, 0, 4, 3, 4, 4, 3, 3, 0, 2, 3, 1, 3, 4] 2 | 0 [3, 10, 16, 24, 26, 32, 34, 35, 38, 45] 3 | 1 [5, 8, 9, 12, 13, 15, 17, 22, 31, 36, 48] 4 | 2 [7, 19, 20, 21, 27, 29, 30, 33, 46] 5 | 3 [1, 4, 18, 23, 25, 28, 40, 43, 44, 47, 49] 6 | 4 [2, 6, 11, 14, 37, 39, 41, 42, 50] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_14: -------------------------------------------------------------------------------- 1 | [3, 2, 0, 1, 4, 0, 4, 3, 4, 0, 3, 3, 1, 0, 1, 3, 2, 0, 3, 1, 3, 2, 0, 3, 4, 3, 2, 2, 4, 2, 0, 4, 2, 4, 4, 0, 4, 1, 0, 3, 4, 2, 4, 0, 3, 3, 3, 4, 1, 3] 2 | 0 [3, 6, 10, 14, 18, 23, 31, 36, 39, 44] 3 | 1 [4, 13, 15, 20, 38, 49] 4 | 2 [2, 17, 22, 27, 28, 30, 33, 42] 5 | 3 [1, 8, 11, 12, 16, 19, 21, 24, 26, 40, 45, 46, 47, 50] 6 | 4 [5, 7, 9, 25, 29, 32, 34, 35, 37, 41, 43, 48] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_15: -------------------------------------------------------------------------------- 1 | [3, 4, 3, 2, 1, 2, 0, 1, 3, 1, 4, 4, 0, 0, 2, 3, 3, 1, 2, 1, 1, 0, 2, 1, 0, 1, 2, 3, 1, 1, 0, 4, 0, 1, 4, 0, 2, 4, 2, 1, 2, 1, 3, 2, 0, 1, 4, 4, 0, 3] 2 | 0 [7, 13, 14, 22, 25, 31, 33, 36, 45, 49] 3 | 1 [5, 8, 10, 18, 20, 21, 24, 26, 29, 30, 34, 40, 42, 46] 4 | 2 [4, 6, 15, 19, 23, 27, 37, 39, 41, 44] 5 | 3 [1, 3, 9, 16, 17, 28, 43, 50] 6 | 4 [2, 11, 12, 32, 35, 38, 47, 48] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_16: -------------------------------------------------------------------------------- 1 | [3, 3, 2, 1, 3, 0, 2, 4, 3, 0, 3, 4, 2, 3, 3, 2, 2, 4, 4, 3, 3, 0, 2, 0, 3, 4, 1, 1, 3, 2, 4, 1, 1, 3, 0, 4, 3, 1, 3, 4, 2, 3, 0, 4, 2, 2, 4, 3, 4, 4] 2 | 0 [6, 10, 22, 24, 35, 43] 3 | 1 [4, 27, 28, 32, 33, 38] 4 | 2 [3, 7, 13, 16, 17, 23, 30, 41, 45, 46] 5 | 3 [1, 2, 5, 9, 11, 14, 15, 20, 21, 25, 29, 34, 37, 39, 42, 48] 6 | 4 [8, 12, 18, 19, 26, 31, 36, 40, 44, 47, 49, 50] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_17: -------------------------------------------------------------------------------- 1 | [0, 3, 1, 0, 3, 3, 3, 0, 0, 4, 4, 4, 1, 3, 3, 2, 1, 4, 1, 2, 4, 3, 1, 1, 1, 2, 1, 0, 3, 4, 3, 4, 1, 2, 1, 3, 0, 1, 3, 1, 0, 2, 4, 4, 4, 3, 0, 2, 1, 4] 2 | 0 [1, 4, 8, 9, 28, 37, 41, 47] 3 | 1 [3, 13, 17, 19, 23, 24, 25, 27, 33, 35, 38, 40, 49] 4 | 2 [16, 20, 26, 34, 42, 48] 5 | 3 [2, 5, 6, 7, 14, 15, 22, 29, 31, 36, 39, 46] 6 | 4 [10, 11, 12, 18, 21, 30, 32, 43, 44, 45, 50] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_18: -------------------------------------------------------------------------------- 1 | [2, 2, 1, 3, 4, 2, 0, 1, 0, 4, 1, 2, 0, 2, 2, 3, 1, 3, 4, 3, 0, 4, 4, 0, 0, 3, 0, 4, 1, 1, 2, 4, 1, 2, 0, 3, 1, 1, 3, 0, 1, 1, 3, 4, 1, 0, 4, 0, 4, 3] 2 | 0 [7, 9, 13, 21, 24, 25, 27, 35, 40, 46, 48] 3 | 1 [3, 8, 11, 17, 29, 30, 33, 37, 38, 41, 42, 45] 4 | 2 [1, 2, 6, 12, 14, 15, 31, 34] 5 | 3 [4, 16, 18, 20, 26, 36, 39, 43, 50] 6 | 4 [5, 10, 19, 22, 23, 28, 32, 44, 47, 49] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_19: -------------------------------------------------------------------------------- 1 | [4, 0, 0, 1, 3, 3, 2, 0, 4, 1, 0, 3, 1, 2, 4, 3, 1, 2, 4, 1, 3, 0, 0, 4, 1, 1, 2, 3, 4, 1, 1, 4, 1, 2, 2, 3, 3, 3, 2, 1, 4, 0, 2, 1, 4, 2, 4, 0, 1, 0] 2 | 0 [2, 3, 8, 11, 22, 23, 42, 48, 50] 3 | 1 [4, 10, 13, 17, 20, 25, 26, 30, 31, 33, 40, 44, 49] 4 | 2 [7, 14, 18, 27, 34, 35, 39, 43, 46] 5 | 3 [5, 6, 12, 16, 21, 28, 36, 37, 38] 6 | 4 [1, 9, 15, 19, 24, 29, 32, 41, 45, 47] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_2: -------------------------------------------------------------------------------- 1 | [2, 2, 1, 0, 1, 2, 2, 1, 3, 4, 1, 0, 0, 4, 2, 3, 0, 0, 0, 3, 2, 2, 1, 2, 1, 0, 0, 3, 1, 0, 0, 3, 1, 2, 1, 2, 0, 0, 1, 3, 1, 4, 1, 0, 0, 0, 4, 2, 4, 0] 2 | 0 [4, 12, 13, 17, 18, 19, 26, 27, 30, 31, 37, 38, 44, 45, 46, 50] 3 | 1 [3, 5, 8, 11, 23, 25, 29, 33, 35, 39, 41, 43] 4 | 2 [1, 2, 6, 7, 15, 21, 22, 24, 34, 36, 48] 5 | 3 [9, 16, 20, 28, 32, 40] 6 | 4 [10, 14, 42, 47, 49] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_3: -------------------------------------------------------------------------------- 1 | [3, 1, 0, 3, 1, 1, 0, 3, 3, 0, 0, 3, 4, 0, 3, 0, 3, 3, 0, 3, 1, 2, 3, 2, 4, 1, 0, 3, 1, 0, 3, 2, 0, 4, 2, 0, 1, 4, 2, 3, 4, 3, 4, 0, 2, 2, 2, 4, 1, 4] 2 | 0 [3, 7, 10, 11, 14, 16, 19, 27, 30, 33, 36, 44] 3 | 1 [2, 5, 6, 21, 26, 29, 37, 49] 4 | 2 [22, 24, 32, 35, 39, 45, 46, 47] 5 | 3 [1, 4, 8, 9, 12, 15, 17, 18, 20, 23, 28, 31, 40, 42] 6 | 4 [13, 25, 34, 38, 41, 43, 48, 50] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_4: -------------------------------------------------------------------------------- 1 | [2, 0, 2, 3, 0, 4, 1, 4, 0, 4, 3, 1, 1, 1, 0, 3, 1, 0, 1, 4, 0, 0, 0, 0, 4, 1, 4, 0, 2, 3, 3, 2, 0, 1, 0, 0, 2, 1, 4, 0, 0, 1, 2, 0, 4, 1, 1, 2, 0, 3] 2 | 0 [2, 5, 9, 15, 18, 21, 22, 23, 24, 28, 33, 35, 36, 40, 41, 44, 49] 3 | 1 [7, 12, 13, 14, 17, 19, 26, 34, 38, 42, 46, 47] 4 | 2 [1, 3, 29, 32, 37, 43, 48] 5 | 3 [4, 11, 16, 30, 31, 50] 6 | 4 [6, 8, 10, 20, 25, 27, 39, 45] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_5: -------------------------------------------------------------------------------- 1 | [4, 4, 3, 3, 2, 4, 4, 3, 3, 1, 1, 2, 1, 4, 2, 3, 3, 3, 2, 3, 4, 2, 1, 2, 4, 4, 1, 1, 3, 3, 0, 3, 2, 1, 0, 3, 1, 2, 4, 3, 3, 2, 1, 2, 2, 0, 2, 0, 4, 3] 2 | 0 [31, 35, 46, 48] 3 | 1 [10, 11, 13, 23, 27, 28, 34, 37, 43] 4 | 2 [5, 12, 15, 19, 22, 24, 33, 38, 42, 44, 45, 47] 5 | 3 [3, 4, 8, 9, 16, 17, 18, 20, 29, 30, 32, 36, 40, 41, 50] 6 | 4 [1, 2, 6, 7, 14, 21, 25, 26, 39, 49] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_6: -------------------------------------------------------------------------------- 1 | [2, 3, 0, 1, 2, 2, 3, 0, 3, 2, 0, 0, 2, 4, 2, 1, 0, 2, 3, 0, 3, 3, 1, 1, 0, 2, 0, 4, 3, 0, 4, 4, 4, 1, 0, 4, 1, 3, 3, 2, 1, 3, 4, 2, 4, 0, 0, 2, 0, 0] 2 | 0 [3, 8, 11, 12, 17, 20, 25, 27, 30, 35, 46, 47, 49, 50] 3 | 1 [4, 16, 23, 24, 34, 37, 41] 4 | 2 [1, 5, 6, 10, 13, 15, 18, 26, 40, 44, 48] 5 | 3 [2, 7, 9, 19, 21, 22, 29, 38, 39, 42] 6 | 4 [14, 28, 31, 32, 33, 36, 43, 45] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_7: -------------------------------------------------------------------------------- 1 | [0, 4, 4, 0, 2, 0, 0, 0, 2, 1, 2, 1, 0, 3, 0, 1, 3, 3, 1, 2, 2, 1, 4, 4, 2, 4, 4, 3, 3, 0, 3, 3, 0, 4, 1, 0, 3, 0, 1, 4, 4, 2, 3, 4, 3, 1, 2, 1, 3, 1] 2 | 0 [1, 4, 6, 7, 8, 13, 15, 30, 33, 36, 38] 3 | 1 [10, 12, 16, 19, 22, 35, 39, 46, 48, 50] 4 | 2 [5, 9, 11, 20, 21, 25, 42, 47] 5 | 3 [14, 17, 18, 28, 29, 31, 32, 37, 43, 45, 49] 6 | 4 [2, 3, 23, 24, 26, 27, 34, 40, 41, 44] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_8: -------------------------------------------------------------------------------- 1 | [0, 3, 3, 2, 4, 4, 2, 2, 3, 1, 1, 0, 2, 4, 3, 4, 2, 2, 0, 1, 3, 0, 3, 3, 4, 1, 0, 3, 3, 3, 1, 3, 2, 2, 1, 3, 2, 2, 1, 1, 3, 0, 2, 0, 2, 4, 0, 4, 0, 2] 2 | 0 [1, 12, 19, 22, 27, 42, 44, 47, 49] 3 | 1 [10, 11, 20, 26, 31, 35, 39, 40] 4 | 2 [4, 7, 8, 13, 17, 18, 33, 34, 37, 38, 43, 45, 50] 5 | 3 [2, 3, 9, 15, 21, 23, 24, 28, 29, 30, 32, 36, 41] 6 | 4 [5, 6, 14, 16, 25, 46, 48] 7 | -------------------------------------------------------------------------------- /data/synthetic/cluster_info_9: -------------------------------------------------------------------------------- 1 | [3, 3, 3, 1, 2, 0, 4, 4, 3, 3, 3, 2, 2, 1, 4, 0, 4, 3, 1, 4, 3, 1, 1, 4, 3, 3, 3, 4, 2, 4, 3, 1, 4, 3, 1, 4, 3, 0, 3, 3, 1, 0, 1, 2, 2, 4, 0, 1, 0, 2] 2 | 0 [6, 16, 38, 42, 47, 49] 3 | 1 [4, 14, 19, 22, 23, 32, 35, 41, 43, 48] 4 | 2 [5, 12, 13, 29, 44, 45, 50] 5 | 3 [1, 2, 3, 9, 10, 11, 18, 21, 25, 26, 27, 31, 34, 37, 39, 40] 6 | 4 [7, 8, 15, 17, 20, 24, 28, 30, 33, 36, 46] 7 | -------------------------------------------------------------------------------- /model_CNN.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | __author__ = 'shshen' 3 | 4 | import numpy as np 5 | import tensorflow as tf 6 | 7 | from model_function import * 8 | 9 | class CKT(object): 10 | 11 | def __init__(self, batch_size, num_steps, num_skills, hidden_size): 12 | 13 | self.batch_size = batch_size = batch_size 14 | self.hidden_size = hidden_size 15 | self.num_steps = num_steps 16 | self.num_skills = num_skills 17 | 18 | self.input_data = tf.placeholder(tf.int32, [None, num_steps], name="input_data") 19 | self.input_skill = tf.placeholder(tf.int32, [None, num_steps], name="input_skill") 20 | self.l = tf.placeholder(tf.float32, [None, num_steps, num_skills], name="l") 21 | self.next_id = tf.placeholder(tf.int32, [None, num_steps], name="next_id") 22 | self.target_id = tf.placeholder(tf.int32, [None], name="target_id") 23 | self.target_correctness = tf.placeholder(tf.float32, [None], name="target_correctness") 24 | self.target_id2 = tf.placeholder(tf.int32, [None], name="target_id2") 25 | self.target_correctness2 = tf.placeholder(tf.float32, [None], name="target_correctness2") 26 | 27 | 28 | self.dropout_keep_prob = tf.placeholder(tf.float32, name="dropout_keep_prob") 29 | self.is_training = tf.placeholder(tf.bool, name="is_training") 30 | 31 | self.global_step = tf.Variable(0, trainable=False, name="Global_Step") 32 | self.initializer=tf.contrib.layers.xavier_initializer() 33 | 34 | # input_data = tf.cast(self.input_data, tf.float32) 35 | 36 | skill_w = tf.Variable(tf.contrib.layers.xavier_initializer()([num_skills,100]),dtype=tf.float32, trainable=True) 37 | skills = tf.nn.embedding_lookup(skill_w, self.input_skill) 38 | next_skill = tf.nn.embedding_lookup(skill_w, self.next_id) 39 | 40 | zeros = tf.zeros([num_skills,100]) 41 | t1 = tf.concat([skill_w,zeros],axis = -1) 42 | t2 = tf.concat([zeros,skill_w],axis = -1) 43 | input_w = tf.concat([t1,t2],axis = 0) 44 | input_data = tf.nn.embedding_lookup(input_w, self.input_data) 45 | 46 | 47 | outputs = CNN(input_data, skills, self.l, next_skill, self.hidden_size, self.dropout_keep_prob, self.is_training) 48 | 49 | print(np.shape(outputs)) 50 | 51 | logits = tf.reduce_sum(outputs, axis = -1) 52 | print('aa') 53 | print(np.shape(logits)) 54 | 55 | self.states = tf.sigmoid(logits, name="states") 56 | # from output nodes to pick up the right one we want 57 | logits = tf.reshape(logits, [-1]) 58 | selected_logits = tf.gather(logits, self.target_id) 59 | selected_logits2 = tf.gather(logits, self.target_id2) 60 | 61 | #make prediction 62 | self.pred = tf.sigmoid(selected_logits, name="pred") 63 | 64 | # loss function 65 | self.loss = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(logits=selected_logits, labels=self.target_correctness), name="losses") 66 | 67 | self.cost = self.loss 68 | -------------------------------------------------------------------------------- /model_function.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Mon Jan 21 16:14:05 2019 4 | 5 | @author:shshen 6 | """ 7 | 8 | import tensorflow as tf 9 | import numpy as np 10 | 11 | 12 | 13 | 14 | def cal_att(inputs): 15 | 16 | 17 | xnorm = tf.sqrt(tf.reduce_sum(tf.square(inputs), axis=2)) 18 | 19 | xnorm1 = tf.tile(tf.expand_dims(xnorm, 1), [1, tf.shape(inputs)[1], 1]) 20 | xnorm2 = tf.tile(tf.expand_dims(xnorm, -1), [1, 1, tf.shape(inputs)[1]]) 21 | 22 | x_x = tf.matmul(inputs, tf.transpose(inputs, [0, 2, 1])) 23 | 24 | outputs = tf.div(x_x, xnorm1 * xnorm2) 25 | diag_vals = tf.ones_like(outputs[0, :, :]) # (l, l) 26 | tril = tf.linalg.LinearOperatorLowerTriangular(diag_vals).to_dense() # (l, l) 27 | sel = tf.eye(tf.shape(outputs)[1]) 28 | sel2 = tf.eye(1, num_columns=tf.shape(outputs)[1]) 29 | sel3 = tf.zeros([tf.shape(outputs)[1]-1, tf.shape(outputs)[1]]) 30 | sel4 = tf.concat([sel2,sel3], axis = 0) 31 | sel = sel - sel4 32 | tril = tril - sel 33 | 34 | masks = tf.tile(tf.expand_dims(tril, 0), [tf.shape(outputs)[0], 1, 1]) # (h*N, l, l) 35 | # masks=tf.linalg.band_part(masks,5,0) 36 | paddings = tf.ones_like(masks)*(-2**32+1) 37 | outputs = tf.where(tf.equal(masks, 0), paddings, outputs) # (h*N, T_q, T_k) 38 | 39 | 40 | outputs = tf.nn.softmax(outputs) 41 | 42 | return outputs 43 | 44 | 45 | 46 | 47 | def GLU(inputs, dim, scope='GLU'): 48 | r = tf.nn.sigmoid(tf.layers.dense(inputs, dim)) 49 | 50 | output = tf.layers.dense(inputs, dim) 51 | 52 | output = output * r 53 | return output 54 | 55 | 56 | def cnn_block(x, filter1, k1, k2, drop_rate, is_training): 57 | 58 | o1 = x 59 | 60 | w1 = tf.Variable(tf.contrib.layers.xavier_initializer()([k1, filter1, filter1]),dtype=tf.float32) 61 | w2 = tf.zeros([k2, filter1, filter1], dtype=tf.float32) 62 | res_w = tf.concat([w1,w2],axis = 0) 63 | b = tf.Variable(tf.contrib.layers.xavier_initializer()([filter1]),dtype=tf.float32) 64 | o2 = tf.nn.conv1d(o1, res_w, 1, padding='SAME') + b 65 | o2 = tf.nn.dropout(o2, drop_rate) 66 | o2 = GLU(o2, filter1) 67 | return o2 + x 68 | def CNN(x, skills, individual, next_skill, out_size, drop_rate, is_training): 69 | print(np.shape(x)) 70 | 71 | att = cal_att(skills) 72 | 73 | x2 = tf.matmul(att, x) 74 | 75 | x = tf.concat([x,x2,individual],axis = -1) 76 | 77 | x = GLU(x, out_size) 78 | 79 | 80 | for i in range(1,4): 81 | x = cnn_block(x,out_size, 6, 6, drop_rate, is_training) 82 | 83 | x = x*next_skill 84 | 85 | return x 86 | 87 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | __author__ = 'shshen' 3 | 4 | import os 5 | import sys 6 | import time 7 | import numpy as np 8 | import tensorflow as tf 9 | from sklearn import metrics 10 | from math import sqrt 11 | from sklearn.metrics import r2_score 12 | from sklearn.metrics import mean_squared_error 13 | from utils import checkmate as cm 14 | from utils import data_helpers as dh 15 | import csv 16 | # Parameters 17 | # ================================================== 18 | 19 | logger = dh.logger_fn("tflog", "logs/test-{0}.log".format(time.asctime()).replace(':', '_')) 20 | 21 | MODEL = input("Please input the model file you want to test, it should be like(1490175368): ") 22 | 23 | while not (MODEL.isdigit() and len(MODEL) == 10): 24 | MODEL = input("The format of your input is illegal, it should be like(1490175368), please re-input: ") 25 | logger.info("The format of your input is legal, now loading to next step...") 26 | 27 | 28 | TESTSET_DIR = 'data/assist2009_updated_all.csv' 29 | MODEL_DIR = 'runs/' + MODEL + '/checkpoints/' 30 | BEST_MODEL_DIR = 'runs/' + MODEL + '/bestcheckpoints/' 31 | SAVE_DIR = 'results/' + MODEL 32 | 33 | # Data Parameters 34 | tf.flags.DEFINE_string("test_data_file", TESTSET_DIR, "Data source for the test data") 35 | tf.flags.DEFINE_string("checkpoint_dir", MODEL_DIR, "Checkpoint directory from training run") 36 | tf.flags.DEFINE_string("best_checkpoint_dir", BEST_MODEL_DIR, "Best checkpoint directory from training run") 37 | 38 | # Model Hyperparameters 39 | tf.flags.DEFINE_float("l2_lambda", 0.0001, "Lambda for l2 loss.") 40 | tf.flags.DEFINE_float("learning_rate", 0.003, "Learning rate") 41 | tf.flags.DEFINE_float("norm_ratio", 10, "The ratio of the sum of gradients norms of trainable variable (default: 1.25)") 42 | tf.flags.DEFINE_float("keep_prob", 0.2, "Keep probability for dropout") 43 | tf.flags.DEFINE_integer("batch_size", 1, "Batch size for training.") 44 | tf.flags.DEFINE_integer("epochs", 50, "Number of epochs to train for.") 45 | 46 | 47 | # Misc Parameters 48 | tf.flags.DEFINE_boolean("allow_soft_placement", True, "Allow device soft device placement") 49 | tf.flags.DEFINE_boolean("log_device_placement", False, "Log placement of ops on devices") 50 | tf.flags.DEFINE_boolean("gpu_options_allow_growth", True, "Allow gpu options growth") 51 | 52 | FLAGS = tf.flags.FLAGS 53 | FLAGS(sys.argv) 54 | dilim = '-' * 100 55 | logger.info('\n'.join([dilim, *['{0:>50}|{1:<50}'.format(attr.upper(), FLAGS.__getattr__(attr)) 56 | for attr in sorted(FLAGS.__dict__['__wrapped'])], dilim])) 57 | 58 | 59 | def test(): 60 | 61 | # Load data 62 | logger.info("Loading data...") 63 | 64 | logger.info("Training data processing...") 65 | 66 | test_students, test_max_num_problems, test_max_skill_num = dh.read_test_data_from_csv_file(FLAGS.test_data_file) 67 | max_num_steps = test_max_num_problems 68 | max_num_skills = test_max_skill_num 69 | 70 | 71 | # Load rnn model 72 | BEST_OR_LATEST = input("Load Best or Latest Model?(B/L): ") 73 | 74 | while not (BEST_OR_LATEST.isalpha() and BEST_OR_LATEST.upper() in ['B', 'L']): 75 | BEST_OR_LATEST = input("he format of your input is illegal, please re-input: ") 76 | if BEST_OR_LATEST == 'B': 77 | logger.info("Loading best model...") 78 | checkpoint_file = cm.get_best_checkpoint(FLAGS.best_checkpoint_dir, select_maximum_value=True) 79 | if BEST_OR_LATEST == 'L': 80 | logger.info("latest") 81 | checkpoint_file = tf.train.latest_checkpoint(FLAGS.checkpoint_dir) 82 | logger.info(checkpoint_file) 83 | 84 | graph = tf.Graph() 85 | with graph.as_default(): 86 | session_conf = tf.ConfigProto( 87 | allow_soft_placement=FLAGS.allow_soft_placement, 88 | log_device_placement=FLAGS.log_device_placement) 89 | session_conf.gpu_options.allow_growth = FLAGS.gpu_options_allow_growth 90 | sess = tf.Session(config=session_conf) 91 | with sess.as_default(): 92 | # Load the saved meta graph and restore variables 93 | saver = tf.train.import_meta_graph("{0}.meta".format(checkpoint_file)) 94 | saver.restore(sess, checkpoint_file) 95 | 96 | # Get the placeholders from the graph by name 97 | input_data = graph.get_operation_by_name("input_data").outputs[0] 98 | input_skill = graph.get_operation_by_name("input_skill").outputs[0] 99 | l = graph.get_operation_by_name("l").outputs[0] 100 | next_id = graph.get_operation_by_name("next_id").outputs[0] 101 | target_id = graph.get_operation_by_name("target_id").outputs[0] 102 | target_correctness = graph.get_operation_by_name("target_correctness").outputs[0] 103 | target_id2 = graph.get_operation_by_name("target_id2").outputs[0] 104 | target_correctness2 = graph.get_operation_by_name("target_correctness2").outputs[0] 105 | dropout_keep_prob = graph.get_operation_by_name("dropout_keep_prob").outputs[0] 106 | is_training = graph.get_operation_by_name("is_training").outputs[0] 107 | skill = graph.get_operation_by_name("skill_w").outputs[0] 108 | states = graph.get_operation_by_name("states").outputs[0] 109 | pred = graph.get_operation_by_name("pred").outputs[0] 110 | 111 | data_size = len(test_students) 112 | index = 0 113 | actual_labels = [] 114 | pred_labels = [] 115 | while(index+FLAGS.batch_size < data_size): 116 | x = np.zeros((FLAGS.batch_size, max_num_steps)) 117 | xx = np.zeros((FLAGS.batch_size, max_num_steps)) 118 | next_id_b = np.zeros((FLAGS.batch_size, max_num_steps)) 119 | l_b = np.ones((FLAGS.batch_size, max_num_steps, max_num_skills)) 120 | target_id_b = [] 121 | target_correctness_b = [] 122 | target_id2_b = [] 123 | target_correctness2_b = [] 124 | 125 | for i in range(FLAGS.batch_size): 126 | student = test_students[index+i] 127 | problem_ids = student[1] 128 | correctness = student[2] 129 | leng = len(problem_ids) 130 | 131 | correct_num = np.zeros(max_num_skills) 132 | answer_count = np.ones(max_num_skills) 133 | for j in range(len(problem_ids)-1): 134 | problem_id = int(problem_ids[j]) 135 | 136 | if(int(correctness[j]) == 0): 137 | x[i, j] = problem_id + max_num_skills 138 | else: 139 | x[i, j] = problem_id 140 | correct_num[problem_id] += 1 141 | l_b[i,j] = correct_num / answer_count 142 | answer_count[problem_id] += 1 143 | xx[i,j] = problem_id 144 | next_id_b[i,j] = int(problem_ids[j+1]) 145 | 146 | target_id_b.append(i*max_num_steps+j) 147 | target_correctness_b.append(int(correctness[j+1])) 148 | actual_labels.append(int(correctness[j+1])) 149 | target_id2_b.append(i*max_num_steps+j) 150 | target_correctness2_b.append(int(correctness[j+1])) 151 | 152 | index += FLAGS.batch_size 153 | 154 | feed_dict = { 155 | input_data: x, 156 | input_skill: xx, 157 | l: l_b, 158 | next_id: next_id_b, 159 | target_id: target_id_b, 160 | target_correctness: target_correctness_b, 161 | target_id2: target_id2_b, 162 | target_correctness2: target_correctness2_b, 163 | dropout_keep_prob: 1.0, 164 | is_training: False 165 | } 166 | 167 | ''' 168 | skill_b = sess.run([skill], feed_dict) 169 | print(np.shape(skill_b)) 170 | item = skill_b[0] 171 | with open('skill_2009.txt', 'a')as fi: 172 | for temp in item: 173 | for iii in temp: 174 | fi.write(str(iii) + ',') 175 | fi.write('\n') 176 | break 177 | ''' 178 | pred_b, state = sess.run([pred, states], feed_dict) 179 | print(np.shape(state)) 180 | print(np.shape(pred_b)) 181 | state = np.squeeze(state, axis = 0) 182 | state = state[:leng] 183 | 184 | if leng >50 and leng<100: 185 | writer = csv.writer(open('state.csv', 'a', newline='')) 186 | writer.writerow([len(problem_ids)]) 187 | writer.writerow(student[1]) 188 | writer.writerow(student[2]) 189 | writer.writerow(state) 190 | writer.writerow('\n') 191 | for p in pred_b: 192 | pred_labels.append(p) 193 | rmse = sqrt(mean_squared_error(actual_labels, pred_labels)) 194 | fpr, tpr, thresholds = metrics.roc_curve(actual_labels, pred_labels, pos_label=1) 195 | auc = metrics.auc(fpr, tpr) 196 | #calculate r^2 197 | r2 = r2_score(actual_labels, pred_labels) 198 | print("epochs {0}: rmse {1:g} auc {2:g} r2 {3:g} ".format(1,rmse, auc, r2)) 199 | logger.info("epochs {0}: rmse {1:g} auc {2:g} r2 {3:g} ".format(1,rmse, auc, r2)) 200 | 201 | logger.info("Done.") 202 | 203 | 204 | if __name__ == '__main__': 205 | test() 206 | -------------------------------------------------------------------------------- /train.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | __author__ = 'shshen' 3 | 4 | import os 5 | import sys 6 | import time 7 | import logging 8 | import random 9 | import tensorflow as tf 10 | from datetime import datetime 11 | import numpy as np 12 | from math import sqrt 13 | from sklearn.metrics import r2_score 14 | from sklearn.metrics import mean_squared_error 15 | from sklearn.metrics import accuracy_score 16 | from sklearn import metrics 17 | from model_CNN import CKT 18 | from utils import checkmate as cm 19 | from utils import data_helpers as dh 20 | 21 | # Parameters 22 | # ================================================== 23 | 24 | TRAIN_OR_RESTORE = 'T' #input("Train or Restore?(T/R): ") 25 | 26 | while not (TRAIN_OR_RESTORE.isalpha() and TRAIN_OR_RESTORE.upper() in ['T', 'R']): 27 | TRAIN_OR_RESTORE = input("The format of your input is illegal, please re-input: ") 28 | logging.info("The format of your input is legal, now loading to next step...") 29 | 30 | TRAIN_OR_RESTORE = TRAIN_OR_RESTORE.upper() 31 | 32 | if TRAIN_OR_RESTORE == 'T': 33 | logger = dh.logger_fn("tflog", "logs/training-{0}.log".format(time.asctime()).replace(':', '_')) 34 | if TRAIN_OR_RESTORE == 'R': 35 | logger = dh.logger_fn("tflog", "logs/restore-{0}.log".format(time.asctime()).replace(':', '_')) 36 | 37 | name = str(sys.argv[1]) 38 | number = str(sys.argv[2]) 39 | tf.flags.DEFINE_string("train_or_restore", TRAIN_OR_RESTORE, "Train or Restore.") 40 | tf.flags.DEFINE_float("learning_rate", 0.005, "Learning rate") 41 | tf.flags.DEFINE_float("norm_ratio", 5, "The ratio of the sum of gradients norms of trainable variable (default: 1.25)") 42 | tf.flags.DEFINE_float("keep_prob", 0.2, "Keep probability for dropout") 43 | tf.flags.DEFINE_integer("hidden_size", 100, "The number of hidden nodes (Integer)") 44 | tf.flags.DEFINE_integer("evaluation_interval", 1, "Evaluate and print results every x epochs") 45 | tf.flags.DEFINE_integer("batch_size", 10 , "Batch size for training.") 46 | tf.flags.DEFINE_integer("epochs", 32, "Number of epochs to train for.") 47 | 48 | tf.flags.DEFINE_string("train_data_path", 'data/'+ name+ '_train' + number + '.csv', "Path to the training dataset") 49 | tf.flags.DEFINE_string("valid_data_path", 'data/'+ name+ '_valid' + number + '.csv', "Path to the testing dataset") 50 | 51 | 52 | tf.flags.DEFINE_integer("decay_steps",10, "how many steps before decay learning rate. (default: 500)") 53 | tf.flags.DEFINE_float("decay_rate", 0.2, "Rate of decay for learning rate. (default: 0.95)") 54 | tf.flags.DEFINE_integer("checkpoint_every", 1, "Save model after this many steps (default: 1000)") 55 | tf.flags.DEFINE_integer("num_checkpoints", 3, "Number of checkpoints to store (default: 50)") 56 | 57 | # Misc Parameters 58 | tf.flags.DEFINE_boolean("allow_soft_placement", True, "Allow device soft device placement") 59 | tf.flags.DEFINE_boolean("log_device_placement", False, "Log placement of ops on devices") 60 | tf.flags.DEFINE_boolean("gpu_options_allow_growth", True, "Allow gpu options growth") 61 | 62 | FLAGS = tf.flags.FLAGS 63 | FLAGS(sys.argv) 64 | dilim = '-' * 100 65 | logger.info('\n'.join([dilim, *['{0:>50}|{1:<50}'.format(attr.upper(), FLAGS.__getattr__(attr)) 66 | for attr in sorted(FLAGS.__dict__['__wrapped'])], dilim])) 67 | 68 | 69 | def train(): 70 | """Training model.""" 71 | 72 | # Load sentences, labels, and training parameters 73 | logger.info("Loading data...") 74 | 75 | logger.info("Training data processing...") 76 | train_students, train_max_num_problems, train_max_skill_num = dh.read_data_from_csv_file(FLAGS.train_data_path) 77 | 78 | logger.info("Validation data processing...") 79 | test_students, test_max_num_problems, test_max_skill_num = dh.read_data_from_csv_file(FLAGS.test_data_path) 80 | max_num_steps = max(train_max_num_problems, test_max_num_problems) 81 | max_num_skills = max(train_max_skill_num, test_max_skill_num) 82 | 83 | # Build a graph and lstm_3 object 84 | with tf.Graph().as_default(): 85 | session_conf = tf.ConfigProto( 86 | allow_soft_placement=FLAGS.allow_soft_placement, 87 | log_device_placement=FLAGS.log_device_placement) 88 | session_conf.gpu_options.allow_growth = FLAGS.gpu_options_allow_growth 89 | sess = tf.Session(config=session_conf) 90 | with sess.as_default(): 91 | ckt = CKT( 92 | batch_size = FLAGS.batch_size, 93 | num_steps = max_num_steps, 94 | num_skills = max_num_skills, 95 | hidden_size = FLAGS.hidden_size, 96 | ) 97 | 98 | 99 | # Define training procedure 100 | with tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)): 101 | learning_rate = tf.train.exponential_decay(learning_rate=FLAGS.learning_rate, 102 | global_step=ckt.global_step, decay_steps=(len(train_students)//FLAGS.batch_size +1) * FLAGS.decay_steps, 103 | decay_rate=FLAGS.decay_rate, staircase=True) 104 | # learning_rate = tf.train.piecewise_constant(FLAGS.epochs, boundaries=[7,10], values=[0.005, 0.0005, 0.0001]) 105 | optimizer = tf.train.AdamOptimizer(learning_rate) 106 | #optimizer = tf.train.MomentumOptimizer(learning_rate, 0.9) 107 | #grads, vars = zip(*optimizer.compute_gradients(ckt.loss)) 108 | #grads, _ = tf.clip_by_global_norm(grads, clip_norm=FLAGS.norm_ratio) 109 | #train_op = optimizer.apply_gradients(zip(grads, vars), global_step=ckt.global_step, name="train_op") 110 | train_op = optimizer.minimize(ckt.loss, global_step=ckt.global_step, name="train_op") 111 | 112 | # Output directory for models and summaries 113 | if FLAGS.train_or_restore == 'R': 114 | MODEL = input("Please input the checkpoints model you want to restore, " 115 | "it should be like(1490175368): ") # The model you want to restore 116 | 117 | while not (MODEL.isdigit() and len(MODEL) == 10): 118 | MODEL = input("The format of your input is illegal, please re-input: ") 119 | logger.info("The format of your input is legal, now loading to next step...") 120 | out_dir = os.path.abspath(os.path.join(os.path.curdir, "runs", MODEL)) 121 | logger.info("Writing to {0}\n".format(out_dir)) 122 | else: 123 | timestamp = str(int(time.time())) 124 | out_dir = os.path.abspath(os.path.join(os.path.curdir, "runs", timestamp)) 125 | logger.info("Writing to {0}\n".format(out_dir)) 126 | 127 | checkpoint_dir = os.path.abspath(os.path.join(out_dir, "checkpoints")) 128 | best_checkpoint_dir = os.path.abspath(os.path.join(out_dir, "bestcheckpoints")) 129 | 130 | # Summaries for loss 131 | loss_summary = tf.summary.scalar("loss", ckt.loss) 132 | 133 | # Train summaries 134 | train_summary_op = tf.summary.merge([loss_summary]) 135 | train_summary_dir = os.path.join(out_dir, "summaries", "train") 136 | train_summary_writer = tf.summary.FileWriter(train_summary_dir, sess.graph) 137 | 138 | # Validation summaries 139 | validation_summary_op = tf.summary.merge([loss_summary]) 140 | validation_summary_dir = os.path.join(out_dir, "summaries", "validation") 141 | validation_summary_writer = tf.summary.FileWriter(validation_summary_dir, sess.graph) 142 | 143 | saver = tf.train.Saver(tf.global_variables(), max_to_keep=FLAGS.num_checkpoints) 144 | best_saver = cm.BestCheckpointSaver(save_dir=best_checkpoint_dir, num_to_keep=3, maximize=True) 145 | 146 | if FLAGS.train_or_restore == 'R': 147 | # Load ckt model 148 | logger.info("Loading model...") 149 | checkpoint_file = tf.train.latest_checkpoint(checkpoint_dir) 150 | logger.info(checkpoint_file) 151 | 152 | # Load the saved meta graph and restore variables 153 | saver = tf.train.import_meta_graph("{0}.meta".format(checkpoint_file)) 154 | saver.restore(sess, checkpoint_file) 155 | else: 156 | if not os.path.exists(checkpoint_dir): 157 | os.makedirs(checkpoint_dir) 158 | sess.run(tf.global_variables_initializer()) 159 | sess.run(tf.local_variables_initializer()) 160 | 161 | 162 | 163 | current_step = sess.run(ckt.global_step) 164 | 165 | def train_step(x, xx, l, next_id, target_id, target_correctness, target_id2, target_correctness2): 166 | """A single training step""" 167 | 168 | #print(ability) 169 | feed_dict = { 170 | ckt.input_data: x, 171 | ckt.input_skill: xx, 172 | ckt.l: l, 173 | ckt.next_id: next_id, 174 | ckt.target_id: target_id, 175 | ckt.target_correctness: target_correctness, 176 | ckt.target_id2: target_id2, 177 | ckt.target_correctness2: target_correctness2, 178 | ckt.dropout_keep_prob: FLAGS.keep_prob, 179 | ckt.is_training: True 180 | } 181 | _, step, summaries, pred, loss = sess.run( 182 | [train_op, ckt.global_step, train_summary_op, ckt.pred, ckt.loss], feed_dict) 183 | 184 | 185 | logger.info("step {0}: loss {1:g} ".format(step,loss)) 186 | train_summary_writer.add_summary(summaries, step) 187 | return pred 188 | 189 | def validation_step(x, xx, l, next_id, target_id, target_correctness, target_id2, target_correctness2): 190 | """Evaluates model on a validation set""" 191 | 192 | feed_dict = { 193 | ckt.input_data: x, 194 | ckt.input_skill: xx, 195 | ckt.l: l, 196 | ckt.next_id: next_id, 197 | ckt.target_id: target_id, 198 | ckt.target_correctness: target_correctness, 199 | ckt.target_id2: target_id2, 200 | ckt.target_correctness2: target_correctness2, 201 | ckt.dropout_keep_prob: 1.0, 202 | ckt.is_training: False 203 | } 204 | step, summaries, pred, loss = sess.run( 205 | [ckt.global_step, validation_summary_op, ckt.pred, ckt.loss], feed_dict) 206 | validation_summary_writer.add_summary(summaries, step) 207 | return pred 208 | # Training loop. For each batch... 209 | 210 | run_time = [] 211 | m_rmse = 1 212 | m_r2 = 0 213 | m_acc = 0 214 | m_auc = 0 215 | for iii in range(FLAGS.epochs): 216 | random.shuffle(train_students) 217 | a=datetime.now() 218 | data_size = len(train_students) 219 | index = 0 220 | actual_labels = [] 221 | pred_labels = [] 222 | while(index+FLAGS.batch_size < data_size): 223 | x = np.zeros((FLAGS.batch_size, max_num_steps)) 224 | xx = np.zeros((FLAGS.batch_size, max_num_steps)) 225 | next_id = np.zeros((FLAGS.batch_size, max_num_steps)) 226 | l = np.ones((FLAGS.batch_size, max_num_steps, max_num_skills)) 227 | target_id = [] 228 | target_correctness = [] 229 | target_id2 = [] 230 | target_correctness2 = [] 231 | for i in range(FLAGS.batch_size): 232 | student = train_students[index+i] 233 | problem_ids = student[1] 234 | correctness = student[2] 235 | correct_num = np.zeros(max_num_skills) 236 | answer_count = np.ones(max_num_skills) 237 | for j in range(len(problem_ids)-1): 238 | problem_id = int(problem_ids[j]) 239 | 240 | if(int(correctness[j]) == 0): 241 | x[i, j] = problem_id + max_num_skills 242 | else: 243 | x[i, j] = problem_id 244 | correct_num[problem_id] += 1 245 | l[i,j] = correct_num / answer_count 246 | answer_count[problem_id] += 1 247 | xx[i,j] = problem_id 248 | next_id[i,j] = int(problem_ids[j+1]) 249 | 250 | target_id.append(i*max_num_steps+j) 251 | target_correctness.append(int(correctness[j+1])) 252 | actual_labels.append(int(correctness[j+1])) 253 | target_id2.append(i*max_num_steps+j) 254 | target_correctness2.append(int(correctness[j+1])) 255 | 256 | index += FLAGS.batch_size 257 | #print(ability) 258 | pred = train_step(x, xx, l, next_id, target_id, target_correctness, target_id2, target_correctness2) 259 | for p in pred: 260 | pred_labels.append(p) 261 | current_step = tf.train.global_step(sess, ckt.global_step) 262 | ll = data_size - index 263 | x = np.zeros((ll, max_num_steps)) 264 | xx = np.zeros((ll, max_num_steps)) 265 | next_id = np.zeros((ll, max_num_steps)) 266 | l = np.ones((ll, max_num_steps, max_num_skills)) 267 | target_id = [] 268 | target_correctness = [] 269 | target_id2 = [] 270 | target_correctness2 = [] 271 | for i in range(ll): 272 | student = train_students[index+i] 273 | problem_ids = student[1] 274 | correctness = student[2] 275 | correct_num = np.zeros(max_num_skills) 276 | answer_count = np.ones(max_num_skills) 277 | for j in range(len(problem_ids)-1): 278 | problem_id = int(problem_ids[j]) 279 | 280 | if(int(correctness[j]) == 0): 281 | x[i, j] = problem_id + max_num_skills 282 | else: 283 | x[i, j] = problem_id 284 | correct_num[problem_id] += 1 285 | l[i,j] = correct_num / answer_count 286 | answer_count[problem_id] += 1 287 | xx[i,j] = problem_id 288 | next_id[i,j] = int(problem_ids[j+1]) 289 | target_id.append(i*max_num_steps+j) 290 | target_correctness.append(int(correctness[j+1])) 291 | actual_labels.append(int(correctness[j+1])) 292 | target_id2.append(i*max_num_steps+j) 293 | target_correctness2.append(int(correctness[j+1])) 294 | 295 | pred = train_step(x, xx, l, next_id, target_id, target_correctness, target_id2, target_correctness2) 296 | for p in pred: 297 | pred_labels.append(p) 298 | current_step = tf.train.global_step(sess, ckt.global_step) 299 | b=datetime.now() 300 | e_time = (b-a).total_seconds() 301 | run_time.append(e_time) 302 | rmse = sqrt(mean_squared_error(actual_labels, pred_labels)) 303 | fpr, tpr, thresholds = metrics.roc_curve(actual_labels, pred_labels, pos_label=1) 304 | auc = metrics.auc(fpr, tpr) 305 | #calculate r^2 306 | r2 = r2_score(actual_labels, pred_labels) 307 | pred_score = np.greater_equal(pred_labels,0.5) 308 | pred_score = pred_score.astype(int) 309 | pred_score = np.equal(actual_labels, pred_score) 310 | acc = np.mean(pred_score.astype(int)) 311 | logger.info("epochs {0}: rmse {1:g} auc {2:g} r2 {3:g} acc{4:g} ".format((iii +1),rmse, auc, r2, acc)) 312 | 313 | if((iii+1) % FLAGS.evaluation_interval == 0): 314 | logger.info("\nEvaluation:") 315 | 316 | data_size = len(test_students) 317 | index = 0 318 | actual_labels = [] 319 | pred_labels = [] 320 | while(index+FLAGS.batch_size < data_size): 321 | x = np.zeros((FLAGS.batch_size, max_num_steps)) 322 | xx = np.zeros((FLAGS.batch_size, max_num_steps)) 323 | next_id = np.zeros((FLAGS.batch_size, max_num_steps)) 324 | l = np.ones((FLAGS.batch_size, max_num_steps, max_num_skills)) 325 | target_id = [] 326 | target_correctness = [] 327 | target_id2 = [] 328 | target_correctness2 = [] 329 | for i in range(FLAGS.batch_size): 330 | student = test_students[index+i] 331 | problem_ids = student[1] 332 | correctness = student[2] 333 | correct_num = np.zeros(max_num_skills) 334 | answer_count = np.ones(max_num_skills) 335 | for j in range(len(problem_ids)-1): 336 | problem_id = int(problem_ids[j]) 337 | 338 | if(int(correctness[j]) == 0): 339 | x[i, j] = problem_id + max_num_skills 340 | else: 341 | x[i, j] = problem_id 342 | correct_num[problem_id] += 1 343 | l[i,j] = correct_num / answer_count 344 | answer_count[problem_id] += 1 345 | xx[i,j] = problem_id 346 | next_id[i,j] = int(problem_ids[j+1]) 347 | target_id.append(i*max_num_steps+j) 348 | target_correctness.append(int(correctness[j+1])) 349 | actual_labels.append(int(correctness[j+1])) 350 | target_id2.append(i*max_num_steps+j) 351 | target_correctness2.append(int(correctness[j+1])) 352 | 353 | 354 | index += FLAGS.batch_size 355 | pred = validation_step(x, xx, l, next_id, target_id, target_correctness, target_id2, target_correctness2) 356 | for p in pred: 357 | pred_labels.append(p) 358 | 359 | ll = data_size - index 360 | x = np.zeros((ll, max_num_steps, )) 361 | xx = np.zeros((ll, max_num_steps)) 362 | next_id = np.zeros((ll, max_num_steps)) 363 | l = np.ones((ll, max_num_steps, max_num_skills)) 364 | target_id = [] 365 | target_correctness = [] 366 | target_id2 = [] 367 | target_correctness2 = [] 368 | for i in range(ll): 369 | student = test_students[index+i] 370 | problem_ids = student[1] 371 | correctness = student[2] 372 | correct_num = np.zeros(max_num_skills) 373 | answer_count = np.ones(max_num_skills) 374 | for j in range(len(problem_ids)-1): 375 | problem_id = int(problem_ids[j]) 376 | 377 | if(int(correctness[j]) == 0): 378 | x[i, j] = problem_id + max_num_skills 379 | else: 380 | x[i, j] = problem_id 381 | correct_num[problem_id] += 1 382 | l[i,j] = correct_num / answer_count 383 | answer_count[problem_id] += 1 384 | xx[i,j] = problem_id 385 | next_id[i,j] = int(problem_ids[j+1]) 386 | target_id.append(i*max_num_steps+j) 387 | target_correctness.append(int(correctness[j+1])) 388 | actual_labels.append(int(correctness[j+1])) 389 | target_id2.append(i*max_num_steps+j) 390 | target_correctness2.append(int(correctness[j+1])) 391 | 392 | 393 | pred = validation_step(x, xx, l, next_id, target_id, target_correctness, target_id2, target_correctness2) 394 | for p in pred: 395 | pred_labels.append(p) 396 | 397 | rmse = sqrt(mean_squared_error(actual_labels, pred_labels)) 398 | fpr, tpr, thresholds = metrics.roc_curve(actual_labels, pred_labels, pos_label=1) 399 | auc = metrics.auc(fpr, tpr) 400 | #calculate r^2 401 | r2 = r2_score(actual_labels, pred_labels) 402 | pred_score = np.greater_equal(pred_labels,0.5) 403 | pred_score = pred_score.astype(int) 404 | pred_score = np.equal(actual_labels, pred_score) 405 | acc = np.mean(pred_score.astype(int)) 406 | 407 | logger.info("VALIDATION {0}: rmse {1:g} auc {2:g} r2 {3:g} acc{4:g} ".format((iii +1)/FLAGS.evaluation_interval,rmse, auc, r2, acc)) 408 | 409 | if rmse < m_rmse: 410 | m_rmse = rmse 411 | if auc > m_auc: 412 | m_auc = auc 413 | if acc > m_acc: 414 | m_acc = acc 415 | if r2 > m_r2: 416 | m_r2 = r2 417 | 418 | best_saver.handle(auc, sess, current_step) 419 | if ((iii+1) % FLAGS.checkpoint_every == 0): 420 | checkpoint_prefix = os.path.join(checkpoint_dir, "model") 421 | path = saver.save(sess, checkpoint_prefix, global_step=current_step) 422 | logger.info("Saved model checkpoint to {0}\n".format(path)) 423 | 424 | logger.info("Epoch {0} has finished!".format(iii + 1)) 425 | 426 | logger.info("running time analysis: epoch{0}, avg_time{1}".format(len(run_time), np.mean(run_time))) 427 | logger.info("max: rmse {0:g} auc {1:g} r2 {2:g} acc{3:g} ".format(m_rmse, m_auc, m_r2, m_acc)) 428 | logger.info("Done.") 429 | 430 | 431 | if __name__ == '__main__': 432 | train() 433 | -------------------------------------------------------------------------------- /utils/checkmate.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | __author__ = 'Randolph' 3 | 4 | import os 5 | import glob 6 | import json 7 | import numpy as np 8 | import tensorflow as tf 9 | 10 | 11 | class BestCheckpointSaver(object): 12 | """Maintains a directory containing only the best n checkpoints 13 | Inside the directory is a best_checkpoints JSON file containing a dictionary 14 | mapping of the best checkpoint filepaths to the values by which the checkpoints 15 | are compared. Only the best n checkpoints are contained in the directory and JSON file. 16 | This is a light-weight wrapper class only intended to work in simple, 17 | non-distributed settings. It is not intended to work with the tf.Estimator 18 | framework. 19 | """ 20 | def __init__(self, save_dir, num_to_keep=1, maximize=True, saver=None): 21 | """Creates a `BestCheckpointSaver` 22 | `BestCheckpointSaver` acts as a wrapper class around a `tf.train.Saver` 23 | Args: 24 | save_dir: The directory in which the checkpoint files will be saved 25 | num_to_keep: The number of best checkpoint files to retain 26 | maximize: Define 'best' values to be the highest values. For example, 27 | set this to True if selecting for the checkpoints with the highest 28 | given accuracy. Or set to False to select for checkpoints with the 29 | lowest given error rate. 30 | saver: A `tf.train.Saver` to use for saving checkpoints. A default 31 | `tf.train.Saver` will be created if none is provided. 32 | """ 33 | self._num_to_keep = num_to_keep 34 | self._save_dir = save_dir 35 | self._save_path = os.path.join(save_dir, 'model') 36 | self._maximize = maximize 37 | self._saver = saver if saver else tf.train.Saver( 38 | max_to_keep=None, 39 | save_relative_paths=True 40 | ) 41 | 42 | if not os.path.exists(save_dir): 43 | os.makedirs(save_dir) 44 | self.best_checkpoints_file = os.path.join(save_dir, 'best_checkpoints') 45 | 46 | def handle(self, value, sess, global_step): 47 | """Updates the set of best checkpoints based on the given result. 48 | Args: 49 | value: The value by which to rank the checkpoint. 50 | sess: A tf.Session to use to save the checkpoint 51 | global_step: The global step 52 | """ 53 | current_ckpt = 'model-{}'.format(global_step) 54 | value = float(value) 55 | if not os.path.exists(self.best_checkpoints_file): 56 | self._save_best_checkpoints_file({current_ckpt: value}) 57 | self._saver.save(sess, self._save_path, global_step) 58 | return 59 | 60 | best_checkpoints = self._load_best_checkpoints_file() 61 | 62 | if len(best_checkpoints) < self._num_to_keep: 63 | best_checkpoints[current_ckpt] = value 64 | self._save_best_checkpoints_file(best_checkpoints) 65 | self._saver.save(sess, self._save_path, global_step) 66 | return 67 | 68 | if self._maximize: 69 | should_save = not all(current_best >= value 70 | for current_best in best_checkpoints.values()) 71 | else: 72 | should_save = not all(current_best <= value 73 | for current_best in best_checkpoints.values()) 74 | if should_save: 75 | best_checkpoint_list = self._sort(best_checkpoints) 76 | 77 | worst_checkpoint = os.path.join(self._save_dir, 78 | best_checkpoint_list.pop(-1)[0]) 79 | self._remove_outdated_checkpoint_files(worst_checkpoint) 80 | self._update_internal_saver_state(best_checkpoint_list) 81 | 82 | best_checkpoints = dict(best_checkpoint_list) 83 | best_checkpoints[current_ckpt] = value 84 | self._save_best_checkpoints_file(best_checkpoints) 85 | 86 | self._saver.save(sess, self._save_path, global_step) 87 | 88 | def _save_best_checkpoints_file(self, updated_best_checkpoints): 89 | with open(self.best_checkpoints_file, 'w') as f: 90 | json.dump(updated_best_checkpoints, f, indent=3) 91 | 92 | def _remove_outdated_checkpoint_files(self, worst_checkpoint): 93 | os.remove(os.path.join(self._save_dir, 'checkpoint')) 94 | for ckpt_file in glob.glob(worst_checkpoint + '.*'): 95 | os.remove(ckpt_file) 96 | 97 | def _update_internal_saver_state(self, best_checkpoint_list): 98 | best_checkpoint_files = [ 99 | (ckpt[0], np.inf) # TODO: Try to use actual file timestamp 100 | for ckpt in best_checkpoint_list 101 | ] 102 | self._saver.set_last_checkpoints_with_time(best_checkpoint_files) 103 | 104 | def _load_best_checkpoints_file(self): 105 | with open(self.best_checkpoints_file, 'r') as f: 106 | best_checkpoints = json.load(f) 107 | return best_checkpoints 108 | 109 | def _sort(self, best_checkpoints): 110 | best_checkpoints = [ 111 | (ckpt, best_checkpoints[ckpt]) 112 | for ckpt in sorted(best_checkpoints, 113 | key=best_checkpoints.get, 114 | reverse=self._maximize) 115 | ] 116 | return best_checkpoints 117 | 118 | 119 | def get_best_checkpoint(best_checkpoint_dir, select_maximum_value=True): 120 | """ 121 | Returns filepath to the best checkpoint 122 | Reads the best_checkpoints file in the best_checkpoint_dir directory. 123 | Returns the filepath in the best_checkpoints file associated with 124 | the highest value if select_maximum_value is True, or the filepath 125 | associated with the lowest value if select_maximum_value is False. 126 | Args: 127 | best_checkpoint_dir: Directory containing best_checkpoints JSON file 128 | select_maximum_value: If True, select the filepath associated 129 | with the highest value. Otherwise, select the filepath associated 130 | with the lowest value. 131 | Returns: 132 | The full path to the best checkpoint file 133 | """ 134 | best_checkpoints_file = os.path.join(best_checkpoint_dir, 'best_checkpoints') 135 | assert os.path.exists(best_checkpoints_file) 136 | with open(best_checkpoints_file, 'r') as f: 137 | best_checkpoints = json.load(f) 138 | best_checkpoints = [ 139 | ckpt for ckpt in sorted(best_checkpoints, 140 | key=best_checkpoints.get, 141 | reverse=select_maximum_value) 142 | ] 143 | return os.path.join(os.path.abspath(best_checkpoint_dir), best_checkpoints[0]) 144 | -------------------------------------------------------------------------------- /utils/data_helpers.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | __author__ = 'shshen' 3 | 4 | import os 5 | import random 6 | import csv 7 | import logging 8 | import numpy as np 9 | 10 | 11 | 12 | 13 | def logger_fn(name, input_file, level=logging.INFO): 14 | tf_logger = logging.getLogger(name) 15 | tf_logger.setLevel(level) 16 | log_dir = os.path.dirname(input_file) 17 | if not os.path.exists(log_dir): 18 | os.makedirs(log_dir) 19 | fh = logging.FileHandler(input_file, mode='w') 20 | formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') 21 | fh.setFormatter(formatter) 22 | tf_logger.addHandler(fh) 23 | return tf_logger 24 | 25 | def read_data_from_csv_file(fileName): 26 | rows = [] 27 | max_skill_num = 0 28 | max_num_problems = 383 29 | with open(fileName, "r") as csvfile: 30 | reader = csv.reader(csvfile, delimiter=',') 31 | for row in reader: 32 | rows.append(row) 33 | ''' 34 | for indx in range(0, len(rows)): 35 | if (indx + 1 )% 3 == 0: 36 | rand = random.randint(0, len(rows[indx]) - 1) 37 | if int(rows[indx][rand]) == 1: 38 | rows[indx][rand] = 0 39 | if int(rows[indx][rand]) == 0: 40 | rows[indx][rand] = 1 41 | ''' 42 | 43 | index = 0 44 | print ("the number of rows is " + str(len(rows))) 45 | tuple_rows = [] 46 | #turn list to tuple 47 | while(index < len(rows)-1): 48 | problems_num = int(rows[index][0]) 49 | tmp_max_skill = max(map(int, rows[index+1])) 50 | ''' 51 | cc = [] 52 | for item in rows[index+2]: 53 | cc.append(int(item)) 54 | a_r = round(sum(cc) / problems_num, 2) 55 | if a_r == 0.0 or a_r == 1.0: 56 | index += 3 57 | continue 58 | ''' 59 | if(tmp_max_skill > max_skill_num): 60 | max_skill_num = tmp_max_skill 61 | if(problems_num <= 2): 62 | index += 3 63 | else: 64 | if problems_num > max_num_problems: 65 | count = problems_num // max_num_problems 66 | iii = 0 67 | while(iii <= count): 68 | if iii != count: 69 | tup = (max_num_problems, rows[index+1][iii * max_num_problems : (iii+1)*max_num_problems], rows[index+2][iii * max_num_problems : (iii+1)*max_num_problems]) 70 | elif problems_num - iii*max_num_problems > 2: 71 | tup = (problems_num - iii*max_num_problems, rows[index+1][iii * max_num_problems : (iii+1)*max_num_problems], rows[index+2][iii * max_num_problems : (iii+1)*max_num_problems]) 72 | else: 73 | break 74 | tuple_rows.append(tup) 75 | iii += 1 76 | index += 3 77 | else: 78 | tup = (problems_num, rows[index+1], rows[index+2]) 79 | tuple_rows.append(tup) 80 | index += 3 81 | #shuffle the tuple 82 | 83 | random.shuffle(tuple_rows) 84 | print ("The number of students is ", len(tuple_rows)) 85 | print ("Finish reading data") 86 | return tuple_rows, max_num_problems, max_skill_num+1 87 | 88 | def read_test_data_from_csv_file(fileName): 89 | rows = [] 90 | max_skill_num = 0 91 | max_num_problems = 383 92 | with open(fileName, "r") as csvfile: 93 | reader = csv.reader(csvfile, delimiter=',') 94 | for row in reader: 95 | rows.append(row) 96 | ''' 97 | for indx in range(0, len(rows)): 98 | if (indx + 1 )% 3 == 0: 99 | rand = random.randint(0, len(rows[indx]) - 1) 100 | if int(rows[indx][rand]) == 1: 101 | rows[indx][rand] = 0 102 | if int(rows[indx][rand]) == 0: 103 | rows[indx][rand] = 1 104 | ''' 105 | 106 | index = 0 107 | print ("the number of rows is " + str(len(rows))) 108 | tuple_rows = [] 109 | #turn list to tuple 110 | while(index < len(rows)-1): 111 | problems_num = int(rows[index][0]) 112 | tmp_max_skill = max(map(int, rows[index+1])) 113 | ''' 114 | cc = [] 115 | for item in rows[index+2]: 116 | cc.append(int(item)) 117 | a_r = round(sum(cc) / problems_num, 2) 118 | if a_r == 0.0 or a_r == 1.0: 119 | index += 3 120 | continue 121 | ''' 122 | if(tmp_max_skill > max_skill_num): 123 | max_skill_num = tmp_max_skill 124 | if(problems_num <= 2): 125 | index += 3 126 | else: 127 | if problems_num > max_num_problems: 128 | count = problems_num // max_num_problems 129 | iii = 0 130 | while(iii <= count): 131 | if iii != count: 132 | tup = (max_num_problems, rows[index+1][iii * max_num_problems : (iii+1)*max_num_problems], rows[index+2][iii * max_num_problems : (iii+1)*max_num_problems]) 133 | elif problems_num - iii*max_num_problems > 2: 134 | tup = (problems_num - iii*max_num_problems, rows[index+1][iii * max_num_problems : (iii+1)*max_num_problems], rows[index+2][iii * max_num_problems : (iii+1)*max_num_problems]) 135 | else: 136 | break 137 | tuple_rows.append(tup) 138 | iii += 1 139 | index += 3 140 | else: 141 | tup = (problems_num, rows[index+1], rows[index+2]) 142 | tuple_rows.append(tup) 143 | index += 3 144 | #shuffle the tuple 145 | 146 | # random.shuffle(tuple_rows) 147 | print ("The number of students is ", len(tuple_rows)) 148 | print ("Finish reading data") 149 | return tuple_rows, max_num_problems, max_skill_num+1 150 | --------------------------------------------------------------------------------