I'm having trouble defining this problem space (example below), where to look, what to search etc. and would appreciate any help with suggestions of algorithms or libraries that I should look into. I've spent some time looking into constraint programming & OR-Tools but most problems seem to be scalar and I haven't yet been able to figure out how to use any of the solutions effectively to solve my problem. My project is in C# (.NET Core 3.0)
EXAMPLE:
Say I have 3 objects (o) that each have associated attributes (a):
//object 1 has attributes 1, 2, and 3
o1 { a1, a2, a3 }
//object 2 has attributes 1 and 3
o2 { a1, a3 }
//object 3 has attributes 2 and 3
o3 { a2, a3 }
Then say that a person is able to select certain attributes they are interested in, specifically in this example the person is interested in:
//the person wants to see objects or groups/sets of objects that have attributes 1 and 2
a1 and a2
The goal then would be to return to the person set(s) of the objects that best contain the selected attributes with the least number of objects needed. In this case the desired return result would be:
//object 1 is the best solution because it contains attributes 1 and 2 by itself
1. o1
//object's 2 and 3 together is the 2nd best solution because they contain attributes 1 and 2 between themselves
2. o2 and o3
This is a very simple example but the actual scale of the objects and attributes associated to those objects will require something much more efficient than brute force. Thanks in advance!