Я бы забыл о графиках и рассматривал бы списки задач как векторы - каждая задача представлена как компонент со значением, равным ее стоимости (время выполнения в этом случае.
В задачах изначально находятся в разных областяхэто то, где можно использовать знания предметной области, чтобы привести их к канонической форме и назначить множители, если знание предметной области говорит вам, что соотношение затрат будет существенно зависеть от порядка / времени. Время - это неявное первоначальное упорядочение, но вам, возможно, придется сделать функциювремя только для поправочных коэффициентов (скажем, вождение в обеденное время по сравнению с вождением в полночь). Функция может быть табличной / дискретной. В общем, всегда намного проще оценить соотношения и относительные отклонения (трудности выполнения чего-либо). Вам может понадобиться функциональный язык, чтобы сделатьповторяющиеся переписывания ваших векторов до тех пор, пока знания и правила не могут измениться.
С каноническими векторами учитывайте только наличие и отсутствие задачи (всего 0 | 1 для этой итерации) и ищите миниmal diffs - одна задача diffs первой - это даст оценки для небольшого числа переменных.Продолжайте делать это рекурсивно, будьте готовы отследить и до сих пор иметь эвристическое правило для достоверности или качества оценок.Следите за хорошими «раундами», от которых вы вернулись.
Когда вы достигнете минимального несводимого состояния - больше не будет различий - все векторы имеют одинаковые оставшиеся задачи, тогда вы можете сделать некоторую базовую статистику, такую как дисперсия,среднее, среднее и искать большие выбросы и способы улучшить начальные оценки, основанные на знании предметной области, которые ведут к канонической форме.Если вы нашли много из них и можете определить новые правила, примите их и запустите весь процесс с самого начала.
Да, это может стоить много :-)