我很难尝试制定(递归)算法,该算法分析要在计划中执行的所有可能的任务组合。我的想法是,我需要找到一个替代的时间表。现在,我被告知可以通过递归算法轻松实现,该算法分析所有可能的组合并选择最便宜的解决方案。
我是基于解决方案的某个成本来做到这一点,我这样做是多么微不足道。在我的日程安排中,我有两台机器,我们称之为机器A和机器B以及一系列要执行的作业,进一步分为当前作业和预定作业。
输入:
ScheduledJobs: [Job 1, Job 2, Job 3, ..., Job N] (HashSet)
CurrentJobs: [Job 0, Job 00] (ArrayList)
Machines: [Machine A, Machine B] (ArrayList)
预期结果的形式为:
Hashmap
Machine A: Job0 | Job2 | Job3 | ...
Machine B: Job00| Job1 | Job4 | Job5 | ...
Unassigned: Job6
因此我们可以将作业分配给机器A或机器B,或者当这些作业无法分配时取消它们。
然后我想到的算法的工作方式如下:我相信我可以通过说明一个系列的成本是工作成本+系列成本来找到最便宜组合的成本。类似的东西:
function(job1)
for each job2 in set
cost = job1.getCost() + function(job2)
在伪代码中:
public myObject function(job1, myObject){
make copies of all input //name this copyOf
for each job2 in the copyOfScheduledJobs do:
if job2 can be scheduled after job1 {
set the expected start time for job1
cost = job1.getCost() + function(job2, myObject)
if cost < value { // value is calculated by looping through the entire set and summing by getting getCost()
value()
add job2 to a list
}
} else if (!copyOfCurrentJobs.isEmpty())
copyOfCurrentJobs.remove(0)
nextCJ = copyOfCurrentJobs.get(0)
copyOfCurrentJobs.remove(0)
cost = cost + function(job2, myObject)
} else {
cost = job1.getCost()
}
}
return myObject
}
使用这种算法,我发现只有一个绝对不是最佳的计划。
我的问题是:我如何修改它以获得正确的解决方案?如下面的评论中所述,它不一定是递归算法,但这是我能想到的最好的算法。
这已经有点长了,但我试图尽可能彻底地解释我的问题。希望你能帮忙!
删除了过多的信息。