Background:
I have a dependency graph, i.e. a directed graph where the nodes are tasks and the edges are dependency relations. Moreover, nodes are assigned a weight since they take different amount of time to complete.
I have developed an algorithm that rearranges the graph by merging some nodes together that can be computed as one task instead of several separate tasks (this is not parallel computing), i.e. the algorithm reduces the number of tasks. However, this algorithm doesn't always give one rearrangement of the graph but can produce many, e.g. three graphs where all of them are in some sense the same graph but rearranged.
What I want to do is the following:
I want to determine which one of the different rearranged graphs is the "best" where "best" is determined by some type of grading criteria. I was thinking this criteria could be some type of measurement of parallel degree that takes the weights in consideration. I have tried just using a topological sort but I find this approach a bit to primitive. After picking a graph, I would also want to produce a scheduling list of the tasks. The weights can be seen as estimations on how long a given task will take to complete, but these are only rough estimations.
Questions:
What kind of measurement of parallel degree could I use and what algorithms are there for grading this and also for scheduling the tasks accordingly?