I have a problem and need to find proper algorithm to tackle it. Basically, I have a finite set of items I, each having N distinct and discrete properties like color, shape, material i.e. I = [P1, P2, P2, ... PN]
I need to pick "best" 10 items to create a set S = [I1, I2, ... I10] with maximized "score". Points are awarded based on numerous business rules e.g. too many colors in set - bad, various sizes - good etc.
How would you approach this problem?