set STUDS; set COURSES; set GRADES within {STUDS, COURSES}; param grade {GRADES}; var aptitude {STUDS}; var difficulty {COURSES}; var dev {GRADES} >= 0; minimize sum_dev: sum {(s,c) in GRADES} dev[s,c]; subject to def_pos_dev {(s,c) in GRADES}: aptitude[s] - difficulty[c] - grade[s,c] <= dev[s,c]; subject to def_neg_dev {(s,c) in GRADES}: -dev[s,c] <= aptitude[s] - difficulty[c] - grade[s,c]; subject to normalized_difficulty: sum {c in COURSES} difficulty[c] = 0; data; set STUDS := John Paul George Ringo ; set COURSES := MAT CBE ANT REL POL ECO ; param: GRADES: grade := John ANT 2.3 John REL 2.7 John POL 3 John ECO 3.3 Paul CBE 2.3 Paul ANT 2.7 Paul POL 3.3 Paul ECO 3.7 George MAT 2.3 George CBE 2.7 George REL 3.3 George POL 3.7 Ringo MAT 2.7 Ringo CBE 3 Ringo ANT 3.3 Ringo REL 3.7 ; solve; display aptitude; display difficulty;