set BIDS; set ITEMS; var accepted{j in BIDS}, binary; param contains{i in ITEMS, j in BIDS}; param value{j in BIDS}; maximize reward: sum{j in BIDS} value[j]*accepted[j]; s.t. allocated_at_most_once{i in ITEMS}: sum{j in BIDS} accepted[j]*contains[i,j] <=1; data; set ITEMS := A B; set BIDS := b1 b2 b3; param value := b1 6 b2 6 b3 10; param contains: b1 b2 b3 := A 1 0 1 B 0 1 1; end;