Jack01 schrieb:
> TJ sorts to a task sometimes more then one resource, that's what I
> want to avoid. On the other hand TJ longens the duration by using the
> same resource for both tasks in parallel.
> What is the easiest way to solve my problem?
task1 {
effort 10d
allocate ps1 {
alternative ps2, ps3
persistent
}
}
should do the trick.
Best regards,
Tim
> thanks for the answer. I allready tried the persistent attribute. If I
> use it the same resource (e.g. ps1) is used for both tasks. This
> longens the duration of the tasks instead of doing both tasks by one
> resource for each task in parallel!?
the only case where this can happen is when a higher priority task
pre-empts a lower priority task. Can you post an example, please.
Chris
> the only case where this can happen is when a higher priority task
> pre-empts a lower priority task. Can you post an example, please.
If I set different priorities for the tasks the problem is solved, too.
In this case, you can clearly see the bug by opening the produced Work by task.html: the mechanic 2 is never assigned to the task and the entire project takes longer due to that.
Hello again,Sorry i meant everything seems the work like i expect when there is no dependencies, but as soon as i start to putsome, then what is described below happens.Thanks !Ash
On Sunday, August 5, 2012 8:26:55 AM UTC-7, Ash wrote:Hi Chris,I have the same problem than Francis here. His example show it pretty clearly if you look at the Work by Task page.Mechanic01 get the Frame.Base task assigned but the scheduler, and as soon as the Frame.Motor task becomesavailable it is assigned to Mechanic01. What i would expect is to see Mechanic01 finish with the current task andget Frame.Motor assigned to Mechanic02. If you look at the Resource Graph page, Mechanic02 gets absolutely notask assigned.I got the same problem in a pretty large project. Everything seems to work like i expect when there is dependencies,but as soon as some predecessor task for a particular task is finished, this task gets assigned by the scheduler rightaway if a resource has already another task assigned and other resources are available.
We are telling you that the tool doesn't work as we expect, which means that we will not be able to use it effectively. I suggest that it would help if you could give us a brief idea of how the allocation and scheduling process work so we can use this amazing tool better.
Let me add one more quick question. Is there a way to assign a couple of task to the sameresource using the "alternative" keyword ? Like for example a task containing 2 sub-tasks wouldbe assigned to the same resource even when the "alternative" keyword is used ? I am not surethat i actually want to do that, but i figured that i was worst the question.
Ok, I see the problem now. It's due to the heavy use of 'persistent'
Here is a project where this task re-assigment happens. Sorry for the gibberish but i hadto rename the tasks and teams. In any case if you look at the LLL Team in the ResourceGraph page, The resource LLL 01 starts to work on task called BC_050_055 LLL for 0.5dand then is re-assigned to bunch of other task until 8 weeks later it is finally re-assignedto this task for 1.5d to finish with it. It happens a lot along the whole project, sometimes itis less obvious. Still on the Resource Page, LLL 01 is assigned to a task called HC_037_015 LLL,that is supposed to last for days but is spread on 3 weeks : 0.5d + 1.0d + 0.5d.Is there something wrong with the project structure ? Or do you think i am hitting anothercorner case ?
I have read the documentation and I just read it again to be sure I didn't miss something. It is a good general explanation of how the scheduler works but it doesn't explain why the combination of the "persistent" keyword and the calculated path criticalness combine to create a behavior that you describe as a "corner case".
I suppose that there are some aspects of TaskJuggler concept of criticalness (path, resource and milestone) that are a bit counter intuitive to me. For instance, how can a milestone every be on the critical path since it has by definition no resource allocation and no duration. How can an event like that ever effect the duration of the project in any way other than through dependency relationships?
I am a long time TaskJuggler user and don't think that this is the way TaskJuggler 2.X worked, although I haven't tested that hypothesis. The point is that I have been using the persistent keyword to insure that once a resource is assigned to a task, that the resource stays assigned to that task rather than having another resource assigned based on resource balancing efficiency.
It seems that in Francis' case above, that there is something wrong with the allocation and scheduling algorithm because it creates a schedule that doesn't effectively allocate the available resources in the most efficient way within the constraints of the task description, in this case using the persistent keyword for every task. I suppose that it depends of course on what you mean by efficient. In the case of the way tj3 schedules the project, it is efficient in the sense that it uses the fewest possible resources but the project takes longer.
I am attaching a simple edit of Francis' project where I explicitly allocate the "Mechanic" resources in what I consider to be a more efficient way, using the word efficient to mean the shortest schedule and the best use of the available resources.In short, in Francis' case, TaskJuggler doesn't seem to work as I would expect given my reading of the documentation.
Your project has a lot of very similar tasks groups that all compete for the same set of resources. Your resources are so heavily competed for that their availability largely drives the schedule. To mitigate the artifacts you are seeing, I would recommend to at least prioritize your top-level tasks somewhat. If you look at the pathcritical values of the tasks that use LLL or VVV resources, they are all the same. That removes any chance of the heuristic to make some educated guesses which tasks are more important than others.
Thanks again for your patience and your very thorough answer. I feel that I understand the scheduling process considerably better now and that I will be able to use TaskJuggler more effectively as a result of it.
I agree that it can be desirable to have a resource working on a task
without interrupts.
I do not agree that a lower priority task should
steal resources from a higher priority task just because the lower
priority task started earlier and got the resource first.
Unfortunately, this isn't trivial to implement. The scheduler can
neither look forward to find such an interval, nor can it roll back
allocations it has already made. Fortunately, the amount of state that
would need to be rolled back in case the scheduler detects that it
cannot assign the resource atomically, is not that big. I'll see if I
can implement something.
On Sat, Sep 8, 2012 at 11:53 PM, John C. <jo...@carey.org> wrote:
> It occurs to me that this might be handled by not letting the scheduler
> "see" resources that are allocated using the "exclusive" attribute until the
> task to which they are assigned are completed. This seems to me would
> provide exactly the behavior we are seeking and at the same time, wouldn't
> require any change to the scheduler, only the way resources are presented to
> it when the scheduler is trying to arbitrate between tasks and resources.
But this would lead to the priority being ignored. I don't think this
is acceptable behavior as it would introduce a serious inconsistency.
I have made several attempts but they all have serious complexity
issues. I'm now working on a partial roll-back support so I can retry
tasks to start at a later date should the persistent resource be
assigned to another task already. But I'm still not sure if it's a
workable solution.
In the use case that some of us are hoping to be able to model with TaskJuggler, I think that what you are describing as a "serious inconsistency" may well be the desired behavior, more or less. Just to clarify, we don't want to ignore priority with regard to the initial assignment, but once a resource is assigned to a task, we would like that resource to stay assigned to that task regardless of priority. In other words, in some cases, we don't want either priority or "criticalness" to be able to preempt an existing assignment in those cases that we so designate. We would like a resource that is assigned to a task with the new "exclusive" attribute to always win the priority and "criticalness" contention for that task or we would like a resource, once assigned exclusively to be removed from the resources list until such time as the task to which it is exclusively allocated has completed.What is the inconsistency that would be introduced by that behavior? I am curious because a number of us seem to think that the current behavior is inconsistent, at least with regard to our intent.
Task priorities are a very important mechanism to influence the resource assignments. 'priority' always overrules the heuristic. If a higher priority task does not get the resource because a lower priority task keeps hugging them than this would be inconsistent behavior.BTW, resources are assigned to tasks from priority 1000 down to 1. So the higher priority task usually has the resources already assigned before the scheduler even notices that a lower priority task wants to keep their resource no matter what. The challenge comes when multiple alternative resources have been given. Finding the right one that will be available without interrupts is currently not possible.Chris