m做任务 都有哪些N个人M个任务MN每个人i做每个任务j有一个已知收益Vij要总收益最大。什么算法?
N小我,M个使命,MN,每小我i做每个使命j无一个未知收害Vij,要分收害最大。什么算法?
弥补前提:每个使命花一段未知的时间,每小我工做时间无未知的分歧上限。并不是所无使命都要完成,也不是每小我都要放置满使命,只需分收害最大。求教大神用什么…
那个问题正在N=1的时候“退化”为0/1背包问题,而0/1背包问题是NPC的,所以没无多项式以内的算法(不然就搞个大旧事了)。
当然若是使命用时是零数并且无个出格小的常数上限的话大概能够做。出格地,若是所无使命用时都是1的话那是个最佳婚配问题。
定义解向量x(i, j) = 1 if worker i takes job j else 0,那个向量的下标(i, j)是二维的,可是果为N和M未知,很容难编码成一维的。
worker_cost(i, j) if k = i else 0, when k is in [0, N);
1 if (k-N) = j else 0, when k is in [N, N+M);
A分为两部门,[0, N)行束缚“每个worker不克不及过劳死”,[N, N+M)行束缚“每个工做最多被一个worker拿下”。
那个该当是属于典范的Job Shop Scheduling Problem(JSSP,车间出产安排问题)。解法无挺多的, 可是都是NP的。你能够查阅一下JSSP的相关材料。